From 825439e95188bd990448fab1512b1d11cdff88b8 Mon Sep 17 00:00:00 2001
From: baigner <benedikt.aigner@rwth-aachen.de>
Date: Thu, 5 Apr 2018 16:11:42 +0200
Subject: [PATCH] VISTOMS update: Changed folder structure and deleted obsolete
 files

Former-commit-id: bce088162251b945c98dfb000824ff29c4a9f5a3
---
 .../VISTOMS_Static.html}                      | 53562 ++++++++--------
 .../VISTOMS_TreeViewer.html}                  | 40896 ++++++------
 .../VISTOMS_170817/include/AGILE_Icon.png     |   Bin 24690 -> 0 bytes
 .../VISTOMS_170817/include/AGILE_Logo.png     |   Bin 14199 -> 0 bytes
 .../include/Acknowledgements.png              |   Bin 192042 -> 0 bytes
 .../include/Acknowledgements.svg              |   127 -
 .../VISTOMS_170817/include/Contact.png        |   Bin 16269 -> 0 bytes
 .../VISTOMS_170817/include/Contact.svg        |    47 -
 .../vispack/VISTOMS_170817/include/Home.png   |   Bin 8000 -> 0 bytes
 .../vispack/VISTOMS_170817/include/Home.svg   |    26 -
 .../VISTOMS_170817/include/RWTH_Logo.png      |   Bin 126111 -> 0 bytes
 .../VISTOMS_170817/include/RWTH_Logo.svg      |    58 -
 .../VISTOMS_170817/include/TUDelft_Logo.png   |   Bin 17349 -> 0 bytes
 .../VISTOMS_170817/include/TUDelft_Logo.svg   |   131 -
 .../VISTOMS_170817/include/Tutorial.png       |   Bin 19351 -> 0 bytes
 .../VISTOMS_170817/include/Tutorial.svg       |    70 -
 .../VISTOMS_170817/include/VISTOMS_Label.png  |   Bin 99175 -> 0 bytes
 .../VISTOMS_170817/include/VISTOMS_Label.svg  |    90 -
 .../VISTOMS_TreeViewer/include/AGILE_Icon.png |   Bin 24690 -> 0 bytes
 .../VISTOMS_TreeViewer/include/AGILE_Logo.png |   Bin 14199 -> 0 bytes
 .../include/Acknowledgements.png              |   Bin 192042 -> 0 bytes
 .../include/Acknowledgements.svg              |   127 -
 .../VISTOMS_TreeViewer/include/Contact.png    |   Bin 16269 -> 0 bytes
 .../VISTOMS_TreeViewer/include/Contact.svg    |    47 -
 .../VISTOMS_TreeViewer/include/Home.png       |   Bin 8000 -> 0 bytes
 .../VISTOMS_TreeViewer/include/Home.svg       |    26 -
 .../VISTOMS_TreeViewer/include/RWTH_Logo.png  |   Bin 126111 -> 0 bytes
 .../VISTOMS_TreeViewer/include/RWTH_Logo.svg  |    58 -
 .../include/TUDelft_Logo.png                  |   Bin 17349 -> 0 bytes
 .../include/TUDelft_Logo.svg                  |   131 -
 .../VISTOMS_TreeViewer/include/Tutorial.png   |   Bin 19351 -> 0 bytes
 .../VISTOMS_TreeViewer/include/Tutorial.svg   |    70 -
 .../include/VISTOMS_Label.png                 |   Bin 99175 -> 0 bytes
 .../include/VISTOMS_Label.svg                 |    90 -
 34 files changed, 47229 insertions(+), 48327 deletions(-)
 rename kadmos/vispack/{VISTOMS_170817/VISTOMS_datarepl.html => VISTOMS/VISTOMS_Static.html} (98%)
 rename kadmos/vispack/{VISTOMS_TreeViewer/VISTOMS_TreeViewer_datarepl.html => VISTOMS/VISTOMS_TreeViewer.html} (98%)
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/AGILE_Icon.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/AGILE_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Acknowledgements.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Acknowledgements.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Contact.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Contact.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Home.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Home.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Tutorial.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/Tutorial.svg
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.png
 delete mode 100755 kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Icon.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Contact.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Contact.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Home.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Home.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.svg
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.png
 delete mode 100755 kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.svg

diff --git a/kadmos/vispack/VISTOMS_170817/VISTOMS_datarepl.html b/kadmos/vispack/VISTOMS/VISTOMS_Static.html
similarity index 98%
rename from kadmos/vispack/VISTOMS_170817/VISTOMS_datarepl.html
rename to kadmos/vispack/VISTOMS/VISTOMS_Static.html
index 510fbc9c3..3ef211cc9 100644
--- a/kadmos/vispack/VISTOMS_170817/VISTOMS_datarepl.html
+++ b/kadmos/vispack/VISTOMS/VISTOMS_Static.html
@@ -1,26781 +1,26781 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
-<meta name="format-detection" content="telephone=no">
-<meta name="apple-mobile-web-app-capable" content="yes">
-<meta name="apple-mobile-web-app-status-bar-style" content="default">
-<style>
-*!
- * Bootstrap v3.3.7 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
-/*# sourceMappingURL=bootstrap.min.css.map */
-
-a:link {
-	color:#555;
-	text-decoration: underline;
-}
-a:visited {color:#999;}
-
-.wordWrap {
-    word-wrap: break-word;      /* IE 5.5-7 */
-    white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */
-    white-space: pre-wrap;      /* current browsers */
-	width: 800px;
-    margin-top: 16px;
-	color:#555555;
-	margin:20px 10px;
-	font-family:Arial;
-	font-size:12pt;
-}
-
-
-/*
-* XDSMjs
-* Copyright 2016 Rémi Lafage
-*/
-
-/* Component types */
-.xdsm .user {
-visibility: hidden;
-}
-
-.xdsm .coordinator {
-fill: #FFFFFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .optimization {
-fill: #CCCCFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .converger {
-fill: #FFE5CC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .doe {
-fill: #FFFCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .surrogatemodel {
-fill: #FFFCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .rcganalysis {
-fill: #E5DEB3;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .precouplinganalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .preiteratoranalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .postiteratoranalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .coupledanalysis {
-fill: #CCFFCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .postcouplinganalysis {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .consistencyconstraintfunction {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .lp_optimization {
-fill: #CCCCFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .analysis {
-fill: #CCFFCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .mdo {
-fill: #FFCCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .function {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .mda {
-fill: #FFE5CC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .metamodel {
-fill: #FFFCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-/* Title */
-.xdsm g.title text {
-display: block;
-font-size: 2em;
-margin-top: 0.67em;
-margin-bottom: 0.67em;
-margin-left: 0;
-margin-right: 0;
-font-family:Arial;
-}
-.xdsm g.title rect {
-fill: none;
-}
-
-
-/* Text Default */
-.xdsm text {
-fill: black;
-stroke: none;
-font-size: 16pt;
-font-family:Arial;
-}
-.xdsm tspan.sub {
-font-size: small;
-font-family:Arial;
-}
-.xdsm tspan.sup {
-font-size: small;
-font-family:Arial;
-}
-
-/* Data */
-.xdsm .dataInter polygon {
-fill: #E5E5E5;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .dataIO polygon {
-fill: #FFFFFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-/* Dataflow */
-.xdsm g.dataflow {
-fill: none;
-stroke: grey;
-stroke-width: 8px;
-}
-
-/* Workflow */
-.xdsm g.workflow {
-fill: none;
-stroke: black;
-stroke-width: 2px;
-}
-
-/* Tooltip */
-div.tooltip {
-position: absolute;
-text-align: center;
-font-size: 16pt;
-padding: 10px;
-background: lightsteelblue;
-border: 0px;
-border-radius: 8px;
-pointer-events: none;
-}
-
-div.treeDiv {
-position: absolute;
-}
-
-div.contextDiv {
-position: absolute;
-}
-
-sub, sup {
-/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
-font-size: 75%;
-/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
-line-height: 0;
-/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
-position: relative;
-/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
-vertical-align: baseline;
-}
-
-sup {
-/* Move the superscripted text up */
-top: -0.5em;
-}
-
-sub {
-/* Move the subscripted text down, but only half as far down as the superscript moved up */
-bottom: -0.5em;
-}
-
-
-/*Edge Bundles Styles*/
-/*##############################################################*/
-.edgeBundlesNode {
-  fill: #aaa;
-}
-
-.edgeBundlesNode:hover {
-  fill: #555555;
-}
-
-.edgeBundlesLink {
-  stroke: #3399FF;
-  stroke-opacity: 0.4;
-  stroke-width: 2px;
-  fill: none;
-  
-}
-
-.invisibleLink {
-  stroke: #000;
-  stroke-opacity: 0;
-  stroke-width: 15px;
-  fill: none;
-}
-.invisibleLink:hover {
-  stroke: #3399FF;
-  stroke-opacity: 1.0;
-  stroke-width: 5px;
-  fill: none;
-}
-
-.edgeBundlesNode:hover,
-.edgeBundlesNode--source,
-.edgeBundlesNode--target {
-  font-weight: 700;
-}
-
-.edgeBundlesNode--source {
-  fill: #99CC00;
-}
-
-.edgeBundlesNode--target {
-  fill: #CC0000;
-}
-
-.edgeBundlesLink--target,
-.edgeBundlesLink--source{
-  stroke-width: 5px;
-}
-
-.edgeBundlesLink--source {
-  stroke: #CC0000;
-  stroke-opacity: .5;
-}
-
-.edgeBundlesLink--target {
-  stroke: #99CC00;
-  stroke-opacity: .5;
-}
-
-.sankeyNode rect {
-  cursor: grab;
-  shape-rendering: crispEdges;
-}
-
-.sankeyNode text {
-  pointer-events: none;
-  text-shadow: 1px 1px 2px #fff;
-  font-size: 0.8em;
-  font-family: sans-serif;
-}
-
-#tooltip {
-  position: absolute;
-  pointer-events: none;
-  font-size: 0.7em;
-  font-family: sans-serif;
-  padding: 3px;
-  width: auto;
-  height: auto;
-  background-color: #F2F2F2;
-  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4);
-  -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4);
-  box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4);
-  pointer-events: none;
-}
-
-.value {
-  white-space: pre-line;
-  margin: 0;
-}
-
-/* Aigner: New styles for tree layout */
-.treeNode {
-cursor: pointer;
-}
-
-.overlay{
-background-color:#FFF;
-}
-
-.treeNode circle {
-fill: #fff;
-stroke: #3399FF;
-stroke-width: 1.5px;
-}
-
-.treeNode text {
-font-size:16pt; 
-font-family:Arial;
-}
-
-.treeLink {
-fill: none;
-stroke: #ccc;
-stroke-width: 1.5px;
-}
-
-.d3-context-menu {
-	position: absolute;
-	display: none;
-	background-color: #f2f2f2;
-	border-radius: 4px;
-	font-family: Arial;
-	font-size: 16pt;
-	width: 300px;
-	border: 1px solid #d4d4d4;
-	z-index:1200;
-}
-.d3-context-menu ul {
-	list-style-type: none;
-	margin: 4px 0px;
-	padding: 0px;
-	cursor: default;
-}
-.d3-context-menu ul li {
-	padding: 4px 16px;
-}
-.d3-context-menu ul li:hover {
-	background-color: #3399FF;
-}
-.d3-context-menu ul li > ul {
-    position: absolute; 
-    background-color: #f2f2f2; 
-    top: 0;
-	min-width: 350px;
-    left: 290px; 
-    z-index: -1; 
-} 
-
-.d3-context-menu ul li > ul li:hover 
-{ 
-    background-color: #3399FF;
-	color: #fefefe;
-}
-
-.button {
-fill: #555555;
-stroke: white;
-stroke-width: 1.5;
-}
-
-.copyRightText {
-font-family: Arial;
-font-size: 12pt;
-fill: #555555;
-}
-
-.newDiv {
-	position:relative;
-	top: -100px;
-	left: 220px;
-	background-color: none;
-}
-.newDiv a {
-    text-decoration: none;
-    color: white;
-    font-family: Arial;
-    font-size: 20pt;
-    padding-top: 12px;
-    padding-right: 12px;
-    padding-bottom: 12px;
-    padding-left: 6px;
-    display:inline-block;
-}
-.newDiv ul {
-  display:  inline-block;;
-  margin: 0;
-  padding: 0;
-  background-color: #555555;
-}
-.newDiv ul li {display: inline-block;}
-.newDiv ul li:hover {background: #888;}
-.newDiv ul li:hover ul {display: block;}
-.newDiv ul li ul {
-  position: absolute;
-  min-width: 200px;
-  display: none;
-}
-.newDiv ul li ul li { 
-  background: #555; 
-  display: block;
-}
-.newDiv ul li ul li a {
-	display:block !important
-} 
-.newDiv ul li ul li:hover {background: #3399FF;}
-
-
-.dataModelDiv {
-	position:relative;
-	top: 0px;
-	left: 10px;
-	background-color: none;
-}
-.dataModelDiv a {
-    text-decoration: none;
-    color: white;
-    font-family: Arial;
-    font-size: 16pt;
-    padding-top: 5px;
-    padding-right: 12px;
-    padding-bottom: 5px;
-    padding-left: 16px;
-    display:inline-block;
-}
-.dataModelDiv ul {
-  display:  inline-block;
-  margin: 0;
-  padding: 0;
-  background-color: #555555;
-  border-radius: 5px;
-  border-style: solid; 
-  border-width: 2px;
-  border-color: #555555;
-}
-.dataModelDiv ul li {display: inline-block;}
-.dataModelDiv ul li:hover {
-	background: #888;
-}
-.dataModelDiv ul li:hover ul {display: block;}
-.dataModelDiv ul li ul {
-  position: absolute;
-  align: right;
-  left: 150px;
-  top: 0px;
-  min-width: 180px;
-  display: none;
-}
-.dataModelDiv ul li ul li { 
-  background: #555555; 
-  display: block;
-}
-.dataModelDiv ul li ul li a {
-	display:block !important
-} 
-.dataModelDiv ul li ul li:hover {background: #3399FF;}
-
-table {
-	width: 800px;
-	table-layout:fixed;
-}
-
-
-
-
-table, th, td {
-	font-family: Arial;
-    font-size: 16pt;
-	background-color: white;
-    border: 2pt solid darkgrey;
-    border-collapse: collapse;
-	text-align: left;
-	word-wrap:break-word;
-}
-}
-th, td {
-    padding-top: 6px;
-    padding-right: 20px;
-    padding-bottom: 6px;
-    padding-left: 20px;
-	min-width: 100px;
-	max-width: 400px;
-}
-
-.remCircle {
-	stroke: black;
-	stroke-width: 2;
-	fill: red;
-	fill-opacity: .6
-}
-.remMinus {
-	stroke: black;
-	stroke-width: 2;
-}
-
-</style>
-    <head>
-		<meta charset="utf-8">
-		<title>VISTOMS (Visualization Tool for MDO Systems)</title>
-    </head>
-    <body>
-		<script>	
-			(function() {
-			/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
-			!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
-			a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d));
-			},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
-
-			function createShiftArr(step) {
-
-				var space = '    ';
-				
-				if ( isNaN(parseInt(step)) ) {  // argument is string
-					space = step;
-				} else { // argument is integer
-					switch(step) {
-						case 1: space = ' '; break;
-						case 2: space = '  '; break;
-						case 3: space = '   '; break;
-						case 4: space = '    '; break;
-						case 5: space = '     '; break;
-						case 6: space = '      '; break;
-						case 7: space = '       '; break;
-						case 8: space = '        '; break;
-						case 9: space = '         '; break;
-						case 10: space = '          '; break;
-						case 11: space = '           '; break;
-						case 12: space = '            '; break;
-					}
-				}
-
-				var shift = ['\n']; // array of shifts
-				for(ix=0;ix<100;ix++){
-					shift.push(shift[ix]+space); 
-				}
-				return shift;
-			}
-
-			function vkbeautify(){
-				this.step = '    '; // 4 spaces
-				this.shift = createShiftArr(this.step);
-			};
-
-			vkbeautify.prototype.xml = function(text,step) {
-
-				var ar = text.replace(/>\s{0,}</g,"><")
-							 .replace(/</g,"~::~<")
-							 .replace(/\s*xmlns\:/g,"~::~xmlns:")
-							 .replace(/\s*xmlns\=/g,"~::~xmlns=")
-							 .split('~::~'),
-					len = ar.length,
-					inComment = false,
-					deep = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;
-
-					for(ix=0;ix<len;ix++) {
-						// start comment or <![CDATA[...]]> or <!DOCTYPE //
-						if(ar[ix].search(/<!/) > -1) { 
-							str += shift[deep]+ar[ix];
-							inComment = true; 
-							// end comment  or <![CDATA[...]]> //
-							if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
-								inComment = false; 
-							}
-						} else 
-						// end comment  or <![CDATA[...]]> //
-						if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
-							str += ar[ix];
-							inComment = false; 
-						} else 
-						// <elm></elm> //
-						if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
-							/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
-							str += ar[ix];
-							if(!inComment) deep--;
-						} else
-						 // <elm> //
-						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
-							str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
-						} else 
-						 // <elm>...</elm> //
-						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
-							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
-						} else 
-						// </elm> //
-						if(ar[ix].search(/<\//) > -1) { 
-							str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
-						} else 
-						// <elm/> //
-						if(ar[ix].search(/\/>/) > -1 ) { 
-							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
-						} else 
-						// <? xml ... ?> //
-						if(ar[ix].search(/<\?/) > -1) { 
-							str += shift[deep]+ar[ix];
-						} else 
-						// xmlns //
-						if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
-							str += shift[deep]+ar[ix];
-						} 
-						
-						else {
-							str += ar[ix];
-						}
-					}
-					
-				return  (str[0] == '\n') ? str.slice(1) : str;
-			}
-
-			vkbeautify.prototype.json = function(text,step) {
-
-				var step = step ? step : this.step;
-				
-				if (typeof JSON === 'undefined' ) return text; 
-				
-				if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
-				if ( typeof text === "object" ) return JSON.stringify(text, null, step);
-					
-				return text; // text is not string nor object
-			}
-
-			vkbeautify.prototype.css = function(text, step) {
-
-				var ar = text.replace(/\s{1,}/g,' ')
-							.replace(/\{/g,"{~::~")
-							.replace(/\}/g,"~::~}~::~")
-							.replace(/\;/g,";~::~")
-							.replace(/\/\*/g,"~::~/*")
-							.replace(/\*\//g,"*/~::~")
-							.replace(/~::~\s{0,}~::~/g,"~::~")
-							.split('~::~'),
-					len = ar.length,
-					deep = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;
-					
-					for(ix=0;ix<len;ix++) {
-
-						if( /\{/.exec(ar[ix]))  { 
-							str += shift[deep++]+ar[ix];
-						} else 
-						if( /\}/.exec(ar[ix]))  { 
-							str += shift[--deep]+ar[ix];
-						} else
-						if( /\*\\/.exec(ar[ix]))  { 
-							str += shift[deep]+ar[ix];
-						}
-						else {
-							str += shift[deep]+ar[ix];
-						}
-					}
-					return str.replace(/^\n{1,}/,'');
-			}
-
-			//----------------------------------------------------------------------------
-
-			function isSubquery(str, parenthesisLevel) {
-				return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
-			}
-
-			function split_sql(str, tab) {
-
-				return str.replace(/\s{1,}/g," ")
-
-							.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
-							.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
-							.replace(/ CASE /ig,"~::~"+tab+"CASE ")
-							.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
-							.replace(/ END /ig,"~::~"+tab+"END ")
-							.replace(/ FROM /ig,"~::~FROM ")
-							.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
-							.replace(/ HAVING /ig,"~::~HAVING ")
-							//.replace(/ SET /ig," SET~::~")
-							.replace(/ IN /ig," IN ")
-							
-							.replace(/ JOIN /ig,"~::~JOIN ")
-							.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
-							.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
-							.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
-							.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
-							
-							.replace(/ ON /ig,"~::~"+tab+"ON ")
-							.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
-							.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
-							.replace(/ OVER /ig,"~::~"+tab+"OVER ")
-
-							.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
-							.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
-							
-							.replace(/ THEN /ig," THEN~::~"+tab+"")
-							.replace(/ UNION /ig,"~::~UNION~::~")
-							.replace(/ USING /ig,"~::~USING ")
-							.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
-							.replace(/ WHERE /ig,"~::~WHERE ")
-							.replace(/ WITH /ig,"~::~WITH ")
-							
-							//.replace(/\,\s{0,}\(/ig,",~::~( ")
-							//.replace(/\,/ig,",~::~"+tab+tab+"")
-
-							.replace(/ ALL /ig," ALL ")
-							.replace(/ AS /ig," AS ")
-							.replace(/ ASC /ig," ASC ")	
-							.replace(/ DESC /ig," DESC ")	
-							.replace(/ DISTINCT /ig," DISTINCT ")
-							.replace(/ EXISTS /ig," EXISTS ")
-							.replace(/ NOT /ig," NOT ")
-							.replace(/ NULL /ig," NULL ")
-							.replace(/ LIKE /ig," LIKE ")
-							.replace(/\s{0,}SELECT /ig,"SELECT ")
-							.replace(/\s{0,}UPDATE /ig,"UPDATE ")
-							.replace(/ SET /ig," SET ")
-										
-							.replace(/~::~{1,}/g,"~::~")
-							.split('~::~');
-			}
-
-			vkbeautify.prototype.sql = function(text,step) {
-
-				var ar_by_quote = text.replace(/\s{1,}/g," ")
-										.replace(/\'/ig,"~::~\'")
-										.split('~::~'),
-					len = ar_by_quote.length,
-					ar = [],
-					deep = 0,
-					tab = this.step,//+this.step,
-					inComment = true,
-					inQuote = false,
-					parenthesisLevel = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;;
-
-					for(ix=0;ix<len;ix++) {
-						if(ix%2) {
-							ar = ar.concat(ar_by_quote[ix]);
-						} else {
-							ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
-						}
-					}
-					
-					len = ar.length;
-					for(ix=0;ix<len;ix++) {
-						
-						parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
-						
-						if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
-							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
-						} 
-						
-						if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
-							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
-						} 
-						
-						if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
-							deep++;
-							str += shift[deep]+ar[ix];
-						} else 
-						if( /\'/.exec(ar[ix]) )  { 
-							if(parenthesisLevel<1 && deep) {
-								deep--;
-							}
-							str += ar[ix];
-						}
-						else  { 
-							str += shift[deep]+ar[ix];
-							if(parenthesisLevel<1 && deep) {
-								deep--;
-							}
-						} 
-						var junk = 0;
-					}
-
-					str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
-					return str;
-			}
-
-
-			vkbeautify.prototype.xmlmin = function(text, preserveComments) {
-
-				var str = preserveComments ? text
-										   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
-												 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
-				return  str.replace(/>\s{0,}</g,"><"); 
-			}
-
-			vkbeautify.prototype.jsonmin = function(text) {
-
-				if (typeof JSON === 'undefined' ) return text; 
-				
-				return JSON.stringify(JSON.parse(text), null, 0); 
-							
-			}
-
-			vkbeautify.prototype.cssmin = function(text, preserveComments) {
-				
-				var str = preserveComments ? text
-										   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
-
-				return str.replace(/\s{1,}/g,' ')
-						  .replace(/\{\s{1,}/g,"{")
-						  .replace(/\}\s{1,}/g,"}")
-						  .replace(/\;\s{1,}/g,";")
-						  .replace(/\/\*\s{1,}/g,"/*")
-						  .replace(/\*\/\s{1,}/g,"*/");
-			}
-
-			vkbeautify.prototype.sqlmin = function(text) {
-				return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
-			}
-
-			window.vkbeautify = new vkbeautify();
-
-			})();
-
-
-			/*!
-			 * Bootstrap v3.3.7 (http://getbootstrap.com)
-			 * Copyright 2011-2016 Twitter, Inc.
-			 * Licensed under the MIT license
-			 */
-			if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
-			this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
-
-
-			/**
-			 * bootbox.js v4.4.0
-			 *
-			 * http://bootboxjs.com/license.txt
-			 */
-			!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d.call(c,a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",textarea:"<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",date:"<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",time:"<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",number:"<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",password:"<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"}},o={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback.call(this):!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,!1)},a.buttons.confirm.callback=function(){return a.callback.call(this,!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback.call(this,c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!b.isArray(k))throw new Error("Please pass an array of input options");if(!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),a.maxlength&&h.attr("maxlength",a.maxlength),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var d=b(n.dialog),f=d.find(".modal-dialog"),i=d.find(".modal-body"),j=a.buttons,k="",l={onEscape:a.onEscape};if(b.fn.modal===c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(g(j,function(a,b){k+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",l[a]=b.callback}),i.find(".bootbox-body").html(a.message),a.animate===!0&&d.addClass("fade"),a.className&&d.addClass(a.className),"large"===a.size?f.addClass("modal-lg"):"small"===a.size&&f.addClass("modal-sm"),a.title&&i.before(n.header),a.closeButton){var m=b(n.closeButton);a.title?d.find(".modal-header").prepend(m):m.css("margin-top","-10px").prependTo(i)}return a.title&&d.find(".modal-title").html(a.title),k.length&&(i.after(n.footer),d.find(".modal-footer").html(k)),d.on("hidden.bs.modal",function(a){a.target===this&&d.remove()}),d.on("shown.bs.modal",function(){d.find(".btn-primary:first").focus()}),"static"!==a.backdrop&&d.on("click.dismiss.bs.modal",function(a){d.children(".modal-backdrop").length&&(a.currentTarget=d.children(".modal-backdrop").get(0)),a.target===a.currentTarget&&d.trigger("escape.close.bb")}),d.on("escape.close.bb",function(a){l.onEscape&&e(a,d,l.onEscape)}),d.on("click",".modal-footer button",function(a){var c=b(this).data("bb-handler");e(a,d,l[c])}),d.on("click",".bootbox-close-button",function(a){e(a,d,l.onEscape)}),d.on("keyup",function(a){27===a.which&&d.trigger("escape.close.bb")}),b(a.container).append(d),d.modal({backdrop:a.backdrop?"static":!1,keyboard:!1,show:!1}),a.show&&d.modal("show"),d},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.addLocale=function(a,c){return b.each(["OK","CANCEL","CONFIRM"],function(a,b){if(!c[b])throw new Error("Please supply a translation for '"+b+"'")}),q[a]={OK:c.OK,CANCEL:c.CANCEL,CONFIRM:c.CONFIRM},p},p.removeLocale=function(a){return delete q[a],p},p.setLocale=function(a){return p.setDefaults("locale",a)},p.init=function(c){return a(c||b)},p});
-			
-			/*!
-			 * Bowser - a browser detector
-			 * https://github.com/ded/bowser
-			 * MIT License | (c) Dustin Diaz 2015
-			 */
-			//#################################################################################################
-			!function (root, name, definition) {
-			  if (typeof module != 'undefined' && module.exports) module.exports = definition()
-			  else if (typeof define == 'function' && define.amd) define(name, definition)
-			  else root[name] = definition()
-			}(this, 'bowser', function () {
-			  /**
-				* See useragents.js for examples of navigator.userAgent
-				*/
-
-			  var t = true
-
-			  function detect(ua) {
-
-				function getFirstMatch(regex) {
-				  var match = ua.match(regex);
-				  return (match && match.length > 1 && match[1]) || '';
-				}
-
-				function getSecondMatch(regex) {
-				  var match = ua.match(regex);
-				  return (match && match.length > 1 && match[2]) || '';
-				}
-
-				var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
-				  , likeAndroid = /like android/i.test(ua)
-				  , android = !likeAndroid && /android/i.test(ua)
-				  , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
-				  , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
-				  , chromeos = /CrOS/.test(ua)
-				  , silk = /silk/i.test(ua)
-				  , sailfish = /sailfish/i.test(ua)
-				  , tizen = /tizen/i.test(ua)
-				  , webos = /(web|hpw)os/i.test(ua)
-				  , windowsphone = /windows phone/i.test(ua)
-				  , samsungBrowser = /SamsungBrowser/i.test(ua)
-				  , windows = !windowsphone && /windows/i.test(ua)
-				  , mac = !iosdevice && !silk && /macintosh/i.test(ua)
-				  , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
-				  , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
-				  , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
-				  , tablet = /tablet/i.test(ua)
-				  , mobile = !tablet && /[^-]mobi/i.test(ua)
-				  , xbox = /xbox/i.test(ua)
-				  , result
-
-				if (/opera/i.test(ua)) {
-				  //  an old Opera
-				  result = {
-					name: 'Opera'
-				  , opera: t
-				  , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				} else if (/opr|opios/i.test(ua)) {
-				  // a new Opera
-				  result = {
-					name: 'Opera'
-					, opera: t
-					, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (/SamsungBrowser/i.test(ua)) {
-				  result = {
-					name: 'Samsung Internet for Android'
-					, samsungBrowser: t
-					, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/coast/i.test(ua)) {
-				  result = {
-					name: 'Opera Coast'
-					, coast: t
-					, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/yabrowser/i.test(ua)) {
-				  result = {
-					name: 'Yandex Browser'
-				  , yandexbrowser: t
-				  , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/ucbrowser/i.test(ua)) {
-				  result = {
-					  name: 'UC Browser'
-					, ucbrowser: t
-					, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/mxios/i.test(ua)) {
-				  result = {
-					name: 'Maxthon'
-					, maxthon: t
-					, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/epiphany/i.test(ua)) {
-				  result = {
-					name: 'Epiphany'
-					, epiphany: t
-					, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/puffin/i.test(ua)) {
-				  result = {
-					name: 'Puffin'
-					, puffin: t
-					, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
-				  }
-				}
-				else if (/sleipnir/i.test(ua)) {
-				  result = {
-					name: 'Sleipnir'
-					, sleipnir: t
-					, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/k-meleon/i.test(ua)) {
-				  result = {
-					name: 'K-Meleon'
-					, kMeleon: t
-					, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (windowsphone) {
-				  result = {
-					name: 'Windows Phone'
-				  , windowsphone: t
-				  }
-				  if (edgeVersion) {
-					result.msedge = t
-					result.version = edgeVersion
-				  }
-				  else {
-					result.msie = t
-					result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/msie|trident/i.test(ua)) {
-				  result = {
-					name: 'Internet Explorer'
-				  , msie: t
-				  , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
-				  }
-				} else if (chromeos) {
-				  result = {
-					name: 'Chrome'
-				  , chromeos: t
-				  , chromeBook: t
-				  , chrome: t
-				  , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
-				  }
-				} else if (/chrome.+? edge/i.test(ua)) {
-				  result = {
-					name: 'Microsoft Edge'
-				  , msedge: t
-				  , version: edgeVersion
-				  }
-				}
-				else if (/vivaldi/i.test(ua)) {
-				  result = {
-					name: 'Vivaldi'
-					, vivaldi: t
-					, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (sailfish) {
-				  result = {
-					name: 'Sailfish'
-				  , sailfish: t
-				  , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/seamonkey\//i.test(ua)) {
-				  result = {
-					name: 'SeaMonkey'
-				  , seamonkey: t
-				  , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/firefox|iceweasel|fxios/i.test(ua)) {
-				  result = {
-					name: 'Firefox'
-				  , firefox: t
-				  , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
-				  }
-				  if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
-					result.firefoxos = t
-				  }
-				}
-				else if (silk) {
-				  result =  {
-					name: 'Amazon Silk'
-				  , silk: t
-				  , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/phantom/i.test(ua)) {
-				  result = {
-					name: 'PhantomJS'
-				  , phantom: t
-				  , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/slimerjs/i.test(ua)) {
-				  result = {
-					name: 'SlimerJS'
-					, slimer: t
-					, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
-				  result = {
-					name: 'BlackBerry'
-				  , blackberry: t
-				  , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (webos) {
-				  result = {
-					name: 'WebOS'
-				  , webos: t
-				  , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
-				  };
-				  /touchpad\//i.test(ua) && (result.touchpad = t)
-				}
-				else if (/bada/i.test(ua)) {
-				  result = {
-					name: 'Bada'
-				  , bada: t
-				  , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
-				  };
-				}
-				else if (tizen) {
-				  result = {
-					name: 'Tizen'
-				  , tizen: t
-				  , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
-				  };
-				}
-				else if (/qupzilla/i.test(ua)) {
-				  result = {
-					name: 'QupZilla'
-					, qupzilla: t
-					, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
-				  }
-				}
-				else if (/chromium/i.test(ua)) {
-				  result = {
-					name: 'Chromium'
-					, chromium: t
-					, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (/chrome|crios|crmo/i.test(ua)) {
-				  result = {
-					name: 'Chrome'
-					, chrome: t
-					, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (android) {
-				  result = {
-					name: 'Android'
-					, version: versionIdentifier
-				  }
-				}
-				else if (/safari|applewebkit/i.test(ua)) {
-				  result = {
-					name: 'Safari'
-				  , safari: t
-				  }
-				  if (versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				}
-				else if (iosdevice) {
-				  result = {
-					name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
-				  }
-				  // WTF: version is not part of user agent in web apps
-				  if (versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				}
-				else if(/googlebot/i.test(ua)) {
-				  result = {
-					name: 'Googlebot'
-				  , googlebot: t
-				  , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
-				  }
-				}
-				else {
-				  result = {
-					name: getFirstMatch(/^(.*)\/(.*) /),
-					version: getSecondMatch(/^(.*)\/(.*) /)
-				 };
-			   }
-
-				// set webkit or gecko flag for browsers based on these engines
-				if (!result.msedge && /(apple)?webkit/i.test(ua)) {
-				  if (/(apple)?webkit\/537\.36/i.test(ua)) {
-					result.name = result.name || "Blink"
-					result.blink = t
-				  } else {
-					result.name = result.name || "Webkit"
-					result.webkit = t
-				  }
-				  if (!result.version && versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				} else if (!result.opera && /gecko\//i.test(ua)) {
-				  result.name = result.name || "Gecko"
-				  result.gecko = t
-				  result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
-				}
-
-				// set OS flags for platforms that have multiple browsers
-				if (!result.windowsphone && !result.msedge && (android || result.silk)) {
-				  result.android = t
-				} else if (!result.windowsphone && !result.msedge && iosdevice) {
-				  result[iosdevice] = t
-				  result.ios = t
-				} else if (mac) {
-				  result.mac = t
-				} else if (xbox) {
-				  result.xbox = t
-				} else if (windows) {
-				  result.windows = t
-				} else if (linux) {
-				  result.linux = t
-				}
-
-				function getWindowsVersion (s) {
-				  switch (s) {
-					case 'NT': return 'NT'
-					case 'XP': return 'XP'
-					case 'NT 5.0': return '2000'
-					case 'NT 5.1': return 'XP'
-					case 'NT 5.2': return '2003'
-					case 'NT 6.0': return 'Vista'
-					case 'NT 6.1': return '7'
-					case 'NT 6.2': return '8'
-					case 'NT 6.3': return '8.1'
-					case 'NT 10.0': return '10'
-					default: return undefined
-				  }
-				}
-				
-				// OS version extraction
-				var osVersion = '';
-				if (result.windows) {
-				  osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
-				} else if (result.windowsphone) {
-				  osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
-				} else if (result.mac) {
-				  osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
-				  osVersion = osVersion.replace(/[_\s]/g, '.');
-				} else if (iosdevice) {
-				  osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
-				  osVersion = osVersion.replace(/[_\s]/g, '.');
-				} else if (android) {
-				  osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
-				} else if (result.webos) {
-				  osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
-				} else if (result.blackberry) {
-				  osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
-				} else if (result.bada) {
-				  osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
-				} else if (result.tizen) {
-				  osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
-				}
-				if (osVersion) {
-				  result.osversion = osVersion;
-				}
-
-				// device type extraction
-				var osMajorVersion = !result.windows && osVersion.split('.')[0];
-				if (
-					 tablet
-				  || nexusTablet
-				  || iosdevice == 'ipad'
-				  || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
-				  || result.silk
-				) {
-				  result.tablet = t
-				} else if (
-					 mobile
-				  || iosdevice == 'iphone'
-				  || iosdevice == 'ipod'
-				  || android
-				  || nexusMobile
-				  || result.blackberry
-				  || result.webos
-				  || result.bada
-				) {
-				  result.mobile = t
-				}
-
-				// Graded Browser Support
-				// http://developer.yahoo.com/yui/articles/gbs
-				if (result.msedge ||
-					(result.msie && result.version >= 10) ||
-					(result.yandexbrowser && result.version >= 15) ||
-						(result.vivaldi && result.version >= 1.0) ||
-					(result.chrome && result.version >= 20) ||
-					(result.samsungBrowser && result.version >= 4) ||
-					(result.firefox && result.version >= 20.0) ||
-					(result.safari && result.version >= 6) ||
-					(result.opera && result.version >= 10.0) ||
-					(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
-					(result.blackberry && result.version >= 10.1)
-					|| (result.chromium && result.version >= 20)
-					) {
-				  result.a = t;
-				}
-				else if ((result.msie && result.version < 10) ||
-					(result.chrome && result.version < 20) ||
-					(result.firefox && result.version < 20.0) ||
-					(result.safari && result.version < 6) ||
-					(result.opera && result.version < 10.0) ||
-					(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
-					|| (result.chromium && result.version < 20)
-					) {
-				  result.c = t
-				} else result.x = t
-
-				return result
-			  }
-
-			  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
-
-			  bowser.test = function (browserList) {
-				for (var i = 0; i < browserList.length; ++i) {
-				  var browserItem = browserList[i];
-				  if (typeof browserItem=== 'string') {
-					if (browserItem in bowser) {
-					  return true;
-					}
-				  }
-				}
-				return false;
-			  }
-
-			  /**
-			   * Get version precisions count
-			   *
-			   * @example
-			   *   getVersionPrecision("1.10.3") // 3
-			   *
-			   * @param  {string} version
-			   * @return {number}
-			   */
-			  function getVersionPrecision(version) {
-				return version.split(".").length;
-			  }
-
-			  /**
-			   * Array::map polyfill
-			   *
-			   * @param  {Array} arr
-			   * @param  {Function} iterator
-			   * @return {Array}
-			   */
-			  function map(arr, iterator) {
-				var result = [], i;
-				if (Array.prototype.map) {
-				  return Array.prototype.map.call(arr, iterator);
-				}
-				for (i = 0; i < arr.length; i++) {
-				  result.push(iterator(arr[i]));
-				}
-				return result;
-			  }
-
-			  /**
-			   * Calculate browser version weight
-			   *
-			   * @example
-			   *   compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
-			   *   compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
-			   *   compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
-			   *   compareVersions(['1.10.2.1',  '1.0800.2']);     // -1
-			   *
-			   * @param  {Array<String>} versions versions to compare
-			   * @return {Number} comparison result
-			   */
-			  function compareVersions(versions) {
-				// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
-				var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
-				var chunks = map(versions, function (version) {
-				  var delta = precision - getVersionPrecision(version);
-
-				  // 2) "9" -> "9.0" (for precision = 2)
-				  version = version + new Array(delta + 1).join(".0");
-
-				  // 3) "9.0" -> ["000000000"", "000000009"]
-				  return map(version.split("."), function (chunk) {
-					return new Array(20 - chunk.length).join("0") + chunk;
-				  }).reverse();
-				});
-
-				// iterate in reverse order by reversed chunks array
-				while (--precision >= 0) {
-				  // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
-				  if (chunks[0][precision] > chunks[1][precision]) {
-					return 1;
-				  }
-				  else if (chunks[0][precision] === chunks[1][precision]) {
-					if (precision === 0) {
-					  // all version chunks are same
-					  return 0;
-					}
-				  }
-				  else {
-					return -1;
-				  }
-				}
-			  }
-
-			  /**
-			   * Check if browser is unsupported
-			   *
-			   * @example
-			   *   bowser.isUnsupportedBrowser({
-			   *     msie: "10",
-			   *     firefox: "23",
-			   *     chrome: "29",
-			   *     safari: "5.1",
-			   *     opera: "16",
-			   *     phantom: "534"
-			   *   });
-			   *
-			   * @param  {Object}  minVersions map of minimal version to browser
-			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
-			   * @param  {String}  [ua] user agent string
-			   * @return {Boolean}
-			   */
-			  function isUnsupportedBrowser(minVersions, strictMode, ua) {
-				var _bowser = bowser;
-
-				// make strictMode param optional with ua param usage
-				if (typeof strictMode === 'string') {
-				  ua = strictMode;
-				  strictMode = void(0);
-				}
-
-				if (strictMode === void(0)) {
-				  strictMode = false;
-				}
-				if (ua) {
-				  _bowser = detect(ua);
-				}
-
-				var version = "" + _bowser.version;
-				for (var browser in minVersions) {
-				  if (minVersions.hasOwnProperty(browser)) {
-					if (_bowser[browser]) {
-					  if (typeof minVersions[browser] !== 'string') {
-						throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
-					  }
-
-					  // browser version and min supported version.
-					  return compareVersions([version, minVersions[browser]]) < 0;
-					}
-				  }
-				}
-
-				return strictMode; // not found
-			  }
-
-			  /**
-			   * Check if browser is supported
-			   *
-			   * @param  {Object} minVersions map of minimal version to browser
-			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
-			   * @param  {String}  [ua] user agent string
-			   * @return {Boolean}
-			   */
-			  function check(minVersions, strictMode, ua) {
-				return !isUnsupportedBrowser(minVersions, strictMode, ua);
-			  }
-
-			  bowser.isUnsupportedBrowser = isUnsupportedBrowser;
-			  bowser.compareVersions = compareVersions;
-			  bowser.check = check;
-
-			  /*
-			   * Set our detect method to the main bowser object so we can
-			   * reuse it to test other user agents.
-			   * This is needed to implement future tests.
-			   */
-			  bowser._detect = detect;
-
-			  return bowser
-			});
-			//#################################################################################################
-
-			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
-			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
-			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
-			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
-			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
-
-			if (bowser.name=="Internet Explorer")
-			{
-			alert("OOPS! VISTOMS unfortunately does not work properly on " + bowser.name + ". Please use a different browser to see its awesome visualization features!")
-			}
-
-			function makeKadmosMenu(data)
-			{
-				var imageWidth = 200;
-				var imageHeight = 150;
-				var padding = 10;
-				var rectHeight = 70;
-				var imgSize = 40;
-				var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
-				var visPackSvg = visPackDiv.append("svg")
-					.attr("class","visPackSvg")
-					.attr("width",imageWidth*5+40)
-					.attr("height",imageHeight+40)
-					.attr("transform", "translate("
-					  + String(10) + "," + String(10) + ")")			  
-				
-				var visPackFrame = visPackSvg.append("rect")
-					.attr("width",imageWidth*5+12)
-					.attr("height",imageHeight)
-					.attr("fill", "none")
-				
-				var imgs = visPackSvg.selectAll("image1").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("x",5)
-					.attr("xlink:href", fileReference.AGILE_Logo)
-					.attr("width", imageWidth)
-					.attr("height", imageHeight)
-					.attr("position", "relative")
-					
-				var imgs = visPackSvg.selectAll("image2").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("x",210)
-					.attr("y",-5)
-					.attr("xlink:href", fileReference.VISTOMS_Label)
-					.attr("width", "180pt")
-					.attr("height", "70pt")
-					
-					
-					
-				//Set general offset for Buttons, acknowledgements and so on
-				var offset_tmp = 645;	
-				
-				
-				//aigner: Make Acknowledgments, Help and Home buttons
-				//##########################################################
-				visPackSvg.append("rect")
-				.attr("transform", "translate("+ String(offset_tmp+17) + "," + String(0) + ")")
-				.attr("fill", "#555555")
-				.attr("width", 186)
-				.attr("height", 40)
-				
-				function makeButton(anId, aText,aPicFile, anOffset, aScale, picX, picY)
-				{
-					var buttonGroup = visPackSvg.append("a").classed("buttonGroup",true)
-					buttonGroup
-						.attr("class",anId)
-						.append("svg:title").text(aText)
-					var polygon = buttonGroup.append("polygon").classed("button",true)
-						.attr("points", "30,15 22.5,28.0 7.5,28 0,15 7.5,2 22.5,2")
-						.attr("transform", "translate("+ String(anOffset) + "," + String(2) + ") scale(1.2)")
-					buttonGroup.append("image")
-						.attr("xlink:href",aPicFile)
-						.attr("height",50)
-						.attr("width",50)
-						.attr("transform", "translate("+ String(anOffset+picX) + "," + String(picY) + ") scale("+aScale+")")
-					buttonGroup
-						.on("mouseover", function()
-						{
-							polygon.style("fill","#3399FF")
-							d3.select(this).style("cursor", "pointer")
-						})
-						.on("mouseleave", function()
-						{
-							polygon.style("fill","#555555")
-						})
-				}
-				///Home button
-				var distance = 45;
-				var currentOffset = offset_tmp+25;
-				makeButton("id_mainPage","Main Page",fileReference.Home, currentOffset, 0.45, 6.9,7.2);
-				d3.select(".id_mainPage").on("click",function()
-				{		
-					mainPage();
-				})
-				//help button
-				currentOffset+=distance;
-				makeButton("id_turorial","Tutorial",fileReference.Tutorial, currentOffset, 0.45, 6.8, 7.5);
-				d3.select(".id_turorial").on("click",function()
-				{			
-					tutorial();
-				})
-				//Contact button
-				currentOffset+=distance;
-				makeButton("id_contact","Contact the support team",fileReference.Contact, currentOffset, 0.45, 6.9, 9);
-				d3.select(".id_contact").on("click",function()
-				{				
-					sendMail("VISTOMS support");
-				})
-					
-				//Acknowledgements button
-				currentOffset+=distance;
-				makeButton("id_acknowledgements","Acknowledgements",fileReference.Acknowledgements, currentOffset, 0.45, 7, 8);
-				d3.select(".id_acknowledgements").on("click",function()
-				{
-					acknowledgements();
-				})
-				
-				//##########################################################
-				
-				
-				//aigner: make dropwdown section for the multiple MDO graphs tzhat can be visualized
-				//##########################################################
-				var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
-				function makeViewButtons(data,name, aView)
-				{
-					var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
-					dropdown1.append("a").text(name)
-					dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
-						.attr("align","left")
-						.style("margin-left","6px")
-						.style("margin-right","0px")
-						.style("margin-top","10px")
-						.style("margin-bottom","6px")
-						.attr("height","42")
-						.attr("width","42")
-					var links = dropdown1.append("ul");
-					var graphs_tmp = data.graphs;
-					for (var i=0; i < graphs_tmp.length; i++)
-					{
-						makeDropDown(data,graphs_tmp[i],aView,links)
-					}
-				}
-				function makeDropDown(theData,theGraph,theView,theLinks)
-				{
-					var linkLi = theLinks.append("li");
-					var name_tmp="";
-					if (theGraph.name){name_tmp=theGraph.name}
-					else{name_tmp="Graph " + theGraph.id}
-					var link = linkLi.append("a").text(name_tmp)
-						.text(name_tmp)
-						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-						.on("click", function(){
-							clearView();					
-							if (theView == "xdsm"){xdsm_script(theData,theGraph.id);	}
-							else if (theView == "edgeBundles"){edgeBundles_script(theData,theGraph.id)}
-							else if (theView == "sankeyDiagram"){sankeyDiagram_script(theData,theGraph.id)}
-							})
-				}
-				var theGraphs = data.graphs;
-				makeViewButtons(data,"XDSM","xdsm");
-				makeViewButtons(data,"Edge Bundles","edgeBundles");
-				makeViewButtons(data,"Sankey Diagram","sankeyDiagram");
-				//##########################################################
-			}
-			//#####################################################################//
-
-
-			function getTextWidth(text, font) 
-			{
-				// re-use canvas object for better performance
-				var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
-				var context = canvas.getContext("2d");
-				context.font = font;
-				var metrics = context.measureText(text);
-				return metrics.width;
-			}					
-
-
-			//#####################################################################//
-			function mainPage()
-			{	
-				clearView();
-				var introDiv = d3.select("body").append("div")
-					.attr("id","mainPage")
-					.classed("wordWrap",true)
-				
-				var theHeading = "Welcome to <b>VISTOMS</b>, the <b>VIS</b>ualization <b>TO</b>ol for <b>M</b>DO <b>S</b>ystems!\n";
-				introDiv.append("text")
-				.style("font-size","16pt")
-				.html(theHeading)
-				
-				var theText = "\nTo inspect an MDO system, go to one of the visualizations in the navigation bar (XDSM, Edge Bundles, or Sankey Diagram). Then select a graph from the dropdown menu.\n\nIf you need help with how to use the visualization package, there is a tutorial video available. Just click on the \"Tutorial\" symbol in the top right corner.";
-				introDiv.append("text").text(theText)
-				introDiv.append("text")
-					.style("font-size","8pt")
-					.html("\n\n\nCopyright 2016-2017 by Benedikt Aigner (RWTH Aachen) & Imco van Gent (TU Delft)")
-				
-				var introSvg = introDiv.append("svg")
-					.attr("width",500)
-					.attr("height",100)
-				var imgs = introSvg.selectAll("img").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("xlink:href", fileReference.RWTH_Logo)
-					.attr("width", "150")
-					.attr("height", "70")
-					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-					.on("click",function(){window.open("https://www.rwth-aachen.de/", '_blank');} )
-				var imgs = introSvg.selectAll("img").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("xlink:href", fileReference.TUDelft_Logo)
-					.attr("x", 175)
-					.attr("y", 5)
-					.attr("width", "105")
-					.attr("height", "50")
-					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-					.on("click",function(){window.open("https://www.tudelft.nl/en/", '_blank');} )
-
-			}
-			//#####################################################################//
-
-			//#####################################################################//
-			function acknowledgements()
-			{				
-				clearView();
-				var acknDiv = d3.select("body").append("div")
-					.attr("id","acknowledgements")
-					.classed("acknText", true)
-					.classed("wordWrap",true)
-				
-				var theHeading = "Acknowledgements";
-				acknDiv.append("text")
-				.style("font-size","16pt")
-				.html(theHeading)
-				
-				acknDiv.append("text")
-					.style("font-size","10pt")
-					.style("margin", "20px 10px")
-					.html("<br><br>Created by Benedikt Aigner and Imco van Gent for the "
-						+"<a href=\"http://www.agile-project.eu/\">AGILE Project</a> in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202."
-						+"<br>"
-						+"<br>"
-						+"<b>VISTOMS was created using the following open source packages:</b>"
-						+"<br>"
-						+"<a href=\"https://d3js.org/\">D3.js</a> package &copy 2015 by Mike Bostock released under the <a href=\"https://opensource.org/licenses/BSD-3-Clause\">BSD license</a>"
-						+"<br>"
-						+"<a href=\"https://github.com/OneraHub/XDSMjs\">XDSM.js </a> package &copy 2016 by R&eacutemi Lafage released under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>"
-						+"<br>"
-						+"<a href=\"https://github.com/Neilos/bihisankey\">BiHiSankey.js</a> package &copy 2015 by Neil Atkinson released under the <a href=\"https://opensource.org/licenses/MIT\">MIT License</a>"
-						+"<br>"
-						+"<br>"
-						+"<br>"
-						+"<font size=\"-2\">Rev. 07/31/2017</font>")
-			}
-			//#####################################################################//
-
-			//#####################################################################//
-			function tutorial()
-			{
-				
-				
-				var theButtons = 
-				{
-					cancel: {
-						label: "OK, got it!",
-						className: 'btn-danger',
-						callback: function(){}
-					},
-					Feedback: {
-						label: "Feedback",
-						className: 'btn-warning',
-						callback: function(){sendMail("VISTOMS feedback")}
-					},
-					Tutorial: {
-						label: "Tutorial",
-						className: 'btn-info',
-						callback: function(){showTutorialPage();}
-					}
-				}
-				
-				
-				function showTutorialPage()
-				{
-					clearView();
-					var tutorialDiv = d3.select("body").append("div")
-						.attr("id","tutorial")
-						.style("margin-top", "16px")
-						.style("font-size","16pt")
-						.style("margin", "20px 10px")
-						.style("color","#555555")
-					
-					var theHeading = "<b>VISTOMS Tutorial</b><br/><br/>";
-					tutorialDiv.append("text")
-					.style("font-size","16pt")
-					.html(theHeading)
-					
-					tutorialDiv.append("div")
-						.style("-webkit-overflow-scrolling", "touch")
-						.style("-webkit-text-size-adjust", "none")
-						.html("<video width=\"1000\" height=\"563\" controls>"
-							+"<source src=\"http://www.agile-project.eu/files/VISTOMS_Tutorial.mp4 \" type=\"video/mp4\">"
-							+"Your browser does not support the video tag."
-							+"</video>"
-							+"</div>")
-				}
-				
-				
-				if (!d3.select(".xdsmDiv").empty())
-				{
-					var dialog = bootbox.dialog(
-					{
-						title: 'XDSM View',
-						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
-								 +"<ol><li>With a right-click on an edge (rhomboids on the off-diagonal) you can take a closer look at the data processed between competences.</li>"
-								 +"<li>Click right on a competence (boxes on the diagonal) for more information, such as input/output data or a detailed tool description.</li>"
-								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization. </li></ol><br />"
-								 +"<p>To switch to another visualization (<i>Edge Bundles</i> or <i>Sankey Diagram</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
-								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
-								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
-						,
-						buttons : theButtons
-					});
-				}
-				else if(!d3.select(".edgeBundlesDiv").empty())
-				{
-					var dialog = bootbox.dialog({
-						title: 'Edge Bundles View',
-						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
-								 +"<ol><li>With a right-click on an edge (connecting lines between the competences) you can take a closer look at the data processed between those competences.</li>"
-								 +"<li>When you hover over one of the competences with the mouse, the respective input and output connections are highlighted. Input connections are highlighted in red, output connections in green.</li>"
-								 +"<li>Click right on a competence for more information, such as input/output data or a detailed tool description.</li>"
-								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization.</li></ol><br />"
-								 +"<p>To switch to another visualization (<i>Edge Bundles</i> or <i>Sankey Diagram</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
-								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
-								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
-						,
-						buttons: theButtons
-					})
-				}
-				else if(!d3.select(".sankeyDiagramDiv").empty())
-				{
-					var dialog = bootbox.dialog({
-						title: 'Sankey Diagram',
-						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
-								 +"<ol><li>When you hover over one of the competences with the mouse, the respective input and output connections are highlighted. Input connections are highlighted in red, output connections in green.</li>"
-								 +"<li> With a right-click on an edge (connecting arrows between the competences) you can take a closer look at the data processed between those competences.</li>"
-								 +"<li>Click right on a competence for more information, such as input/output data or a detailed tool description. You can also rearrange the layout by dragging the competences with the computer mouse.</li>"
-								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization.</li></ol><br />"
-								 +"<p>To switch to another visualization (<i>XDSM</i> or <i>Edge Bundles</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
-								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
-								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
-						,
-						buttons: theButtons
-					})
-				}
-				else
-				{
-					showTutorialPage();
-				}
-			}
-			//#####################################################################//
-			
-			//aigner: Send mail function
-			//#####################################################################//
-			function sendMail(mailText) 
-			{
-				var link = "mailto:support@agile-project.eu"
-				window.location.href = link;
-			}
-			//#####################################################################//
-			
-			//aigner: Load entire MDO data
-			//###############################################################################################################################################################################################################//
-			//#####################################################################//
-			//#####################################################################//
-			//@Imco: here the references to all files are done
-			var fileReference = {
-				Acknowledgements : "REP__Acknowledgements__REP",
-				AGILE_Icon : "REP__AGILE_Icon__REP",
-				AGILE_Logo : "REP__AGILE_Logo__REP",
-				Contact : "REP__Contact__REP",
-				Home: "REP__Home__REP",
-				RWTH_Logo : "REP__RWTH_Logo__REP",
-				TUDelft_Logo : "REP__TUDelft_Logo__REP",
-				Tutorial : "REP__Tutorial__REP",
-				VISTOMS_Label : "REP__VISTOMS_Label__REP",
-			}
-			
-			//@Imco: Here is the sellar problem example data
-			theData = REP__GRAPH_DATA__REP
-			function loadAllData(data)
-			{
-				makeKadmosMenu(data);
-				mainPage();
-			}
-			loadAllData(theData);
-			//#####################################################################//
-			//#####################################################################//
-			//###############################################################################################################################################################################################################//
-			
-			//aigner: Clear view function
-			//#####################################################################//
-			function clearView()
-			{
-				var visualizationScript = d3.select(".visualizationScript");
-				if (visualizationScript){visualizationScript.remove();}
-				var mainPage = document.getElementById("mainPage");
-				if (mainPage){mainPage.remove();}
-				var tutorial = document.getElementById("tutorial");
-				if (tutorial){tutorial.remove();}
-				var ackn = document.getElementById("acknowledgements");
-				if (ackn){ackn.remove();}
-				var xdsm = d3.select(".xdsmDiv");							
-				if (xdsm){xdsm.remove();}
-				var edgeBundles = d3.select(".edgeBundlesDiv");							
-				if (edgeBundles){edgeBundles.remove();}
-				var sankeyDiagram = d3.select(".sankeyDiagramDiv");
-				if (sankeyDiagram){sankeyDiagram.remove();}
-			}
-			//#####################################################################//
-		
-		function xdsm_script(data,graphID)
-		{
-			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-			// https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
-			(function (global, factory) {
-			  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
-			  typeof define === 'function' && define.amd ? define(['exports'], factory) :
-			  (factory((global.d3 = global.d3 || {})));
-			}(this, (function (exports) { 'use strict';
-
-			var version = "4.3.0";
-
-			var ascending = function(a, b) {
-			  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-			};
-
-			var bisector = function(compare) {
-			  if (compare.length === 1) compare = ascendingComparator(compare);
-			  return {
-				left: function(a, x, lo, hi) {
-				  if (lo == null) lo = 0;
-				  if (hi == null) hi = a.length;
-				  while (lo < hi) {
-					var mid = lo + hi >>> 1;
-					if (compare(a[mid], x) < 0) lo = mid + 1;
-					else hi = mid;
-				  }
-				  return lo;
-				},
-				right: function(a, x, lo, hi) {
-				  if (lo == null) lo = 0;
-				  if (hi == null) hi = a.length;
-				  while (lo < hi) {
-					var mid = lo + hi >>> 1;
-					if (compare(a[mid], x) > 0) hi = mid;
-					else lo = mid + 1;
-				  }
-				  return lo;
-				}
-			  };
-			};
-
-			function ascendingComparator(f) {
-			  return function(d, x) {
-				return ascending(f(d), x);
-			  };
-			}
-
-			var ascendingBisect = bisector(ascending);
-			var bisectRight = ascendingBisect.right;
-			var bisectLeft = ascendingBisect.left;
-
-			var descending = function(a, b) {
-			  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-			};
-
-			var number = function(x) {
-			  return x === null ? NaN : +x;
-			};
-
-			var variance = function(array, f) {
-			  var n = array.length,
-				  m = 0,
-				  a,
-				  d,
-				  s = 0,
-				  i = -1,
-				  j = 0;
-
-			  if (f == null) {
-				while (++i < n) {
-				  if (!isNaN(a = number(array[i]))) {
-					d = a - m;
-					m += d / ++j;
-					s += d * (a - m);
-				  }
-				}
-			  }
-
-			  else {
-				while (++i < n) {
-				  if (!isNaN(a = number(f(array[i], i, array)))) {
-					d = a - m;
-					m += d / ++j;
-					s += d * (a - m);
-				  }
-				}
-			  }
-
-			  if (j > 1) return s / (j - 1);
-			};
-
-			var deviation = function(array, f) {
-			  var v = variance(array, f);
-			  return v ? Math.sqrt(v) : v;
-			};
-
-			var extent = function(array, f) {
-			  var i = -1,
-				  n = array.length,
-				  a,
-				  b,
-				  c;
-
-			  if (f == null) {
-				while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
-				while (++i < n) if ((b = array[i]) != null) {
-				  if (a > b) a = b;
-				  if (c < b) c = b;
-				}
-			  }
-
-			  else {
-				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
-				while (++i < n) if ((b = f(array[i], i, array)) != null) {
-				  if (a > b) a = b;
-				  if (c < b) c = b;
-				}
-			  }
-
-			  return [a, c];
-			};
-
-			var array = Array.prototype;
-
-			var slice = array.slice;
-			var map = array.map;
-
-			var constant$1 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var identity = function(x) {
-			  return x;
-			};
-
-			var range = function(start, stop, step) {
-			  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
-
-			  var i = -1,
-				  n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
-				  range = new Array(n);
-
-			  while (++i < n) {
-				range[i] = start + i * step;
-			  }
-
-			  return range;
-			};
-
-			var e10 = Math.sqrt(50);
-			var e5 = Math.sqrt(10);
-			var e2 = Math.sqrt(2);
-
-			var ticks = function(start, stop, count) {
-			  var step = tickStep(start, stop, count);
-			  return range(
-				Math.ceil(start / step) * step,
-				Math.floor(stop / step) * step + step / 2, // inclusive
-				step
-			  );
-			};
-
-			function tickStep(start, stop, count) {
-			  var step0 = Math.abs(stop - start) / Math.max(0, count),
-				  step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
-				  error = step0 / step1;
-			  if (error >= e10) step1 *= 10;
-			  else if (error >= e5) step1 *= 5;
-			  else if (error >= e2) step1 *= 2;
-			  return stop < start ? -step1 : step1;
-			}
-
-			var sturges = function(values) {
-			  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
-			};
-
-			var histogram = function() {
-			  var value = identity,
-				  domain = extent,
-				  threshold = sturges;
-
-			  function histogram(data) {
-				var i,
-					n = data.length,
-					x,
-					values = new Array(n);
-
-				for (i = 0; i < n; ++i) {
-				  values[i] = value(data[i], i, data);
-				}
-
-				var xz = domain(values),
-					x0 = xz[0],
-					x1 = xz[1],
-					tz = threshold(values, x0, x1);
-
-				// Convert number of thresholds into uniform thresholds.
-				if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
-
-				// Remove any thresholds outside the domain.
-				var m = tz.length;
-				while (tz[0] <= x0) tz.shift(), --m;
-				while (tz[m - 1] >= x1) tz.pop(), --m;
-
-				var bins = new Array(m + 1),
-					bin;
-
-				// Initialize bins.
-				for (i = 0; i <= m; ++i) {
-				  bin = bins[i] = [];
-				  bin.x0 = i > 0 ? tz[i - 1] : x0;
-				  bin.x1 = i < m ? tz[i] : x1;
-				}
-
-				// Assign data to bins by value, ignoring any outside the domain.
-				for (i = 0; i < n; ++i) {
-				  x = values[i];
-				  if (x0 <= x && x <= x1) {
-					bins[bisectRight(tz, x, 0, m)].push(data[i]);
-				  }
-				}
-
-				return bins;
-			  }
-
-			  histogram.value = function(_) {
-				return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value;
-			  };
-
-			  histogram.domain = function(_) {
-				return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain;
-			  };
-
-			  histogram.thresholds = function(_) {
-				return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold;
-			  };
-
-			  return histogram;
-			};
-
-			var threshold = function(array, p, f) {
-			  if (f == null) f = number;
-			  if (!(n = array.length)) return;
-			  if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
-			  if (p >= 1) return +f(array[n - 1], n - 1, array);
-			  var n,
-				  h = (n - 1) * p,
-				  i = Math.floor(h),
-				  a = +f(array[i], i, array),
-				  b = +f(array[i + 1], i + 1, array);
-			  return a + (b - a) * (h - i);
-			};
-
-			var freedmanDiaconis = function(values, min, max) {
-			  values = map.call(values, number).sort(ascending);
-			  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
-			};
-
-			var scott = function(values, min, max) {
-			  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
-			};
-
-			var max = function(array, f) {
-			  var i = -1,
-				  n = array.length,
-				  a,
-				  b;
-
-			  if (f == null) {
-				while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
-				while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-			  }
-
-			  else {
-				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
-				while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
-			  }
-
-			  return a;
-			};
-
-			var mean = function(array, f) {
-			  var s = 0,
-				  n = array.length,
-				  a,
-				  i = -1,
-				  j = n;
-
-			  if (f == null) {
-				while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
-			  }
-
-			  else {
-				while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
-			  }
-
-			  if (j) return s / j;
-			};
-
-			var median = function(array, f) {
-			  var numbers = [],
-				  n = array.length,
-				  a,
-				  i = -1;
-
-			  if (f == null) {
-				while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
-			  }
-
-			  else {
-				while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
-			  }
-
-			  return threshold(numbers.sort(ascending), 0.5);
-			};
-
-			var merge = function(arrays) {
-			  var n = arrays.length,
-				  m,
-				  i = -1,
-				  j = 0,
-				  merged,
-				  array;
-
-			  while (++i < n) j += arrays[i].length;
-			  merged = new Array(j);
-
-			  while (--n >= 0) {
-				array = arrays[n];
-				m = array.length;
-				while (--m >= 0) {
-				  merged[--j] = array[m];
-				}
-			  }
-
-			  return merged;
-			};
-
-			var min = function(array, f) {
-			  var i = -1,
-				  n = array.length,
-				  a,
-				  b;
-
-			  if (f == null) {
-				while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
-				while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-			  }
-
-			  else {
-				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
-				while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
-			  }
-
-			  return a;
-			};
-
-			var pairs = function(array) {
-			  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
-			  while (i < n) pairs[i] = [p, p = array[++i]];
-			  return pairs;
-			};
-
-			var permute = function(array, indexes) {
-			  var i = indexes.length, permutes = new Array(i);
-			  while (i--) permutes[i] = array[indexes[i]];
-			  return permutes;
-			};
-
-			var scan = function(array, compare) {
-			  if (!(n = array.length)) return;
-			  var i = 0,
-				  n,
-				  j = 0,
-				  xi,
-				  xj = array[j];
-
-			  if (!compare) compare = ascending;
-
-			  while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
-
-			  if (compare(xj, xj) === 0) return j;
-			};
-
-			var shuffle = function(array, i0, i1) {
-			  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
-				  t,
-				  i;
-
-			  while (m) {
-				i = Math.random() * m-- | 0;
-				t = array[m + i0];
-				array[m + i0] = array[i + i0];
-				array[i + i0] = t;
-			  }
-
-			  return array;
-			};
-
-			var sum = function(array, f) {
-			  var s = 0,
-				  n = array.length,
-				  a,
-				  i = -1;
-
-			  if (f == null) {
-				while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
-			  }
-
-			  else {
-				while (++i < n) if (a = +f(array[i], i, array)) s += a;
-			  }
-
-			  return s;
-			};
-
-			var transpose = function(matrix) {
-			  if (!(n = matrix.length)) return [];
-			  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
-				for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
-				  row[j] = matrix[j][i];
-				}
-			  }
-			  return transpose;
-			};
-
-			function length(d) {
-			  return d.length;
-			}
-
-			var zip = function() {
-			  return transpose(arguments);
-			};
-
-			var prefix = "$";
-
-			function Map() {}
-
-			Map.prototype = map$1.prototype = {
-			  constructor: Map,
-			  has: function(key) {
-				return (prefix + key) in this;
-			  },
-			  get: function(key) {
-				return this[prefix + key];
-			  },
-			  set: function(key, value) {
-				this[prefix + key] = value;
-				return this;
-			  },
-			  remove: function(key) {
-				var property = prefix + key;
-				return property in this && delete this[property];
-			  },
-			  clear: function() {
-				for (var property in this) if (property[0] === prefix) delete this[property];
-			  },
-			  keys: function() {
-				var keys = [];
-				for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
-				return keys;
-			  },
-			  values: function() {
-				var values = [];
-				for (var property in this) if (property[0] === prefix) values.push(this[property]);
-				return values;
-			  },
-			  entries: function() {
-				var entries = [];
-				for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
-				return entries;
-			  },
-			  size: function() {
-				var size = 0;
-				for (var property in this) if (property[0] === prefix) ++size;
-				return size;
-			  },
-			  empty: function() {
-				for (var property in this) if (property[0] === prefix) return false;
-				return true;
-			  },
-			  each: function(f) {
-				for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
-			  }
-			};
-
-			function map$1(object, f) {
-			  var map = new Map;
-
-			  // Copy constructor.
-			  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
-
-			  // Index array by numeric index or specified key function.
-			  else if (Array.isArray(object)) {
-				var i = -1,
-					n = object.length,
-					o;
-
-				if (f == null) while (++i < n) map.set(i, object[i]);
-				else while (++i < n) map.set(f(o = object[i], i, object), o);
-			  }
-
-			  // Convert object to map.
-			  else if (object) for (var key in object) map.set(key, object[key]);
-
-			  return map;
-			}
-
-			var nest = function() {
-			  var keys = [],
-				  sortKeys = [],
-				  sortValues,
-				  rollup,
-				  nest;
-
-			  function apply(array, depth, createResult, setResult) {
-				if (depth >= keys.length) return rollup != null
-					? rollup(array) : (sortValues != null
-					? array.sort(sortValues)
-					: array);
-
-				var i = -1,
-					n = array.length,
-					key = keys[depth++],
-					keyValue,
-					value,
-					valuesByKey = map$1(),
-					values,
-					result = createResult();
-
-				while (++i < n) {
-				  if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
-					values.push(value);
-				  } else {
-					valuesByKey.set(keyValue, [value]);
-				  }
-				}
-
-				valuesByKey.each(function(values, key) {
-				  setResult(result, key, apply(values, depth, createResult, setResult));
-				});
-
-				return result;
-			  }
-
-			  function entries(map, depth) {
-				if (++depth > keys.length) return map;
-				var array, sortKey = sortKeys[depth - 1];
-				if (rollup != null && depth >= keys.length) array = map.entries();
-				else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
-				return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
-			  }
-
-			  return nest = {
-				object: function(array) { return apply(array, 0, createObject, setObject); },
-				map: function(array) { return apply(array, 0, createMap, setMap); },
-				entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
-				key: function(d) { keys.push(d); return nest; },
-				sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
-				sortValues: function(order) { sortValues = order; return nest; },
-				rollup: function(f) { rollup = f; return nest; }
-			  };
-			};
-
-			function createObject() {
-			  return {};
-			}
-
-			function setObject(object, key, value) {
-			  object[key] = value;
-			}
-
-			function createMap() {
-			  return map$1();
-			}
-
-			function setMap(map, key, value) {
-			  map.set(key, value);
-			}
-
-			function Set() {}
-
-			var proto = map$1.prototype;
-
-			Set.prototype = set.prototype = {
-			  constructor: Set,
-			  has: proto.has,
-			  add: function(value) {
-				value += "";
-				this[prefix + value] = value;
-				return this;
-			  },
-			  remove: proto.remove,
-			  clear: proto.clear,
-			  values: proto.keys,
-			  size: proto.size,
-			  empty: proto.empty,
-			  each: proto.each
-			};
-
-			function set(object, f) {
-			  var set = new Set;
-
-			  // Copy constructor.
-			  if (object instanceof Set) object.each(function(value) { set.add(value); });
-
-			  // Otherwise, assume it’s an array.
-			  else if (object) {
-				var i = -1, n = object.length;
-				if (f == null) while (++i < n) set.add(object[i]);
-				else while (++i < n) set.add(f(object[i], i, object));
-			  }
-
-			  return set;
-			}
-
-			var keys = function(map) {
-			  var keys = [];
-			  for (var key in map) keys.push(key);
-			  return keys;
-			};
-
-			var values = function(map) {
-			  var values = [];
-			  for (var key in map) values.push(map[key]);
-			  return values;
-			};
-
-			var entries = function(map) {
-			  var entries = [];
-			  for (var key in map) entries.push({key: key, value: map[key]});
-			  return entries;
-			};
-
-			var uniform = function(min, max) {
-			  min = min == null ? 0 : +min;
-			  max = max == null ? 1 : +max;
-			  if (arguments.length === 1) max = min, min = 0;
-			  else max -= min;
-			  return function() {
-				return Math.random() * max + min;
-			  };
-			};
-
-			var normal = function(mu, sigma) {
-			  var x, r;
-			  mu = mu == null ? 0 : +mu;
-			  sigma = sigma == null ? 1 : +sigma;
-			  return function() {
-				var y;
-
-				// If available, use the second previously-generated uniform random.
-				if (x != null) y = x, x = null;
-
-				// Otherwise, generate a new x and y.
-				else do {
-				  x = Math.random() * 2 - 1;
-				  y = Math.random() * 2 - 1;
-				  r = x * x + y * y;
-				} while (!r || r > 1);
-
-				return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
-			  };
-			};
-
-			var logNormal = function() {
-			  var randomNormal = normal.apply(this, arguments);
-			  return function() {
-				return Math.exp(randomNormal());
-			  };
-			};
-
-			var irwinHall = function(n) {
-			  return function() {
-				for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
-				return sum;
-			  };
-			};
-
-			var bates = function(n) {
-			  var randomIrwinHall = irwinHall(n);
-			  return function() {
-				return randomIrwinHall() / n;
-			  };
-			};
-
-			var exponential = function(lambda) {
-			  return function() {
-				return -Math.log(1 - Math.random()) / lambda;
-			  };
-			};
-
-			function linear(t) {
-			  return +t;
-			}
-
-			function quadIn(t) {
-			  return t * t;
-			}
-
-			function quadOut(t) {
-			  return t * (2 - t);
-			}
-
-			function quadInOut(t) {
-			  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
-			}
-
-			function cubicIn(t) {
-			  return t * t * t;
-			}
-
-			function cubicOut(t) {
-			  return --t * t * t + 1;
-			}
-
-			function cubicInOut(t) {
-			  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
-			}
-
-			var exponent = 3;
-
-			var polyIn = (function custom(e) {
-			  e = +e;
-
-			  function polyIn(t) {
-				return Math.pow(t, e);
-			  }
-
-			  polyIn.exponent = custom;
-
-			  return polyIn;
-			})(exponent);
-
-			var polyOut = (function custom(e) {
-			  e = +e;
-
-			  function polyOut(t) {
-				return 1 - Math.pow(1 - t, e);
-			  }
-
-			  polyOut.exponent = custom;
-
-			  return polyOut;
-			})(exponent);
-
-			var polyInOut = (function custom(e) {
-			  e = +e;
-
-			  function polyInOut(t) {
-				return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
-			  }
-
-			  polyInOut.exponent = custom;
-
-			  return polyInOut;
-			})(exponent);
-
-			var pi = Math.PI;
-			var halfPi = pi / 2;
-
-			function sinIn(t) {
-			  return 1 - Math.cos(t * halfPi);
-			}
-
-			function sinOut(t) {
-			  return Math.sin(t * halfPi);
-			}
-
-			function sinInOut(t) {
-			  return (1 - Math.cos(pi * t)) / 2;
-			}
-
-			function expIn(t) {
-			  return Math.pow(2, 10 * t - 10);
-			}
-
-			function expOut(t) {
-			  return 1 - Math.pow(2, -10 * t);
-			}
-
-			function expInOut(t) {
-			  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
-			}
-
-			function circleIn(t) {
-			  return 1 - Math.sqrt(1 - t * t);
-			}
-
-			function circleOut(t) {
-			  return Math.sqrt(1 - --t * t);
-			}
-
-			function circleInOut(t) {
-			  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
-			}
-
-			var b1 = 4 / 11;
-			var b2 = 6 / 11;
-			var b3 = 8 / 11;
-			var b4 = 3 / 4;
-			var b5 = 9 / 11;
-			var b6 = 10 / 11;
-			var b7 = 15 / 16;
-			var b8 = 21 / 22;
-			var b9 = 63 / 64;
-			var b0 = 1 / b1 / b1;
-
-			function bounceIn(t) {
-			  return 1 - bounceOut(1 - t);
-			}
-
-			function bounceOut(t) {
-			  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
-			}
-
-			function bounceInOut(t) {
-			  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
-			}
-
-			var overshoot = 1.70158;
-
-			var backIn = (function custom(s) {
-			  s = +s;
-
-			  function backIn(t) {
-				return t * t * ((s + 1) * t - s);
-			  }
-
-			  backIn.overshoot = custom;
-
-			  return backIn;
-			})(overshoot);
-
-			var backOut = (function custom(s) {
-			  s = +s;
-
-			  function backOut(t) {
-				return --t * t * ((s + 1) * t + s) + 1;
-			  }
-
-			  backOut.overshoot = custom;
-
-			  return backOut;
-			})(overshoot);
-
-			var backInOut = (function custom(s) {
-			  s = +s;
-
-			  function backInOut(t) {
-				return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
-			  }
-
-			  backInOut.overshoot = custom;
-
-			  return backInOut;
-			})(overshoot);
-
-			var tau = 2 * Math.PI;
-			var amplitude = 1;
-			var period = 0.3;
-
-			var elasticIn = (function custom(a, p) {
-			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-			  function elasticIn(t) {
-				return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
-			  }
-
-			  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
-			  elasticIn.period = function(p) { return custom(a, p); };
-
-			  return elasticIn;
-			})(amplitude, period);
-
-			var elasticOut = (function custom(a, p) {
-			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-			  function elasticOut(t) {
-				return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
-			  }
-
-			  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
-			  elasticOut.period = function(p) { return custom(a, p); };
-
-			  return elasticOut;
-			})(amplitude, period);
-
-			var elasticInOut = (function custom(a, p) {
-			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-			  function elasticInOut(t) {
-				return ((t = t * 2 - 1) < 0
-					? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
-					: 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
-			  }
-
-			  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
-			  elasticInOut.period = function(p) { return custom(a, p); };
-
-			  return elasticInOut;
-			})(amplitude, period);
-
-			var area = function(polygon) {
-			  var i = -1,
-				  n = polygon.length,
-				  a,
-				  b = polygon[n - 1],
-				  area = 0;
-
-			  while (++i < n) {
-				a = b;
-				b = polygon[i];
-				area += a[1] * b[0] - a[0] * b[1];
-			  }
-
-			  return area / 2;
-			};
-
-			var centroid = function(polygon) {
-			  var i = -1,
-				  n = polygon.length,
-				  x = 0,
-				  y = 0,
-				  a,
-				  b = polygon[n - 1],
-				  c,
-				  k = 0;
-
-			  while (++i < n) {
-				a = b;
-				b = polygon[i];
-				k += c = a[0] * b[1] - b[0] * a[1];
-				x += (a[0] + b[0]) * c;
-				y += (a[1] + b[1]) * c;
-			  }
-
-			  return k *= 3, [x / k, y / k];
-			};
-
-			// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
-			// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
-			// right, +y is up). Returns a positive value if ABC is counter-clockwise,
-			// negative if clockwise, and zero if the points are collinear.
-			var cross = function(a, b, c) {
-			  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
-			};
-
-			function lexicographicOrder(a, b) {
-			  return a[0] - b[0] || a[1] - b[1];
-			}
-
-			// Computes the upper convex hull per the monotone chain algorithm.
-			// Assumes points.length >= 3, is sorted by x, unique in y.
-			// Returns an array of indices into points in left-to-right order.
-			function computeUpperHullIndexes(points) {
-			  var n = points.length,
-				  indexes = [0, 1],
-				  size = 2;
-
-			  for (var i = 2; i < n; ++i) {
-				while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
-				indexes[size++] = i;
-			  }
-
-			  return indexes.slice(0, size); // remove popped points
-			}
-
-			var hull = function(points) {
-			  if ((n = points.length) < 3) return null;
-
-			  var i,
-				  n,
-				  sortedPoints = new Array(n),
-				  flippedPoints = new Array(n);
-
-			  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
-			  sortedPoints.sort(lexicographicOrder);
-			  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
-
-			  var upperIndexes = computeUpperHullIndexes(sortedPoints),
-				  lowerIndexes = computeUpperHullIndexes(flippedPoints);
-
-			  // Construct the hull polygon, removing possible duplicate endpoints.
-			  var skipLeft = lowerIndexes[0] === upperIndexes[0],
-				  skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
-				  hull = [];
-
-			  // Add upper hull in right-to-l order.
-			  // Then add lower hull in left-to-right order.
-			  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
-			  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
-
-			  return hull;
-			};
-
-			var contains = function(polygon, point) {
-			  var n = polygon.length,
-				  p = polygon[n - 1],
-				  x = point[0], y = point[1],
-				  x0 = p[0], y0 = p[1],
-				  x1, y1,
-				  inside = false;
-
-			  for (var i = 0; i < n; ++i) {
-				p = polygon[i], x1 = p[0], y1 = p[1];
-				if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
-				x0 = x1, y0 = y1;
-			  }
-
-			  return inside;
-			};
-
-			var length$1 = function(polygon) {
-			  var i = -1,
-				  n = polygon.length,
-				  b = polygon[n - 1],
-				  xa,
-				  ya,
-				  xb = b[0],
-				  yb = b[1],
-				  perimeter = 0;
-
-			  while (++i < n) {
-				xa = xb;
-				ya = yb;
-				b = polygon[i];
-				xb = b[0];
-				yb = b[1];
-				xa -= xb;
-				ya -= yb;
-				perimeter += Math.sqrt(xa * xa + ya * ya);
-			  }
-
-			  return perimeter;
-			};
-
-			var pi$1 = Math.PI;
-			var tau$1 = 2 * pi$1;
-			var epsilon = 1e-6;
-			var tauEpsilon = tau$1 - epsilon;
-
-			function Path() {
-			  this._x0 = this._y0 = // start of current subpath
-			  this._x1 = this._y1 = null; // end of current subpath
-			  this._ = [];
-			}
-
-			function path() {
-			  return new Path;
-			}
-
-			Path.prototype = path.prototype = {
-			  constructor: Path,
-			  moveTo: function(x, y) {
-				this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
-			  },
-			  closePath: function() {
-				if (this._x1 !== null) {
-				  this._x1 = this._x0, this._y1 = this._y0;
-				  this._.push("Z");
-				}
-			  },
-			  lineTo: function(x, y) {
-				this._.push("L", this._x1 = +x, ",", this._y1 = +y);
-			  },
-			  quadraticCurveTo: function(x1, y1, x, y) {
-				this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
-			  },
-			  bezierCurveTo: function(x1, y1, x2, y2, x, y) {
-				this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
-			  },
-			  arcTo: function(x1, y1, x2, y2, r) {
-				x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
-				var x0 = this._x1,
-					y0 = this._y1,
-					x21 = x2 - x1,
-					y21 = y2 - y1,
-					x01 = x0 - x1,
-					y01 = y0 - y1,
-					l01_2 = x01 * x01 + y01 * y01;
-
-				// Is the radius negative? Error.
-				if (r < 0) throw new Error("negative radius: " + r);
-
-				// Is this path empty? Move to (x1,y1).
-				if (this._x1 === null) {
-				  this._.push(
-					"M", this._x1 = x1, ",", this._y1 = y1
-				  );
-				}
-
-				// Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
-				else if (!(l01_2 > epsilon)) {}
-
-				// Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
-				// Equivalently, is (x1,y1) coincident with (x2,y2)?
-				// Or, is the radius zero? Line to (x1,y1).
-				else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
-				  this._.push(
-					"L", this._x1 = x1, ",", this._y1 = y1
-				  );
-				}
-
-				// Otherwise, draw an arc!
-				else {
-				  var x20 = x2 - x0,
-					  y20 = y2 - y0,
-					  l21_2 = x21 * x21 + y21 * y21,
-					  l20_2 = x20 * x20 + y20 * y20,
-					  l21 = Math.sqrt(l21_2),
-					  l01 = Math.sqrt(l01_2),
-					  l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
-					  t01 = l / l01,
-					  t21 = l / l21;
-
-				  // If the start tangent is not coincident with (x0,y0), line to.
-				  if (Math.abs(t01 - 1) > epsilon) {
-					this._.push(
-					  "L", x1 + t01 * x01, ",", y1 + t01 * y01
-					);
-				  }
-
-				  this._.push(
-					"A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
-				  );
-				}
-			  },
-			  arc: function(x, y, r, a0, a1, ccw) {
-				x = +x, y = +y, r = +r;
-				var dx = r * Math.cos(a0),
-					dy = r * Math.sin(a0),
-					x0 = x + dx,
-					y0 = y + dy,
-					cw = 1 ^ ccw,
-					da = ccw ? a0 - a1 : a1 - a0;
-
-				// Is the radius negative? Error.
-				if (r < 0) throw new Error("negative radius: " + r);
-
-				// Is this path empty? Move to (x0,y0).
-				if (this._x1 === null) {
-				  this._.push(
-					"M", x0, ",", y0
-				  );
-				}
-
-				// Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
-				else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
-				  this._.push(
-					"L", x0, ",", y0
-				  );
-				}
-
-				// Is this arc empty? We’re done.
-				if (!r) return;
-
-				// Is this a complete circle? Draw two arcs to complete the circle.
-				if (da > tauEpsilon) {
-				  this._.push(
-					"A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
-					"A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
-				  );
-				}
-
-				// Otherwise, draw an arc!
-				else {
-				  if (da < 0) da = da % tau$1 + tau$1;
-				  this._.push(
-					"A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
-				  );
-				}
-			  },
-			  rect: function(x, y, w, h) {
-				this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
-			  },
-			  toString: function() {
-				return this._.join("");
-			  }
-			};
-
-			var tree_add = function(d) {
-			  var x = +this._x.call(null, d),
-				  y = +this._y.call(null, d);
-			  return add(this.cover(x, y), x, y, d);
-			};
-
-			function add(tree, x, y, d) {
-			  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
-
-			  var parent,
-				  node = tree._root,
-				  leaf = {data: d},
-				  x0 = tree._x0,
-				  y0 = tree._y0,
-				  x1 = tree._x1,
-				  y1 = tree._y1,
-				  xm,
-				  ym,
-				  xp,
-				  yp,
-				  right,
-				  bottom,
-				  i,
-				  j;
-
-			  // If the tree is empty, initialize the root as a leaf.
-			  if (!node) return tree._root = leaf, tree;
-
-			  // Find the existing leaf for the new point, or add it.
-			  while (node.length) {
-				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-				if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
-			  }
-
-			  // Is the new point is exactly coincident with the existing point?
-			  xp = +tree._x.call(null, node.data);
-			  yp = +tree._y.call(null, node.data);
-			  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
-
-			  // Otherwise, split the leaf node until the old and new point are separated.
-			  do {
-				parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
-				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-			  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
-			  return parent[j] = node, parent[i] = leaf, tree;
-			}
-
-			function addAll(data) {
-			  var d, i, n = data.length,
-				  x,
-				  y,
-				  xz = new Array(n),
-				  yz = new Array(n),
-				  x0 = Infinity,
-				  y0 = Infinity,
-				  x1 = -Infinity,
-				  y1 = -Infinity;
-
-			  // Compute the points and their extent.
-			  for (i = 0; i < n; ++i) {
-				if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
-				xz[i] = x;
-				yz[i] = y;
-				if (x < x0) x0 = x;
-				if (x > x1) x1 = x;
-				if (y < y0) y0 = y;
-				if (y > y1) y1 = y;
-			  }
-
-			  // If there were no (valid) points, inherit the existing extent.
-			  if (x1 < x0) x0 = this._x0, x1 = this._x1;
-			  if (y1 < y0) y0 = this._y0, y1 = this._y1;
-
-			  // Expand the tree to cover the new points.
-			  this.cover(x0, y0).cover(x1, y1);
-
-			  // Add the new points.
-			  for (i = 0; i < n; ++i) {
-				add(this, xz[i], yz[i], data[i]);
-			  }
-
-			  return this;
-			}
-
-			var tree_cover = function(x, y) {
-			  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
-
-			  var x0 = this._x0,
-				  y0 = this._y0,
-				  x1 = this._x1,
-				  y1 = this._y1;
-
-			  // If the quadtree has no extent, initialize them.
-			  // Integer extent are necessary so that if we later double the extent,
-			  // the existing quadrant boundaries don’t change due to floating point error!
-			  if (isNaN(x0)) {
-				x1 = (x0 = Math.floor(x)) + 1;
-				y1 = (y0 = Math.floor(y)) + 1;
-			  }
-
-			  // Otherwise, double repeatedly to cover.
-			  else if (x0 > x || x > x1 || y0 > y || y > y1) {
-				var z = x1 - x0,
-					node = this._root,
-					parent,
-					i;
-
-				switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
-				  case 0: {
-					do parent = new Array(4), parent[i] = node, node = parent;
-					while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
-					break;
-				  }
-				  case 1: {
-					do parent = new Array(4), parent[i] = node, node = parent;
-					while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
-					break;
-				  }
-				  case 2: {
-					do parent = new Array(4), parent[i] = node, node = parent;
-					while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
-					break;
-				  }
-				  case 3: {
-					do parent = new Array(4), parent[i] = node, node = parent;
-					while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
-					break;
-				  }
-				}
-
-				if (this._root && this._root.length) this._root = node;
-			  }
-
-			  // If the quadtree covers the point already, just return.
-			  else return this;
-
-			  this._x0 = x0;
-			  this._y0 = y0;
-			  this._x1 = x1;
-			  this._y1 = y1;
-			  return this;
-			};
-
-			var tree_data = function() {
-			  var data = [];
-			  this.visit(function(node) {
-				if (!node.length) do data.push(node.data); while (node = node.next)
-			  });
-			  return data;
-			};
-
-			var tree_extent = function(_) {
-			  return arguments.length
-				  ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
-				  : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
-			};
-
-			var Quad = function(node, x0, y0, x1, y1) {
-			  this.node = node;
-			  this.x0 = x0;
-			  this.y0 = y0;
-			  this.x1 = x1;
-			  this.y1 = y1;
-			};
-
-			var tree_find = function(x, y, radius) {
-			  var data,
-				  x0 = this._x0,
-				  y0 = this._y0,
-				  x1,
-				  y1,
-				  x2,
-				  y2,
-				  x3 = this._x1,
-				  y3 = this._y1,
-				  quads = [],
-				  node = this._root,
-				  q,
-				  i;
-
-			  if (node) quads.push(new Quad(node, x0, y0, x3, y3));
-			  if (radius == null) radius = Infinity;
-			  else {
-				x0 = x - radius, y0 = y - radius;
-				x3 = x + radius, y3 = y + radius;
-				radius *= radius;
-			  }
-
-			  while (q = quads.pop()) {
-
-				// Stop searching if this quadrant can’t contain a closer node.
-				if (!(node = q.node)
-					|| (x1 = q.x0) > x3
-					|| (y1 = q.y0) > y3
-					|| (x2 = q.x1) < x0
-					|| (y2 = q.y1) < y0) continue;
-
-				// Bisect the current quadrant.
-				if (node.length) {
-				  var xm = (x1 + x2) / 2,
-					  ym = (y1 + y2) / 2;
-
-				  quads.push(
-					new Quad(node[3], xm, ym, x2, y2),
-					new Quad(node[2], x1, ym, xm, y2),
-					new Quad(node[1], xm, y1, x2, ym),
-					new Quad(node[0], x1, y1, xm, ym)
-				  );
-
-				  // Visit the closest quadrant first.
-				  if (i = (y >= ym) << 1 | (x >= xm)) {
-					q = quads[quads.length - 1];
-					quads[quads.length - 1] = quads[quads.length - 1 - i];
-					quads[quads.length - 1 - i] = q;
-				  }
-				}
-
-				// Visit this point. (Visiting coincident points isn’t necessary!)
-				else {
-				  var dx = x - +this._x.call(null, node.data),
-					  dy = y - +this._y.call(null, node.data),
-					  d2 = dx * dx + dy * dy;
-				  if (d2 < radius) {
-					var d = Math.sqrt(radius = d2);
-					x0 = x - d, y0 = y - d;
-					x3 = x + d, y3 = y + d;
-					data = node.data;
-				  }
-				}
-			  }
-
-			  return data;
-			};
-
-			var tree_remove = function(d) {
-			  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
-
-			  var parent,
-				  node = this._root,
-				  retainer,
-				  previous,
-				  next,
-				  x0 = this._x0,
-				  y0 = this._y0,
-				  x1 = this._x1,
-				  y1 = this._y1,
-				  x,
-				  y,
-				  xm,
-				  ym,
-				  right,
-				  bottom,
-				  i,
-				  j;
-
-			  // If the tree is empty, initialize the root as a leaf.
-			  if (!node) return this;
-
-			  // Find the leaf node for the point.
-			  // While descending, also retain the deepest parent with a non-removed sibling.
-			  if (node.length) while (true) {
-				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-				if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
-				if (!node.length) break;
-				if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
-			  }
-
-			  // Find the point to remove.
-			  while (node.data !== d) if (!(previous = node, node = node.next)) return this;
-			  if (next = node.next) delete node.next;
-
-			  // If there are multiple coincident points, remove just the point.
-			  if (previous) return (next ? previous.next = next : delete previous.next), this;
-
-			  // If this is the root point, remove it.
-			  if (!parent) return this._root = next, this;
-
-			  // Remove this leaf.
-			  next ? parent[i] = next : delete parent[i];
-
-			  // If the parent now contains exactly one leaf, collapse superfluous parents.
-			  if ((node = parent[0] || parent[1] || parent[2] || parent[3])
-				  && node === (parent[3] || parent[2] || parent[1] || parent[0])
-				  && !node.length) {
-				if (retainer) retainer[j] = node;
-				else this._root = node;
-			  }
-
-			  return this;
-			};
-
-			function removeAll(data) {
-			  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
-			  return this;
-			}
-
-			var tree_root = function() {
-			  return this._root;
-			};
-
-			var tree_size = function() {
-			  var size = 0;
-			  this.visit(function(node) {
-				if (!node.length) do ++size; while (node = node.next)
-			  });
-			  return size;
-			};
-
-			var tree_visit = function(callback) {
-			  var quads = [], q, node = this._root, child, x0, y0, x1, y1;
-			  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
-			  while (q = quads.pop()) {
-				if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
-				  var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
-				  if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
-				  if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
-				  if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
-				  if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
-				}
-			  }
-			  return this;
-			};
-
-			var tree_visitAfter = function(callback) {
-			  var quads = [], next = [], q;
-			  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
-			  while (q = quads.pop()) {
-				var node = q.node;
-				if (node.length) {
-				  var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
-				  if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
-				  if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
-				  if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
-				  if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
-				}
-				next.push(q);
-			  }
-			  while (q = next.pop()) {
-				callback(q.node, q.x0, q.y0, q.x1, q.y1);
-			  }
-			  return this;
-			};
-
-			function defaultX(d) {
-			  return d[0];
-			}
-
-			var tree_x = function(_) {
-			  return arguments.length ? (this._x = _, this) : this._x;
-			};
-
-			function defaultY(d) {
-			  return d[1];
-			}
-
-			var tree_y = function(_) {
-			  return arguments.length ? (this._y = _, this) : this._y;
-			};
-
-			function quadtree(nodes, x, y) {
-			  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
-			  return nodes == null ? tree : tree.addAll(nodes);
-			}
-
-			function Quadtree(x, y, x0, y0, x1, y1) {
-			  this._x = x;
-			  this._y = y;
-			  this._x0 = x0;
-			  this._y0 = y0;
-			  this._x1 = x1;
-			  this._y1 = y1;
-			  this._root = undefined;
-			}
-
-			function leaf_copy(leaf) {
-			  var copy = {data: leaf.data}, next = copy;
-			  while (leaf = leaf.next) next = next.next = {data: leaf.data};
-			  return copy;
-			}
-
-			var treeProto = quadtree.prototype = Quadtree.prototype;
-
-			treeProto.copy = function() {
-			  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
-				  node = this._root,
-				  nodes,
-				  child;
-
-			  if (!node) return copy;
-
-			  if (!node.length) return copy._root = leaf_copy(node), copy;
-
-			  nodes = [{source: node, target: copy._root = new Array(4)}];
-			  while (node = nodes.pop()) {
-				for (var i = 0; i < 4; ++i) {
-				  if (child = node.source[i]) {
-					if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
-					else node.target[i] = leaf_copy(child);
-				  }
-				}
-			  }
-
-			  return copy;
-			};
-
-			treeProto.add = tree_add;
-			treeProto.addAll = addAll;
-			treeProto.cover = tree_cover;
-			treeProto.data = tree_data;
-			treeProto.extent = tree_extent;
-			treeProto.find = tree_find;
-			treeProto.remove = tree_remove;
-			treeProto.removeAll = removeAll;
-			treeProto.root = tree_root;
-			treeProto.size = tree_size;
-			treeProto.visit = tree_visit;
-			treeProto.visitAfter = tree_visitAfter;
-			treeProto.x = tree_x;
-			treeProto.y = tree_y;
-
-			var slice$1 = [].slice;
-
-			var noabort = {};
-
-			function Queue(size) {
-			  if (!(size >= 1)) throw new Error;
-			  this._size = size;
-			  this._call =
-			  this._error = null;
-			  this._tasks = [];
-			  this._data = [];
-			  this._waiting =
-			  this._active =
-			  this._ended =
-			  this._start = 0; // inside a synchronous task callback?
-			}
-
-			Queue.prototype = queue.prototype = {
-			  constructor: Queue,
-			  defer: function(callback) {
-				if (typeof callback !== "function" || this._call) throw new Error;
-				if (this._error != null) return this;
-				var t = slice$1.call(arguments, 1);
-				t.push(callback);
-				++this._waiting, this._tasks.push(t);
-				poke(this);
-				return this;
-			  },
-			  abort: function() {
-				if (this._error == null) abort(this, new Error("abort"));
-				return this;
-			  },
-			  await: function(callback) {
-				if (typeof callback !== "function" || this._call) throw new Error;
-				this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
-				maybeNotify(this);
-				return this;
-			  },
-			  awaitAll: function(callback) {
-				if (typeof callback !== "function" || this._call) throw new Error;
-				this._call = callback;
-				maybeNotify(this);
-				return this;
-			  }
-			};
-
-			function poke(q) {
-			  if (!q._start) {
-				try { start(q); } // let the current task complete
-				catch (e) {
-				  if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
-				  else if (!q._data) throw e; // await callback errored synchronously
-				}
-			  }
-			}
-
-			function start(q) {
-			  while (q._start = q._waiting && q._active < q._size) {
-				var i = q._ended + q._active,
-					t = q._tasks[i],
-					j = t.length - 1,
-					c = t[j];
-				t[j] = end(q, i);
-				--q._waiting, ++q._active;
-				t = c.apply(null, t);
-				if (!q._tasks[i]) continue; // task finished synchronously
-				q._tasks[i] = t || noabort;
-			  }
-			}
-
-			function end(q, i) {
-			  return function(e, r) {
-				if (!q._tasks[i]) return; // ignore multiple callbacks
-				--q._active, ++q._ended;
-				q._tasks[i] = null;
-				if (q._error != null) return; // ignore secondary errors
-				if (e != null) {
-				  abort(q, e);
-				} else {
-				  q._data[i] = r;
-				  if (q._waiting) poke(q);
-				  else maybeNotify(q);
-				}
-			  };
-			}
-
-			function abort(q, e) {
-			  var i = q._tasks.length, t;
-			  q._error = e; // ignore active callbacks
-			  q._data = undefined; // allow gc
-			  q._waiting = NaN; // prevent starting
-
-			  while (--i >= 0) {
-				if (t = q._tasks[i]) {
-				  q._tasks[i] = null;
-				  if (t.abort) {
-					try { t.abort(); }
-					catch (e) { /* ignore */ }
-				  }
-				}
-			  }
-
-			  q._active = NaN; // allow notification
-			  maybeNotify(q);
-			}
-
-			function maybeNotify(q) {
-			  if (!q._active && q._call) {
-				var d = q._data;
-				q._data = undefined; // allow gc
-				q._call(q._error, d);
-			  }
-			}
-
-			function queue(concurrency) {
-			  return new Queue(arguments.length ? +concurrency : Infinity);
-			}
-
-			var constant$2 = function(x) {
-			  return function constant() {
-				return x;
-			  };
-			};
-
-			var epsilon$1 = 1e-12;
-			var pi$2 = Math.PI;
-			var halfPi$1 = pi$2 / 2;
-			var tau$2 = 2 * pi$2;
-
-			function arcInnerRadius(d) {
-			  return d.innerRadius;
-			}
-
-			function arcOuterRadius(d) {
-			  return d.outerRadius;
-			}
-
-			function arcStartAngle(d) {
-			  return d.startAngle;
-			}
-
-			function arcEndAngle(d) {
-			  return d.endAngle;
-			}
-
-			function arcPadAngle(d) {
-			  return d && d.padAngle; // Note: optional!
-			}
-
-			function asin(x) {
-			  return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);
-			}
-
-			function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
-			  var x10 = x1 - x0, y10 = y1 - y0,
-				  x32 = x3 - x2, y32 = y3 - y2,
-				  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
-			  return [x0 + t * x10, y0 + t * y10];
-			}
-
-			// Compute perpendicular offset line of length rc.
-			// http://mathworld.wolfram.com/Circle-LineIntersection.html
-			function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
-			  var x01 = x0 - x1,
-				  y01 = y0 - y1,
-				  lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
-				  ox = lo * y01,
-				  oy = -lo * x01,
-				  x11 = x0 + ox,
-				  y11 = y0 + oy,
-				  x10 = x1 + ox,
-				  y10 = y1 + oy,
-				  x00 = (x11 + x10) / 2,
-				  y00 = (y11 + y10) / 2,
-				  dx = x10 - x11,
-				  dy = y10 - y11,
-				  d2 = dx * dx + dy * dy,
-				  r = r1 - rc,
-				  D = x11 * y10 - x10 * y11,
-				  d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
-				  cx0 = (D * dy - dx * d) / d2,
-				  cy0 = (-D * dx - dy * d) / d2,
-				  cx1 = (D * dy + dx * d) / d2,
-				  cy1 = (-D * dx + dy * d) / d2,
-				  dx0 = cx0 - x00,
-				  dy0 = cy0 - y00,
-				  dx1 = cx1 - x00,
-				  dy1 = cy1 - y00;
-
-			  // Pick the closer of the two intersection points.
-			  // TODO Is there a faster way to determine which intersection to use?
-			  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
-
-			  return {
-				cx: cx0,
-				cy: cy0,
-				x01: -ox,
-				y01: -oy,
-				x11: cx0 * (r1 / r - 1),
-				y11: cy0 * (r1 / r - 1)
-			  };
-			}
-
-			var arc = function() {
-			  var innerRadius = arcInnerRadius,
-				  outerRadius = arcOuterRadius,
-				  cornerRadius = constant$2(0),
-				  padRadius = null,
-				  startAngle = arcStartAngle,
-				  endAngle = arcEndAngle,
-				  padAngle = arcPadAngle,
-				  context = null;
-
-			  function arc() {
-				var buffer,
-					r,
-					r0 = +innerRadius.apply(this, arguments),
-					r1 = +outerRadius.apply(this, arguments),
-					a0 = startAngle.apply(this, arguments) - halfPi$1,
-					a1 = endAngle.apply(this, arguments) - halfPi$1,
-					da = Math.abs(a1 - a0),
-					cw = a1 > a0;
-
-				if (!context) context = buffer = path();
-
-				// Ensure that the outer radius is always larger than the inner radius.
-				if (r1 < r0) r = r1, r1 = r0, r0 = r;
-
-				// Is it a point?
-				if (!(r1 > epsilon$1)) context.moveTo(0, 0);
-
-				// Or is it a circle or annulus?
-				else if (da > tau$2 - epsilon$1) {
-				  context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
-				  context.arc(0, 0, r1, a0, a1, !cw);
-				  if (r0 > epsilon$1) {
-					context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
-					context.arc(0, 0, r0, a1, a0, cw);
-				  }
-				}
-
-				// Or is it a circular or annular sector?
-				else {
-				  var a01 = a0,
-					  a11 = a1,
-					  a00 = a0,
-					  a10 = a1,
-					  da0 = da,
-					  da1 = da,
-					  ap = padAngle.apply(this, arguments) / 2,
-					  rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
-					  rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
-					  rc0 = rc,
-					  rc1 = rc,
-					  t0,
-					  t1;
-
-				  // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
-				  if (rp > epsilon$1) {
-					var p0 = asin(rp / r0 * Math.sin(ap)),
-						p1 = asin(rp / r1 * Math.sin(ap));
-					if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
-					else da0 = 0, a00 = a10 = (a0 + a1) / 2;
-					if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
-					else da1 = 0, a01 = a11 = (a0 + a1) / 2;
-				  }
-
-				  var x01 = r1 * Math.cos(a01),
-					  y01 = r1 * Math.sin(a01),
-					  x10 = r0 * Math.cos(a10),
-					  y10 = r0 * Math.sin(a10);
-
-				  // Apply rounded corners?
-				  if (rc > epsilon$1) {
-					var x11 = r1 * Math.cos(a11),
-						y11 = r1 * Math.sin(a11),
-						x00 = r0 * Math.cos(a00),
-						y00 = r0 * Math.sin(a00);
-
-					// Restrict the corner radius according to the sector angle.
-					if (da < pi$2) {
-					  var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
-						  ax = x01 - oc[0],
-						  ay = y01 - oc[1],
-						  bx = x11 - oc[0],
-						  by = y11 - oc[1],
-						  kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
-						  lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
-					  rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
-					  rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
-					}
-				  }
-
-				  // Is the sector collapsed to a line?
-				  if (!(da1 > epsilon$1)) context.moveTo(x01, y01);
-
-				  // Does the sector’s outer ring have rounded corners?
-				  else if (rc1 > epsilon$1) {
-					t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
-					t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
-
-					context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-					// Have the corners merged?
-					if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
-
-					// Otherwise, draw the two corners and the ring.
-					else {
-					  context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
-					  context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
-					  context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
-					}
-				  }
-
-				  // Or is the outer ring just a circular arc?
-				  else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
-
-				  // Is there no inner ring, and it’s a circular sector?
-				  // Or perhaps it’s an annular sector collapsed due to padding?
-				  if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);
-
-				  // Does the sector’s inner ring (or point) have rounded corners?
-				  else if (rc0 > epsilon$1) {
-					t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
-					t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
-
-					context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-					// Have the corners merged?
-					if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
-
-					// Otherwise, draw the two corners and the ring.
-					else {
-					  context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
-					  context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
-					  context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
-					}
-				  }
-
-				  // Or is the inner ring just a circular arc?
-				  else context.arc(0, 0, r0, a10, a00, cw);
-				}
-
-				context.closePath();
-
-				if (buffer) return context = null, buffer + "" || null;
-			  }
-
-			  arc.centroid = function() {
-				var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
-					a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;
-				return [Math.cos(a) * r, Math.sin(a) * r];
-			  };
-
-			  arc.innerRadius = function(_) {
-				return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius;
-			  };
-
-			  arc.outerRadius = function(_) {
-				return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius;
-			  };
-
-			  arc.cornerRadius = function(_) {
-				return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius;
-			  };
-
-			  arc.padRadius = function(_) {
-				return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius;
-			  };
-
-			  arc.startAngle = function(_) {
-				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle;
-			  };
-
-			  arc.endAngle = function(_) {
-				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle;
-			  };
-
-			  arc.padAngle = function(_) {
-				return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle;
-			  };
-
-			  arc.context = function(_) {
-				return arguments.length ? ((context = _ == null ? null : _), arc) : context;
-			  };
-
-			  return arc;
-			};
-
-			function Linear(context) {
-			  this._context = context;
-			}
-
-			Linear.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; // proceed
-				  default: this._context.lineTo(x, y); break;
-				}
-			  }
-			};
-
-			var curveLinear = function(context) {
-			  return new Linear(context);
-			};
-
-			function x(p) {
-			  return p[0];
-			}
-
-			function y(p) {
-			  return p[1];
-			}
-
-			var line = function() {
-			  var x$$1 = x,
-				  y$$1 = y,
-				  defined = constant$2(true),
-				  context = null,
-				  curve = curveLinear,
-				  output = null;
-
-			  function line(data) {
-				var i,
-					n = data.length,
-					d,
-					defined0 = false,
-					buffer;
-
-				if (context == null) output = curve(buffer = path());
-
-				for (i = 0; i <= n; ++i) {
-				  if (!(i < n && defined(d = data[i], i, data)) === defined0) {
-					if (defined0 = !defined0) output.lineStart();
-					else output.lineEnd();
-				  }
-				  if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
-				}
-
-				if (buffer) return output = null, buffer + "" || null;
-			  }
-
-			  line.x = function(_) {
-				return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1;
-			  };
-
-			  line.y = function(_) {
-				return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1;
-			  };
-
-			  line.defined = function(_) {
-				return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined;
-			  };
-
-			  line.curve = function(_) {
-				return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
-			  };
-
-			  line.context = function(_) {
-				return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
-			  };
-
-			  return line;
-			};
-
-			var area$1 = function() {
-			  var x0 = x,
-				  x1 = null,
-				  y0 = constant$2(0),
-				  y1 = y,
-				  defined = constant$2(true),
-				  context = null,
-				  curve = curveLinear,
-				  output = null;
-
-			  function area(data) {
-				var i,
-					j,
-					k,
-					n = data.length,
-					d,
-					defined0 = false,
-					buffer,
-					x0z = new Array(n),
-					y0z = new Array(n);
-
-				if (context == null) output = curve(buffer = path());
-
-				for (i = 0; i <= n; ++i) {
-				  if (!(i < n && defined(d = data[i], i, data)) === defined0) {
-					if (defined0 = !defined0) {
-					  j = i;
-					  output.areaStart();
-					  output.lineStart();
-					} else {
-					  output.lineEnd();
-					  output.lineStart();
-					  for (k = i - 1; k >= j; --k) {
-						output.point(x0z[k], y0z[k]);
-					  }
-					  output.lineEnd();
-					  output.areaEnd();
-					}
-				  }
-				  if (defined0) {
-					x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
-					output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
-				  }
-				}
-
-				if (buffer) return output = null, buffer + "" || null;
-			  }
-
-			  function arealine() {
-				return line().defined(defined).curve(curve).context(context);
-			  }
-
-			  area.x = function(_) {
-				return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0;
-			  };
-
-			  area.x0 = function(_) {
-				return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0;
-			  };
-
-			  area.x1 = function(_) {
-				return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1;
-			  };
-
-			  area.y = function(_) {
-				return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0;
-			  };
-
-			  area.y0 = function(_) {
-				return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0;
-			  };
-
-			  area.y1 = function(_) {
-				return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1;
-			  };
-
-			  area.lineX0 =
-			  area.lineY0 = function() {
-				return arealine().x(x0).y(y0);
-			  };
-
-			  area.lineY1 = function() {
-				return arealine().x(x0).y(y1);
-			  };
-
-			  area.lineX1 = function() {
-				return arealine().x(x1).y(y0);
-			  };
-
-			  area.defined = function(_) {
-				return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined;
-			  };
-
-			  area.curve = function(_) {
-				return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
-			  };
-
-			  area.context = function(_) {
-				return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
-			  };
-
-			  return area;
-			};
-
-			var descending$1 = function(a, b) {
-			  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-			};
-
-			var identity$1 = function(d) {
-			  return d;
-			};
-
-			var pie = function() {
-			  var value = identity$1,
-				  sortValues = descending$1,
-				  sort = null,
-				  startAngle = constant$2(0),
-				  endAngle = constant$2(tau$2),
-				  padAngle = constant$2(0);
-
-			  function pie(data) {
-				var i,
-					n = data.length,
-					j,
-					k,
-					sum = 0,
-					index = new Array(n),
-					arcs = new Array(n),
-					a0 = +startAngle.apply(this, arguments),
-					da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),
-					a1,
-					p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
-					pa = p * (da < 0 ? -1 : 1),
-					v;
-
-				for (i = 0; i < n; ++i) {
-				  if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
-					sum += v;
-				  }
-				}
-
-				// Optionally sort the arcs by previously-computed values or by data.
-				if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
-				else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
-
-				// Compute the arcs! They are stored in the original data's order.
-				for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
-				  j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
-					data: data[j],
-					index: i,
-					value: v,
-					startAngle: a0,
-					endAngle: a1,
-					padAngle: p
-				  };
-				}
-
-				return arcs;
-			  }
-
-			  pie.value = function(_) {
-				return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value;
-			  };
-
-			  pie.sortValues = function(_) {
-				return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
-			  };
-
-			  pie.sort = function(_) {
-				return arguments.length ? (sort = _, sortValues = null, pie) : sort;
-			  };
-
-			  pie.startAngle = function(_) {
-				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle;
-			  };
-
-			  pie.endAngle = function(_) {
-				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle;
-			  };
-
-			  pie.padAngle = function(_) {
-				return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle;
-			  };
-
-			  return pie;
-			};
-
-			var curveRadialLinear = curveRadial(curveLinear);
-
-			function Radial(curve) {
-			  this._curve = curve;
-			}
-
-			Radial.prototype = {
-			  areaStart: function() {
-				this._curve.areaStart();
-			  },
-			  areaEnd: function() {
-				this._curve.areaEnd();
-			  },
-			  lineStart: function() {
-				this._curve.lineStart();
-			  },
-			  lineEnd: function() {
-				this._curve.lineEnd();
-			  },
-			  point: function(a, r) {
-				this._curve.point(r * Math.sin(a), r * -Math.cos(a));
-			  }
-			};
-
-			function curveRadial(curve) {
-
-			  function radial(context) {
-				return new Radial(curve(context));
-			  }
-
-			  radial._curve = curve;
-
-			  return radial;
-			}
-
-			function radialLine(l) {
-			  var c = l.curve;
-
-			  l.angle = l.x, delete l.x;
-			  l.radius = l.y, delete l.y;
-
-			  l.curve = function(_) {
-				return arguments.length ? c(curveRadial(_)) : c()._curve;
-			  };
-
-			  return l;
-			}
-
-			var radialLine$1 = function() {
-			  return radialLine(line().curve(curveRadialLinear));
-			};
-
-			var radialArea = function() {
-			  var a = area$1().curve(curveRadialLinear),
-				  c = a.curve,
-				  x0 = a.lineX0,
-				  x1 = a.lineX1,
-				  y0 = a.lineY0,
-				  y1 = a.lineY1;
-
-			  a.angle = a.x, delete a.x;
-			  a.startAngle = a.x0, delete a.x0;
-			  a.endAngle = a.x1, delete a.x1;
-			  a.radius = a.y, delete a.y;
-			  a.innerRadius = a.y0, delete a.y0;
-			  a.outerRadius = a.y1, delete a.y1;
-			  a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
-			  a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
-			  a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
-			  a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
-
-			  a.curve = function(_) {
-				return arguments.length ? c(curveRadial(_)) : c()._curve;
-			  };
-
-			  return a;
-			};
-
-			var circle = {
-			  draw: function(context, size) {
-				var r = Math.sqrt(size / pi$2);
-				context.moveTo(r, 0);
-				context.arc(0, 0, r, 0, tau$2);
-			  }
-			};
-
-			var cross$1 = {
-			  draw: function(context, size) {
-				var r = Math.sqrt(size / 5) / 2;
-				context.moveTo(-3 * r, -r);
-				context.lineTo(-r, -r);
-				context.lineTo(-r, -3 * r);
-				context.lineTo(r, -3 * r);
-				context.lineTo(r, -r);
-				context.lineTo(3 * r, -r);
-				context.lineTo(3 * r, r);
-				context.lineTo(r, r);
-				context.lineTo(r, 3 * r);
-				context.lineTo(-r, 3 * r);
-				context.lineTo(-r, r);
-				context.lineTo(-3 * r, r);
-				context.closePath();
-			  }
-			};
-
-			var tan30 = Math.sqrt(1 / 3);
-			var tan30_2 = tan30 * 2;
-
-			var diamond = {
-			  draw: function(context, size) {
-				var y = Math.sqrt(size / tan30_2),
-					x = y * tan30;
-				context.moveTo(0, -y);
-				context.lineTo(x, 0);
-				context.lineTo(0, y);
-				context.lineTo(-x, 0);
-				context.closePath();
-			  }
-			};
-
-			var ka = 0.89081309152928522810;
-			var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);
-			var kx = Math.sin(tau$2 / 10) * kr;
-			var ky = -Math.cos(tau$2 / 10) * kr;
-
-			var star = {
-			  draw: function(context, size) {
-				var r = Math.sqrt(size * ka),
-					x = kx * r,
-					y = ky * r;
-				context.moveTo(0, -r);
-				context.lineTo(x, y);
-				for (var i = 1; i < 5; ++i) {
-				  var a = tau$2 * i / 5,
-					  c = Math.cos(a),
-					  s = Math.sin(a);
-				  context.lineTo(s * r, -c * r);
-				  context.lineTo(c * x - s * y, s * x + c * y);
-				}
-				context.closePath();
-			  }
-			};
-
-			var square = {
-			  draw: function(context, size) {
-				var w = Math.sqrt(size),
-					x = -w / 2;
-				context.rect(x, x, w, w);
-			  }
-			};
-
-			var sqrt3 = Math.sqrt(3);
-
-			var triangle = {
-			  draw: function(context, size) {
-				var y = -Math.sqrt(size / (sqrt3 * 3));
-				context.moveTo(0, y * 2);
-				context.lineTo(-sqrt3 * y, -y);
-				context.lineTo(sqrt3 * y, -y);
-				context.closePath();
-			  }
-			};
-
-			var c = -0.5;
-			var s = Math.sqrt(3) / 2;
-			var k = 1 / Math.sqrt(12);
-			var a = (k / 2 + 1) * 3;
-
-			var wye = {
-			  draw: function(context, size) {
-				var r = Math.sqrt(size / a),
-					x0 = r / 2,
-					y0 = r * k,
-					x1 = x0,
-					y1 = r * k + r,
-					x2 = -x1,
-					y2 = y1;
-				context.moveTo(x0, y0);
-				context.lineTo(x1, y1);
-				context.lineTo(x2, y2);
-				context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
-				context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
-				context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
-				context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
-				context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
-				context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
-				context.closePath();
-			  }
-			};
-
-			var symbols = [
-			  circle,
-			  cross$1,
-			  diamond,
-			  square,
-			  star,
-			  triangle,
-			  wye
-			];
-
-			var symbol = function() {
-			  var type = constant$2(circle),
-				  size = constant$2(64),
-				  context = null;
-
-			  function symbol() {
-				var buffer;
-				if (!context) context = buffer = path();
-				type.apply(this, arguments).draw(context, +size.apply(this, arguments));
-				if (buffer) return context = null, buffer + "" || null;
-			  }
-
-			  symbol.type = function(_) {
-				return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type;
-			  };
-
-			  symbol.size = function(_) {
-				return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size;
-			  };
-
-			  symbol.context = function(_) {
-				return arguments.length ? (context = _ == null ? null : _, symbol) : context;
-			  };
-
-			  return symbol;
-			};
-
-			var noop = function() {};
-
-			function point(that, x, y) {
-			  that._context.bezierCurveTo(
-				(2 * that._x0 + that._x1) / 3,
-				(2 * that._y0 + that._y1) / 3,
-				(that._x0 + 2 * that._x1) / 3,
-				(that._y0 + 2 * that._y1) / 3,
-				(that._x0 + 4 * that._x1 + x) / 6,
-				(that._y0 + 4 * that._y1 + y) / 6
-			  );
-			}
-
-			function Basis(context) {
-			  this._context = context;
-			}
-
-			Basis.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 =
-				this._y0 = this._y1 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 3: point(this, this._x1, this._y1); // proceed
-				  case 2: this._context.lineTo(this._x1, this._y1); break;
-				}
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
-				  default: point(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = x;
-				this._y0 = this._y1, this._y1 = y;
-			  }
-			};
-
-			var basis = function(context) {
-			  return new Basis(context);
-			};
-
-			function BasisClosed(context) {
-			  this._context = context;
-			}
-
-			BasisClosed.prototype = {
-			  areaStart: noop,
-			  areaEnd: noop,
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
-				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 1: {
-					this._context.moveTo(this._x2, this._y2);
-					this._context.closePath();
-					break;
-				  }
-				  case 2: {
-					this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
-					this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
-					this._context.closePath();
-					break;
-				  }
-				  case 3: {
-					this.point(this._x2, this._y2);
-					this.point(this._x3, this._y3);
-					this.point(this._x4, this._y4);
-					break;
-				  }
-				}
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
-				  case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
-				  case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
-				  default: point(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = x;
-				this._y0 = this._y1, this._y1 = y;
-			  }
-			};
-
-			var basisClosed = function(context) {
-			  return new BasisClosed(context);
-			};
-
-			function BasisOpen(context) {
-			  this._context = context;
-			}
-
-			BasisOpen.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 =
-				this._y0 = this._y1 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
-				  case 3: this._point = 4; // proceed
-				  default: point(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = x;
-				this._y0 = this._y1, this._y1 = y;
-			  }
-			};
-
-			var basisOpen = function(context) {
-			  return new BasisOpen(context);
-			};
-
-			function Bundle(context, beta) {
-			  this._basis = new Basis(context);
-			  this._beta = beta;
-			}
-
-			Bundle.prototype = {
-			  lineStart: function() {
-				this._x = [];
-				this._y = [];
-				this._basis.lineStart();
-			  },
-			  lineEnd: function() {
-				var x = this._x,
-					y = this._y,
-					j = x.length - 1;
-
-				if (j > 0) {
-				  var x0 = x[0],
-					  y0 = y[0],
-					  dx = x[j] - x0,
-					  dy = y[j] - y0,
-					  i = -1,
-					  t;
-
-				  while (++i <= j) {
-					t = i / j;
-					this._basis.point(
-					  this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
-					  this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
-					);
-				  }
-				}
-
-				this._x = this._y = null;
-				this._basis.lineEnd();
-			  },
-			  point: function(x, y) {
-				this._x.push(+x);
-				this._y.push(+y);
-			  }
-			};
-
-			var bundle = (function custom(beta) {
-
-			  function bundle(context) {
-				return beta === 1 ? new Basis(context) : new Bundle(context, beta);
-			  }
-
-			  bundle.beta = function(beta) {
-				return custom(+beta);
-			  };
-
-			  return bundle;
-			})(0.85);
-
-			function point$1(that, x, y) {
-			  that._context.bezierCurveTo(
-				that._x1 + that._k * (that._x2 - that._x0),
-				that._y1 + that._k * (that._y2 - that._y0),
-				that._x2 + that._k * (that._x1 - x),
-				that._y2 + that._k * (that._y1 - y),
-				that._x2,
-				that._y2
-			  );
-			}
-
-			function Cardinal(context, tension) {
-			  this._context = context;
-			  this._k = (1 - tension) / 6;
-			}
-
-			Cardinal.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 =
-				this._y0 = this._y1 = this._y2 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 2: this._context.lineTo(this._x2, this._y2); break;
-				  case 3: point$1(this, this._x1, this._y1); break;
-				}
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
-				  case 2: this._point = 3; // proceed
-				  default: point$1(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var cardinal = (function custom(tension) {
-
-			  function cardinal(context) {
-				return new Cardinal(context, tension);
-			  }
-
-			  cardinal.tension = function(tension) {
-				return custom(+tension);
-			  };
-
-			  return cardinal;
-			})(0);
-
-			function CardinalClosed(context, tension) {
-			  this._context = context;
-			  this._k = (1 - tension) / 6;
-			}
-
-			CardinalClosed.prototype = {
-			  areaStart: noop,
-			  areaEnd: noop,
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 1: {
-					this._context.moveTo(this._x3, this._y3);
-					this._context.closePath();
-					break;
-				  }
-				  case 2: {
-					this._context.lineTo(this._x3, this._y3);
-					this._context.closePath();
-					break;
-				  }
-				  case 3: {
-					this.point(this._x3, this._y3);
-					this.point(this._x4, this._y4);
-					this.point(this._x5, this._y5);
-					break;
-				  }
-				}
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-				  case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-				  case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-				  default: point$1(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var cardinalClosed = (function custom(tension) {
-
-			  function cardinal(context) {
-				return new CardinalClosed(context, tension);
-			  }
-
-			  cardinal.tension = function(tension) {
-				return custom(+tension);
-			  };
-
-			  return cardinal;
-			})(0);
-
-			function CardinalOpen(context, tension) {
-			  this._context = context;
-			  this._k = (1 - tension) / 6;
-			}
-
-			CardinalOpen.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 =
-				this._y0 = this._y1 = this._y2 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-				  case 3: this._point = 4; // proceed
-				  default: point$1(this, x, y); break;
-				}
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var cardinalOpen = (function custom(tension) {
-
-			  function cardinal(context) {
-				return new CardinalOpen(context, tension);
-			  }
-
-			  cardinal.tension = function(tension) {
-				return custom(+tension);
-			  };
-
-			  return cardinal;
-			})(0);
-
-			function point$2(that, x, y) {
-			  var x1 = that._x1,
-				  y1 = that._y1,
-				  x2 = that._x2,
-				  y2 = that._y2;
-
-			  if (that._l01_a > epsilon$1) {
-				var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
-					n = 3 * that._l01_a * (that._l01_a + that._l12_a);
-				x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
-				y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
-			  }
-
-			  if (that._l23_a > epsilon$1) {
-				var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
-					m = 3 * that._l23_a * (that._l23_a + that._l12_a);
-				x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
-				y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
-			  }
-
-			  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
-			}
-
-			function CatmullRom(context, alpha) {
-			  this._context = context;
-			  this._alpha = alpha;
-			}
-
-			CatmullRom.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 =
-				this._y0 = this._y1 = this._y2 = NaN;
-				this._l01_a = this._l12_a = this._l23_a =
-				this._l01_2a = this._l12_2a = this._l23_2a =
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 2: this._context.lineTo(this._x2, this._y2); break;
-				  case 3: this.point(this._x2, this._y2); break;
-				}
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-
-				if (this._point) {
-				  var x23 = this._x2 - x,
-					  y23 = this._y2 - y;
-				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-				}
-
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; // proceed
-				  default: point$2(this, x, y); break;
-				}
-
-				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var catmullRom = (function custom(alpha) {
-
-			  function catmullRom(context) {
-				return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
-			  }
-
-			  catmullRom.alpha = function(alpha) {
-				return custom(+alpha);
-			  };
-
-			  return catmullRom;
-			})(0.5);
-
-			function CatmullRomClosed(context, alpha) {
-			  this._context = context;
-			  this._alpha = alpha;
-			}
-
-			CatmullRomClosed.prototype = {
-			  areaStart: noop,
-			  areaEnd: noop,
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-				this._l01_a = this._l12_a = this._l23_a =
-				this._l01_2a = this._l12_2a = this._l23_2a =
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 1: {
-					this._context.moveTo(this._x3, this._y3);
-					this._context.closePath();
-					break;
-				  }
-				  case 2: {
-					this._context.lineTo(this._x3, this._y3);
-					this._context.closePath();
-					break;
-				  }
-				  case 3: {
-					this.point(this._x3, this._y3);
-					this.point(this._x4, this._y4);
-					this.point(this._x5, this._y5);
-					break;
-				  }
-				}
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-
-				if (this._point) {
-				  var x23 = this._x2 - x,
-					  y23 = this._y2 - y;
-				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-				}
-
-				switch (this._point) {
-				  case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-				  case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-				  case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-				  default: point$2(this, x, y); break;
-				}
-
-				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var catmullRomClosed = (function custom(alpha) {
-
-			  function catmullRom(context) {
-				return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
-			  }
-
-			  catmullRom.alpha = function(alpha) {
-				return custom(+alpha);
-			  };
-
-			  return catmullRom;
-			})(0.5);
-
-			function CatmullRomOpen(context, alpha) {
-			  this._context = context;
-			  this._alpha = alpha;
-			}
-
-			CatmullRomOpen.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 = this._x2 =
-				this._y0 = this._y1 = this._y2 = NaN;
-				this._l01_a = this._l12_a = this._l23_a =
-				this._l01_2a = this._l12_2a = this._l23_2a =
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-
-				if (this._point) {
-				  var x23 = this._x2 - x,
-					  y23 = this._y2 - y;
-				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-				}
-
-				switch (this._point) {
-				  case 0: this._point = 1; break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-				  case 3: this._point = 4; // proceed
-				  default: point$2(this, x, y); break;
-				}
-
-				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-			  }
-			};
-
-			var catmullRomOpen = (function custom(alpha) {
-
-			  function catmullRom(context) {
-				return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
-			  }
-
-			  catmullRom.alpha = function(alpha) {
-				return custom(+alpha);
-			  };
-
-			  return catmullRom;
-			})(0.5);
-
-			function LinearClosed(context) {
-			  this._context = context;
-			}
-
-			LinearClosed.prototype = {
-			  areaStart: noop,
-			  areaEnd: noop,
-			  lineStart: function() {
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._point) this._context.closePath();
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				if (this._point) this._context.lineTo(x, y);
-				else this._point = 1, this._context.moveTo(x, y);
-			  }
-			};
-
-			var linearClosed = function(context) {
-			  return new LinearClosed(context);
-			};
-
-			function sign(x) {
-			  return x < 0 ? -1 : 1;
-			}
-
-			// Calculate the slopes of the tangents (Hermite-type interpolation) based on
-			// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
-			// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
-			// NOV(II), P. 443, 1990.
-			function slope3(that, x2, y2) {
-			  var h0 = that._x1 - that._x0,
-				  h1 = x2 - that._x1,
-				  s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
-				  s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
-				  p = (s0 * h1 + s1 * h0) / (h0 + h1);
-			  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
-			}
-
-			// Calculate a one-sided slope.
-			function slope2(that, t) {
-			  var h = that._x1 - that._x0;
-			  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
-			}
-
-			// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
-			// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
-			// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
-			function point$3(that, t0, t1) {
-			  var x0 = that._x0,
-				  y0 = that._y0,
-				  x1 = that._x1,
-				  y1 = that._y1,
-				  dx = (x1 - x0) / 3;
-			  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
-			}
-
-			function MonotoneX(context) {
-			  this._context = context;
-			}
-
-			MonotoneX.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x0 = this._x1 =
-				this._y0 = this._y1 =
-				this._t0 = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				switch (this._point) {
-				  case 2: this._context.lineTo(this._x1, this._y1); break;
-				  case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
-				}
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				var t1 = NaN;
-
-				x = +x, y = +y;
-				if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; break;
-				  case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
-				  default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
-				}
-
-				this._x0 = this._x1, this._x1 = x;
-				this._y0 = this._y1, this._y1 = y;
-				this._t0 = t1;
-			  }
-			};
-
-			function MonotoneY(context) {
-			  this._context = new ReflectContext(context);
-			}
-
-			(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
-			  MonotoneX.prototype.point.call(this, y, x);
-			};
-
-			function ReflectContext(context) {
-			  this._context = context;
-			}
-
-			ReflectContext.prototype = {
-			  moveTo: function(x, y) { this._context.moveTo(y, x); },
-			  closePath: function() { this._context.closePath(); },
-			  lineTo: function(x, y) { this._context.lineTo(y, x); },
-			  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
-			};
-
-			function monotoneX(context) {
-			  return new MonotoneX(context);
-			}
-
-			function monotoneY(context) {
-			  return new MonotoneY(context);
-			}
-
-			function Natural(context) {
-			  this._context = context;
-			}
-
-			Natural.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x = [];
-				this._y = [];
-			  },
-			  lineEnd: function() {
-				var x = this._x,
-					y = this._y,
-					n = x.length;
-
-				if (n) {
-				  this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
-				  if (n === 2) {
-					this._context.lineTo(x[1], y[1]);
-				  } else {
-					var px = controlPoints(x),
-						py = controlPoints(y);
-					for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
-					  this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
-					}
-				  }
-				}
-
-				if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
-				this._line = 1 - this._line;
-				this._x = this._y = null;
-			  },
-			  point: function(x, y) {
-				this._x.push(+x);
-				this._y.push(+y);
-			  }
-			};
-
-			// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
-			function controlPoints(x) {
-			  var i,
-				  n = x.length - 1,
-				  m,
-				  a = new Array(n),
-				  b = new Array(n),
-				  r = new Array(n);
-			  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
-			  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
-			  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
-			  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
-			  a[n - 1] = r[n - 1] / b[n - 1];
-			  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
-			  b[n - 1] = (x[n] + a[n - 1]) / 2;
-			  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
-			  return [a, b];
-			}
-
-			var natural = function(context) {
-			  return new Natural(context);
-			};
-
-			function Step(context, t) {
-			  this._context = context;
-			  this._t = t;
-			}
-
-			Step.prototype = {
-			  areaStart: function() {
-				this._line = 0;
-			  },
-			  areaEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._x = this._y = NaN;
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
-				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-				if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
-			  },
-			  point: function(x, y) {
-				x = +x, y = +y;
-				switch (this._point) {
-				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-				  case 1: this._point = 2; // proceed
-				  default: {
-					if (this._t <= 0) {
-					  this._context.lineTo(this._x, y);
-					  this._context.lineTo(x, y);
-					} else {
-					  var x1 = this._x * (1 - this._t) + x * this._t;
-					  this._context.lineTo(x1, this._y);
-					  this._context.lineTo(x1, y);
-					}
-					break;
-				  }
-				}
-				this._x = x, this._y = y;
-			  }
-			};
-
-			var step = function(context) {
-			  return new Step(context, 0.5);
-			};
-
-			function stepBefore(context) {
-			  return new Step(context, 0);
-			}
-
-			function stepAfter(context) {
-			  return new Step(context, 1);
-			}
-
-			var slice$2 = Array.prototype.slice;
-
-			var none = function(series, order) {
-			  if (!((n = series.length) > 1)) return;
-			  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
-				s0 = s1, s1 = series[order[i]];
-				for (var j = 0; j < m; ++j) {
-				  s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
-				}
-			  }
-			};
-
-			var none$1 = function(series) {
-			  var n = series.length, o = new Array(n);
-			  while (--n >= 0) o[n] = n;
-			  return o;
-			};
-
-			function stackValue(d, key) {
-			  return d[key];
-			}
-
-			var stack = function() {
-			  var keys = constant$2([]),
-				  order = none$1,
-				  offset = none,
-				  value = stackValue;
-
-			  function stack(data) {
-				var kz = keys.apply(this, arguments),
-					i,
-					m = data.length,
-					n = kz.length,
-					sz = new Array(n),
-					oz;
-
-				for (i = 0; i < n; ++i) {
-				  for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
-					si[j] = sij = [0, +value(data[j], ki, j, data)];
-					sij.data = data[j];
-				  }
-				  si.key = ki;
-				}
-
-				for (i = 0, oz = order(sz); i < n; ++i) {
-				  sz[oz[i]].index = i;
-				}
-
-				offset(sz, oz);
-				return sz;
-			  }
-
-			  stack.keys = function(_) {
-				return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys;
-			  };
-
-			  stack.value = function(_) {
-				return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value;
-			  };
-
-			  stack.order = function(_) {
-				return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order;
-			  };
-
-			  stack.offset = function(_) {
-				return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
-			  };
-
-			  return stack;
-			};
-
-			var expand = function(series, order) {
-			  if (!((n = series.length) > 0)) return;
-			  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
-				for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
-				if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
-			  }
-			  none(series, order);
-			};
-
-			var silhouette = function(series, order) {
-			  if (!((n = series.length) > 0)) return;
-			  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
-				for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
-				s0[j][1] += s0[j][0] = -y / 2;
-			  }
-			  none(series, order);
-			};
-
-			var wiggle = function(series, order) {
-			  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
-			  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
-				for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
-				  var si = series[order[i]],
-					  sij0 = si[j][1] || 0,
-					  sij1 = si[j - 1][1] || 0,
-					  s3 = (sij0 - sij1) / 2;
-				  for (var k = 0; k < i; ++k) {
-					var sk = series[order[k]],
-						skj0 = sk[j][1] || 0,
-						skj1 = sk[j - 1][1] || 0;
-					s3 += skj0 - skj1;
-				  }
-				  s1 += sij0, s2 += s3 * sij0;
-				}
-				s0[j - 1][1] += s0[j - 1][0] = y;
-				if (s1) y -= s2 / s1;
-			  }
-			  s0[j - 1][1] += s0[j - 1][0] = y;
-			  none(series, order);
-			};
-
-			var ascending$1 = function(series) {
-			  var sums = series.map(sum$1);
-			  return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
-			};
-
-			function sum$1(series) {
-			  var s = 0, i = -1, n = series.length, v;
-			  while (++i < n) if (v = +series[i][1]) s += v;
-			  return s;
-			}
-
-			var descending$2 = function(series) {
-			  return ascending$1(series).reverse();
-			};
-
-			var insideOut = function(series) {
-			  var n = series.length,
-				  i,
-				  j,
-				  sums = series.map(sum$1),
-				  order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
-				  top = 0,
-				  bottom = 0,
-				  tops = [],
-				  bottoms = [];
-
-			  for (i = 0; i < n; ++i) {
-				j = order[i];
-				if (top < bottom) {
-				  top += sums[j];
-				  tops.push(j);
-				} else {
-				  bottom += sums[j];
-				  bottoms.push(j);
-				}
-			  }
-
-			  return bottoms.reverse().concat(tops);
-			};
-
-			var reverse = function(series) {
-			  return none$1(series).reverse();
-			};
-
-			var define = function(constructor, factory, prototype) {
-			  constructor.prototype = factory.prototype = prototype;
-			  prototype.constructor = constructor;
-			};
-
-			function extend(parent, definition) {
-			  var prototype = Object.create(parent.prototype);
-			  for (var key in definition) prototype[key] = definition[key];
-			  return prototype;
-			}
-
-			function Color() {}
-
-			var darker = 0.7;
-			var brighter = 1 / darker;
-
-			var reHex3 = /^#([0-9a-f]{3})$/;
-			var reHex6 = /^#([0-9a-f]{6})$/;
-			var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
-			var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
-			var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-			var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-			var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
-			var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-
-			var named = {
-			  aliceblue: 0xf0f8ff,
-			  antiquewhite: 0xfaebd7,
-			  aqua: 0x00ffff,
-			  aquamarine: 0x7fffd4,
-			  azure: 0xf0ffff,
-			  beige: 0xf5f5dc,
-			  bisque: 0xffe4c4,
-			  black: 0x000000,
-			  blanchedalmond: 0xffebcd,
-			  blue: 0x0000ff,
-			  blueviolet: 0x8a2be2,
-			  brown: 0xa52a2a,
-			  burlywood: 0xdeb887,
-			  cadetblue: 0x5f9ea0,
-			  chartreuse: 0x7fff00,
-			  chocolate: 0xd2691e,
-			  coral: 0xff7f50,
-			  cornflowerblue: 0x6495ed,
-			  cornsilk: 0xfff8dc,
-			  crimson: 0xdc143c,
-			  cyan: 0x00ffff,
-			  darkblue: 0x00008b,
-			  darkcyan: 0x008b8b,
-			  darkgoldenrod: 0xb8860b,
-			  darkgray: 0xa9a9a9,
-			  darkgreen: 0x006400,
-			  darkgrey: 0xa9a9a9,
-			  darkkhaki: 0xbdb76b,
-			  darkmagenta: 0x8b008b,
-			  darkolivegreen: 0x556b2f,
-			  darkorange: 0xff8c00,
-			  darkorchid: 0x9932cc,
-			  darkred: 0x8b0000,
-			  darksalmon: 0xe9967a,
-			  darkseagreen: 0x8fbc8f,
-			  darkslateblue: 0x483d8b,
-			  darkslategray: 0x2f4f4f,
-			  darkslategrey: 0x2f4f4f,
-			  darkturquoise: 0x00ced1,
-			  darkviolet: 0x9400d3,
-			  deeppink: 0xff1493,
-			  deepskyblue: 0x00bfff,
-			  dimgray: 0x696969,
-			  dimgrey: 0x696969,
-			  dodgerblue: 0x1e90ff,
-			  firebrick: 0xb22222,
-			  floralwhite: 0xfffaf0,
-			  forestgreen: 0x228b22,
-			  fuchsia: 0xff00ff,
-			  gainsboro: 0xdcdcdc,
-			  ghostwhite: 0xf8f8ff,
-			  gold: 0xffd700,
-			  goldenrod: 0xdaa520,
-			  gray: 0x808080,
-			  green: 0x008000,
-			  greenyellow: 0xadff2f,
-			  grey: 0x808080,
-			  honeydew: 0xf0fff0,
-			  hotpink: 0xff69b4,
-			  indianred: 0xcd5c5c,
-			  indigo: 0x4b0082,
-			  ivory: 0xfffff0,
-			  khaki: 0xf0e68c,
-			  lavender: 0xe6e6fa,
-			  lavenderblush: 0xfff0f5,
-			  lawngreen: 0x7cfc00,
-			  lemonchiffon: 0xfffacd,
-			  lightblue: 0xadd8e6,
-			  lightcoral: 0xf08080,
-			  lightcyan: 0xe0ffff,
-			  lightgoldenrodyellow: 0xfafad2,
-			  lightgray: 0xd3d3d3,
-			  lightgreen: 0x90ee90,
-			  lightgrey: 0xd3d3d3,
-			  lightpink: 0xffb6c1,
-			  lightsalmon: 0xffa07a,
-			  lightseagreen: 0x20b2aa,
-			  lightskyblue: 0x87cefa,
-			  lightslategray: 0x778899,
-			  lightslategrey: 0x778899,
-			  lightsteelblue: 0xb0c4de,
-			  lightyellow: 0xffffe0,
-			  lime: 0x00ff00,
-			  limegreen: 0x32cd32,
-			  linen: 0xfaf0e6,
-			  magenta: 0xff00ff,
-			  maroon: 0x800000,
-			  mediumaquamarine: 0x66cdaa,
-			  mediumblue: 0x0000cd,
-			  mediumorchid: 0xba55d3,
-			  mediumpurple: 0x9370db,
-			  mediumseagreen: 0x3cb371,
-			  mediumslateblue: 0x7b68ee,
-			  mediumspringgreen: 0x00fa9a,
-			  mediumturquoise: 0x48d1cc,
-			  mediumvioletred: 0xc71585,
-			  midnightblue: 0x191970,
-			  mintcream: 0xf5fffa,
-			  mistyrose: 0xffe4e1,
-			  moccasin: 0xffe4b5,
-			  navajowhite: 0xffdead,
-			  navy: 0x000080,
-			  oldlace: 0xfdf5e6,
-			  olive: 0x808000,
-			  olivedrab: 0x6b8e23,
-			  orange: 0xffa500,
-			  orangered: 0xff4500,
-			  orchid: 0xda70d6,
-			  palegoldenrod: 0xeee8aa,
-			  palegreen: 0x98fb98,
-			  paleturquoise: 0xafeeee,
-			  palevioletred: 0xdb7093,
-			  papayawhip: 0xffefd5,
-			  peachpuff: 0xffdab9,
-			  peru: 0xcd853f,
-			  pink: 0xffc0cb,
-			  plum: 0xdda0dd,
-			  powderblue: 0xb0e0e6,
-			  purple: 0x800080,
-			  rebeccapurple: 0x663399,
-			  red: 0xff0000,
-			  rosybrown: 0xbc8f8f,
-			  royalblue: 0x4169e1,
-			  saddlebrown: 0x8b4513,
-			  salmon: 0xfa8072,
-			  sandybrown: 0xf4a460,
-			  seagreen: 0x2e8b57,
-			  seashell: 0xfff5ee,
-			  sienna: 0xa0522d,
-			  silver: 0xc0c0c0,
-			  skyblue: 0x87ceeb,
-			  slateblue: 0x6a5acd,
-			  slategray: 0x708090,
-			  slategrey: 0x708090,
-			  snow: 0xfffafa,
-			  springgreen: 0x00ff7f,
-			  steelblue: 0x4682b4,
-			  tan: 0xd2b48c,
-			  teal: 0x008080,
-			  thistle: 0xd8bfd8,
-			  tomato: 0xff6347,
-			  turquoise: 0x40e0d0,
-			  violet: 0xee82ee,
-			  wheat: 0xf5deb3,
-			  white: 0xffffff,
-			  whitesmoke: 0xf5f5f5,
-			  yellow: 0xffff00,
-			  yellowgreen: 0x9acd32
-			};
-
-			define(Color, color, {
-			  displayable: function() {
-				return this.rgb().displayable();
-			  },
-			  toString: function() {
-				return this.rgb() + "";
-			  }
-			});
-
-			function color(format) {
-			  var m;
-			  format = (format + "").trim().toLowerCase();
-			  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
-				  : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
-				  : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
-				  : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
-				  : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
-				  : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
-				  : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
-				  : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
-				  : named.hasOwnProperty(format) ? rgbn(named[format])
-				  : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
-				  : null;
-			}
-
-			function rgbn(n) {
-			  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
-			}
-
-			function rgba(r, g, b, a) {
-			  if (a <= 0) r = g = b = NaN;
-			  return new Rgb(r, g, b, a);
-			}
-
-			function rgbConvert(o) {
-			  if (!(o instanceof Color)) o = color(o);
-			  if (!o) return new Rgb;
-			  o = o.rgb();
-			  return new Rgb(o.r, o.g, o.b, o.opacity);
-			}
-
-			function rgb(r, g, b, opacity) {
-			  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
-			}
-
-			function Rgb(r, g, b, opacity) {
-			  this.r = +r;
-			  this.g = +g;
-			  this.b = +b;
-			  this.opacity = +opacity;
-			}
-
-			define(Rgb, rgb, extend(Color, {
-			  brighter: function(k) {
-				k = k == null ? brighter : Math.pow(brighter, k);
-				return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-			  },
-			  darker: function(k) {
-				k = k == null ? darker : Math.pow(darker, k);
-				return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-			  },
-			  rgb: function() {
-				return this;
-			  },
-			  displayable: function() {
-				return (0 <= this.r && this.r <= 255)
-					&& (0 <= this.g && this.g <= 255)
-					&& (0 <= this.b && this.b <= 255)
-					&& (0 <= this.opacity && this.opacity <= 1);
-			  },
-			  toString: function() {
-				var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
-				return (a === 1 ? "rgb(" : "rgba(")
-					+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
-					+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
-					+ Math.max(0, Math.min(255, Math.round(this.b) || 0))
-					+ (a === 1 ? ")" : ", " + a + ")");
-			  }
-			}));
-
-			function hsla(h, s, l, a) {
-			  if (a <= 0) h = s = l = NaN;
-			  else if (l <= 0 || l >= 1) h = s = NaN;
-			  else if (s <= 0) h = NaN;
-			  return new Hsl(h, s, l, a);
-			}
-
-			function hslConvert(o) {
-			  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
-			  if (!(o instanceof Color)) o = color(o);
-			  if (!o) return new Hsl;
-			  if (o instanceof Hsl) return o;
-			  o = o.rgb();
-			  var r = o.r / 255,
-				  g = o.g / 255,
-				  b = o.b / 255,
-				  min = Math.min(r, g, b),
-				  max = Math.max(r, g, b),
-				  h = NaN,
-				  s = max - min,
-				  l = (max + min) / 2;
-			  if (s) {
-				if (r === max) h = (g - b) / s + (g < b) * 6;
-				else if (g === max) h = (b - r) / s + 2;
-				else h = (r - g) / s + 4;
-				s /= l < 0.5 ? max + min : 2 - max - min;
-				h *= 60;
-			  } else {
-				s = l > 0 && l < 1 ? 0 : h;
-			  }
-			  return new Hsl(h, s, l, o.opacity);
-			}
-
-			function hsl(h, s, l, opacity) {
-			  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
-			}
-
-			function Hsl(h, s, l, opacity) {
-			  this.h = +h;
-			  this.s = +s;
-			  this.l = +l;
-			  this.opacity = +opacity;
-			}
-
-			define(Hsl, hsl, extend(Color, {
-			  brighter: function(k) {
-				k = k == null ? brighter : Math.pow(brighter, k);
-				return new Hsl(this.h, this.s, this.l * k, this.opacity);
-			  },
-			  darker: function(k) {
-				k = k == null ? darker : Math.pow(darker, k);
-				return new Hsl(this.h, this.s, this.l * k, this.opacity);
-			  },
-			  rgb: function() {
-				var h = this.h % 360 + (this.h < 0) * 360,
-					s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
-					l = this.l,
-					m2 = l + (l < 0.5 ? l : 1 - l) * s,
-					m1 = 2 * l - m2;
-				return new Rgb(
-				  hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
-				  hsl2rgb(h, m1, m2),
-				  hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
-				  this.opacity
-				);
-			  },
-			  displayable: function() {
-				return (0 <= this.s && this.s <= 1 || isNaN(this.s))
-					&& (0 <= this.l && this.l <= 1)
-					&& (0 <= this.opacity && this.opacity <= 1);
-			  }
-			}));
-
-			/* From FvD 13.37, CSS Color Module Level 3 */
-			function hsl2rgb(h, m1, m2) {
-			  return (h < 60 ? m1 + (m2 - m1) * h / 60
-				  : h < 180 ? m2
-				  : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
-				  : m1) * 255;
-			}
-
-			var deg2rad = Math.PI / 180;
-			var rad2deg = 180 / Math.PI;
-
-			var Kn = 18;
-			var Xn = 0.950470;
-			var Yn = 1;
-			var Zn = 1.088830;
-			var t0 = 4 / 29;
-			var t1 = 6 / 29;
-			var t2 = 3 * t1 * t1;
-			var t3 = t1 * t1 * t1;
-
-			function labConvert(o) {
-			  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
-			  if (o instanceof Hcl) {
-				var h = o.h * deg2rad;
-				return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
-			  }
-			  if (!(o instanceof Rgb)) o = rgbConvert(o);
-			  var b = rgb2xyz(o.r),
-				  a = rgb2xyz(o.g),
-				  l = rgb2xyz(o.b),
-				  x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
-				  y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
-				  z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
-			  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
-			}
-
-			function lab(l, a, b, opacity) {
-			  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
-			}
-
-			function Lab(l, a, b, opacity) {
-			  this.l = +l;
-			  this.a = +a;
-			  this.b = +b;
-			  this.opacity = +opacity;
-			}
-
-			define(Lab, lab, extend(Color, {
-			  brighter: function(k) {
-				return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
-			  },
-			  darker: function(k) {
-				return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
-			  },
-			  rgb: function() {
-				var y = (this.l + 16) / 116,
-					x = isNaN(this.a) ? y : y + this.a / 500,
-					z = isNaN(this.b) ? y : y - this.b / 200;
-				y = Yn * lab2xyz(y);
-				x = Xn * lab2xyz(x);
-				z = Zn * lab2xyz(z);
-				return new Rgb(
-				  xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
-				  xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
-				  xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
-				  this.opacity
-				);
-			  }
-			}));
-
-			function xyz2lab(t) {
-			  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
-			}
-
-			function lab2xyz(t) {
-			  return t > t1 ? t * t * t : t2 * (t - t0);
-			}
-
-			function xyz2rgb(x) {
-			  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
-			}
-
-			function rgb2xyz(x) {
-			  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
-			}
-
-			function hclConvert(o) {
-			  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
-			  if (!(o instanceof Lab)) o = labConvert(o);
-			  var h = Math.atan2(o.b, o.a) * rad2deg;
-			  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
-			}
-
-			function hcl(h, c, l, opacity) {
-			  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
-			}
-
-			function Hcl(h, c, l, opacity) {
-			  this.h = +h;
-			  this.c = +c;
-			  this.l = +l;
-			  this.opacity = +opacity;
-			}
-
-			define(Hcl, hcl, extend(Color, {
-			  brighter: function(k) {
-				return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
-			  },
-			  darker: function(k) {
-				return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
-			  },
-			  rgb: function() {
-				return labConvert(this).rgb();
-			  }
-			}));
-
-			var A = -0.14861;
-			var B = +1.78277;
-			var C = -0.29227;
-			var D = -0.90649;
-			var E = +1.97294;
-			var ED = E * D;
-			var EB = E * B;
-			var BC_DA = B * C - D * A;
-
-			function cubehelixConvert(o) {
-			  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
-			  if (!(o instanceof Rgb)) o = rgbConvert(o);
-			  var r = o.r / 255,
-				  g = o.g / 255,
-				  b = o.b / 255,
-				  l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
-				  bl = b - l,
-				  k = (E * (g - l) - C * bl) / D,
-				  s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
-				  h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
-			  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
-			}
-
-			function cubehelix(h, s, l, opacity) {
-			  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
-			}
-
-			function Cubehelix(h, s, l, opacity) {
-			  this.h = +h;
-			  this.s = +s;
-			  this.l = +l;
-			  this.opacity = +opacity;
-			}
-
-			define(Cubehelix, cubehelix, extend(Color, {
-			  brighter: function(k) {
-				k = k == null ? brighter : Math.pow(brighter, k);
-				return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
-			  },
-			  darker: function(k) {
-				k = k == null ? darker : Math.pow(darker, k);
-				return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
-			  },
-			  rgb: function() {
-				var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
-					l = +this.l,
-					a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
-					cosh = Math.cos(h),
-					sinh = Math.sin(h);
-				return new Rgb(
-				  255 * (l + a * (A * cosh + B * sinh)),
-				  255 * (l + a * (C * cosh + D * sinh)),
-				  255 * (l + a * (E * cosh)),
-				  this.opacity
-				);
-			  }
-			}));
-
-			function basis$1(t1, v0, v1, v2, v3) {
-			  var t2 = t1 * t1, t3 = t2 * t1;
-			  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
-				  + (4 - 6 * t2 + 3 * t3) * v1
-				  + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
-				  + t3 * v3) / 6;
-			}
-
-			var basis$2 = function(values) {
-			  var n = values.length - 1;
-			  return function(t) {
-				var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
-					v1 = values[i],
-					v2 = values[i + 1],
-					v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
-					v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
-				return basis$1((t - i / n) * n, v0, v1, v2, v3);
-			  };
-			};
-
-			var basisClosed$1 = function(values) {
-			  var n = values.length;
-			  return function(t) {
-				var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
-					v0 = values[(i + n - 1) % n],
-					v1 = values[i % n],
-					v2 = values[(i + 1) % n],
-					v3 = values[(i + 2) % n];
-				return basis$1((t - i / n) * n, v0, v1, v2, v3);
-			  };
-			};
-
-			var constant$3 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function linear$1(a, d) {
-			  return function(t) {
-				return a + t * d;
-			  };
-			}
-
-			function exponential$1(a, b, y) {
-			  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
-				return Math.pow(a + t * b, y);
-			  };
-			}
-
-			function hue(a, b) {
-			  var d = b - a;
-			  return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
-			}
-
-			function gamma(y) {
-			  return (y = +y) === 1 ? nogamma : function(a, b) {
-				return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a);
-			  };
-			}
-
-			function nogamma(a, b) {
-			  var d = b - a;
-			  return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a);
-			}
-
-			var interpolateRgb = (function rgbGamma(y) {
-			  var color$$1 = gamma(y);
-
-			  function rgb$$1(start, end) {
-				var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
-					g = color$$1(start.g, end.g),
-					b = color$$1(start.b, end.b),
-					opacity = color$$1(start.opacity, end.opacity);
-				return function(t) {
-				  start.r = r(t);
-				  start.g = g(t);
-				  start.b = b(t);
-				  start.opacity = opacity(t);
-				  return start + "";
-				};
-			  }
-
-			  rgb$$1.gamma = rgbGamma;
-
-			  return rgb$$1;
-			})(1);
-
-			function rgbSpline(spline) {
-			  return function(colors) {
-				var n = colors.length,
-					r = new Array(n),
-					g = new Array(n),
-					b = new Array(n),
-					i, color$$1;
-				for (i = 0; i < n; ++i) {
-				  color$$1 = rgb(colors[i]);
-				  r[i] = color$$1.r || 0;
-				  g[i] = color$$1.g || 0;
-				  b[i] = color$$1.b || 0;
-				}
-				r = spline(r);
-				g = spline(g);
-				b = spline(b);
-				color$$1.opacity = 1;
-				return function(t) {
-				  color$$1.r = r(t);
-				  color$$1.g = g(t);
-				  color$$1.b = b(t);
-				  return color$$1 + "";
-				};
-			  };
-			}
-
-			var rgbBasis = rgbSpline(basis$2);
-			var rgbBasisClosed = rgbSpline(basisClosed$1);
-
-			var array$1 = function(a, b) {
-			  var nb = b ? b.length : 0,
-				  na = a ? Math.min(nb, a.length) : 0,
-				  x = new Array(nb),
-				  c = new Array(nb),
-				  i;
-
-			  for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
-			  for (; i < nb; ++i) c[i] = b[i];
-
-			  return function(t) {
-				for (i = 0; i < na; ++i) c[i] = x[i](t);
-				return c;
-			  };
-			};
-
-			var date = function(a, b) {
-			  var d = new Date;
-			  return a = +a, b -= a, function(t) {
-				return d.setTime(a + b * t), d;
-			  };
-			};
-
-			var interpolateNumber = function(a, b) {
-			  return a = +a, b -= a, function(t) {
-				return a + b * t;
-			  };
-			};
-
-			var object = function(a, b) {
-			  var i = {},
-				  c = {},
-				  k;
-
-			  if (a === null || typeof a !== "object") a = {};
-			  if (b === null || typeof b !== "object") b = {};
-
-			  for (k in b) {
-				if (k in a) {
-				  i[k] = interpolate(a[k], b[k]);
-				} else {
-				  c[k] = b[k];
-				}
-			  }
-
-			  return function(t) {
-				for (k in i) c[k] = i[k](t);
-				return c;
-			  };
-			};
-
-			var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
-			var reB = new RegExp(reA.source, "g");
-
-			function zero(b) {
-			  return function() {
-				return b;
-			  };
-			}
-
-			function one(b) {
-			  return function(t) {
-				return b(t) + "";
-			  };
-			}
-
-			var interpolateString = function(a, b) {
-			  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
-				  am, // current match in a
-				  bm, // current match in b
-				  bs, // string preceding current number in b, if any
-				  i = -1, // index in s
-				  s = [], // string constants and placeholders
-				  q = []; // number interpolators
-
-			  // Coerce inputs to strings.
-			  a = a + "", b = b + "";
-
-			  // Interpolate pairs of numbers in a & b.
-			  while ((am = reA.exec(a))
-				  && (bm = reB.exec(b))) {
-				if ((bs = bm.index) > bi) { // a string precedes the next number in b
-				  bs = b.slice(bi, bs);
-				  if (s[i]) s[i] += bs; // coalesce with previous string
-				  else s[++i] = bs;
-				}
-				if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
-				  if (s[i]) s[i] += bm; // coalesce with previous string
-				  else s[++i] = bm;
-				} else { // interpolate non-matching numbers
-				  s[++i] = null;
-				  q.push({i: i, x: interpolateNumber(am, bm)});
-				}
-				bi = reB.lastIndex;
-			  }
-
-			  // Add remains of b.
-			  if (bi < b.length) {
-				bs = b.slice(bi);
-				if (s[i]) s[i] += bs; // coalesce with previous string
-				else s[++i] = bs;
-			  }
-
-			  // Special optimization for only a single match.
-			  // Otherwise, interpolate each of the numbers and rejoin the string.
-			  return s.length < 2 ? (q[0]
-				  ? one(q[0].x)
-				  : zero(b))
-				  : (b = q.length, function(t) {
-					  for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
-					  return s.join("");
-					});
-			};
-
-			var interpolate = function(a, b) {
-			  var t = typeof b, c;
-			  return b == null || t === "boolean" ? constant$3(b)
-				  : (t === "number" ? interpolateNumber
-				  : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
-				  : b instanceof color ? interpolateRgb
-				  : b instanceof Date ? date
-				  : Array.isArray(b) ? array$1
-				  : isNaN(b) ? object
-				  : interpolateNumber)(a, b);
-			};
-
-			var interpolateRound = function(a, b) {
-			  return a = +a, b -= a, function(t) {
-				return Math.round(a + b * t);
-			  };
-			};
-
-			var degrees = 180 / Math.PI;
-
-			var identity$2 = {
-			  translateX: 0,
-			  translateY: 0,
-			  rotate: 0,
-			  skewX: 0,
-			  scaleX: 1,
-			  scaleY: 1
-			};
-
-			var decompose = function(a, b, c, d, e, f) {
-			  var scaleX, scaleY, skewX;
-			  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
-			  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
-			  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
-			  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
-			  return {
-				translateX: e,
-				translateY: f,
-				rotate: Math.atan2(b, a) * degrees,
-				skewX: Math.atan(skewX) * degrees,
-				scaleX: scaleX,
-				scaleY: scaleY
-			  };
-			};
-
-			var cssNode;
-			var cssRoot;
-			var cssView;
-			var svgNode;
-
-			function parseCss(value) {
-			  if (value === "none") return identity$2;
-			  if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
-			  cssNode.style.transform = value;
-			  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
-			  cssRoot.removeChild(cssNode);
-			  value = value.slice(7, -1).split(",");
-			  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
-			}
-
-			function parseSvg(value) {
-			  if (value == null) return identity$2;
-			  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
-			  svgNode.setAttribute("transform", value);
-			  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
-			  value = value.matrix;
-			  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
-			}
-
-			function interpolateTransform(parse, pxComma, pxParen, degParen) {
-
-			  function pop(s) {
-				return s.length ? s.pop() + " " : "";
-			  }
-
-			  function translate(xa, ya, xb, yb, s, q) {
-				if (xa !== xb || ya !== yb) {
-				  var i = s.push("translate(", null, pxComma, null, pxParen);
-				  q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
-				} else if (xb || yb) {
-				  s.push("translate(" + xb + pxComma + yb + pxParen);
-				}
-			  }
-
-			  function rotate(a, b, s, q) {
-				if (a !== b) {
-				  if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
-				  q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)});
-				} else if (b) {
-				  s.push(pop(s) + "rotate(" + b + degParen);
-				}
-			  }
-
-			  function skewX(a, b, s, q) {
-				if (a !== b) {
-				  q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)});
-				} else if (b) {
-				  s.push(pop(s) + "skewX(" + b + degParen);
-				}
-			  }
-
-			  function scale(xa, ya, xb, yb, s, q) {
-				if (xa !== xb || ya !== yb) {
-				  var i = s.push(pop(s) + "scale(", null, ",", null, ")");
-				  q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
-				} else if (xb !== 1 || yb !== 1) {
-				  s.push(pop(s) + "scale(" + xb + "," + yb + ")");
-				}
-			  }
-
-			  return function(a, b) {
-				var s = [], // string constants and placeholders
-					q = []; // number interpolators
-				a = parse(a), b = parse(b);
-				translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
-				rotate(a.rotate, b.rotate, s, q);
-				skewX(a.skewX, b.skewX, s, q);
-				scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
-				a = b = null; // gc
-				return function(t) {
-				  var i = -1, n = q.length, o;
-				  while (++i < n) s[(o = q[i]).i] = o.x(t);
-				  return s.join("");
-				};
-			  };
-			}
-
-			var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
-			var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
-
-			var rho = Math.SQRT2;
-			var rho2 = 2;
-			var rho4 = 4;
-			var epsilon2 = 1e-12;
-
-			function cosh(x) {
-			  return ((x = Math.exp(x)) + 1 / x) / 2;
-			}
-
-			function sinh(x) {
-			  return ((x = Math.exp(x)) - 1 / x) / 2;
-			}
-
-			function tanh(x) {
-			  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
-			}
-
-			// p0 = [ux0, uy0, w0]
-			// p1 = [ux1, uy1, w1]
-			var interpolateZoom = function(p0, p1) {
-			  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
-				  ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
-				  dx = ux1 - ux0,
-				  dy = uy1 - uy0,
-				  d2 = dx * dx + dy * dy,
-				  i,
-				  S;
-
-			  // Special case for u0 ≅ u1.
-			  if (d2 < epsilon2) {
-				S = Math.log(w1 / w0) / rho;
-				i = function(t) {
-				  return [
-					ux0 + t * dx,
-					uy0 + t * dy,
-					w0 * Math.exp(rho * t * S)
-				  ];
-				};
-			  }
-
-			  // General case.
-			  else {
-				var d1 = Math.sqrt(d2),
-					b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
-					b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
-					r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
-					r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
-				S = (r1 - r0) / rho;
-				i = function(t) {
-				  var s = t * S,
-					  coshr0 = cosh(r0),
-					  u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
-				  return [
-					ux0 + u * dx,
-					uy0 + u * dy,
-					w0 * coshr0 / cosh(rho * s + r0)
-				  ];
-				};
-			  }
-
-			  i.duration = S * 1000;
-
-			  return i;
-			};
-
-			function hsl$1(hue$$1) {
-			  return function(start, end) {
-				var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
-					s = nogamma(start.s, end.s),
-					l = nogamma(start.l, end.l),
-					opacity = nogamma(start.opacity, end.opacity);
-				return function(t) {
-				  start.h = h(t);
-				  start.s = s(t);
-				  start.l = l(t);
-				  start.opacity = opacity(t);
-				  return start + "";
-				};
-			  }
-			}
-
-			var hsl$2 = hsl$1(hue);
-			var hslLong = hsl$1(nogamma);
-
-			function lab$1(start, end) {
-			  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
-				  a = nogamma(start.a, end.a),
-				  b = nogamma(start.b, end.b),
-				  opacity = nogamma(start.opacity, end.opacity);
-			  return function(t) {
-				start.l = l(t);
-				start.a = a(t);
-				start.b = b(t);
-				start.opacity = opacity(t);
-				return start + "";
-			  };
-			}
-
-			function hcl$1(hue$$1) {
-			  return function(start, end) {
-				var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
-					c = nogamma(start.c, end.c),
-					l = nogamma(start.l, end.l),
-					opacity = nogamma(start.opacity, end.opacity);
-				return function(t) {
-				  start.h = h(t);
-				  start.c = c(t);
-				  start.l = l(t);
-				  start.opacity = opacity(t);
-				  return start + "";
-				};
-			  }
-			}
-
-			var hcl$2 = hcl$1(hue);
-			var hclLong = hcl$1(nogamma);
-
-			function cubehelix$1(hue$$1) {
-			  return (function cubehelixGamma(y) {
-				y = +y;
-
-				function cubehelix$$1(start, end) {
-				  var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
-					  s = nogamma(start.s, end.s),
-					  l = nogamma(start.l, end.l),
-					  opacity = nogamma(start.opacity, end.opacity);
-				  return function(t) {
-					start.h = h(t);
-					start.s = s(t);
-					start.l = l(Math.pow(t, y));
-					start.opacity = opacity(t);
-					return start + "";
-				  };
-				}
-
-				cubehelix$$1.gamma = cubehelixGamma;
-
-				return cubehelix$$1;
-			  })(1);
-			}
-
-			var cubehelix$2 = cubehelix$1(hue);
-			var cubehelixLong = cubehelix$1(nogamma);
-
-			var quantize = function(interpolator, n) {
-			  var samples = new Array(n);
-			  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
-			  return samples;
-			};
-
-			var noop$1 = {value: function() {}};
-
-			function dispatch() {
-			  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
-				if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
-				_[t] = [];
-			  }
-			  return new Dispatch(_);
-			}
-
-			function Dispatch(_) {
-			  this._ = _;
-			}
-
-			function parseTypenames(typenames, types) {
-			  return typenames.trim().split(/^|\s+/).map(function(t) {
-				var name = "", i = t.indexOf(".");
-				if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-				if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
-				return {type: t, name: name};
-			  });
-			}
-
-			Dispatch.prototype = dispatch.prototype = {
-			  constructor: Dispatch,
-			  on: function(typename, callback) {
-				var _ = this._,
-					T = parseTypenames(typename + "", _),
-					t,
-					i = -1,
-					n = T.length;
-
-				// If no callback was specified, return the callback of the given type and name.
-				if (arguments.length < 2) {
-				  while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
-				  return;
-				}
-
-				// If a type was specified, set the callback for the given type and name.
-				// Otherwise, if a null callback was specified, remove callbacks of the given name.
-				if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
-				while (++i < n) {
-				  if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);
-				  else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
-				}
-
-				return this;
-			  },
-			  copy: function() {
-				var copy = {}, _ = this._;
-				for (var t in _) copy[t] = _[t].slice();
-				return new Dispatch(copy);
-			  },
-			  call: function(type, that) {
-				if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
-				if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-				for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-			  },
-			  apply: function(type, that, args) {
-				if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-				for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-			  }
-			};
-
-			function get(type, name) {
-			  for (var i = 0, n = type.length, c; i < n; ++i) {
-				if ((c = type[i]).name === name) {
-				  return c.value;
-				}
-			  }
-			}
-
-			function set$2(type, name, callback) {
-			  for (var i = 0, n = type.length; i < n; ++i) {
-				if (type[i].name === name) {
-				  type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
-				  break;
-				}
-			  }
-			  if (callback != null) type.push({name: name, value: callback});
-			  return type;
-			}
-
-			function objectConverter(columns) {
-			  return new Function("d", "return {" + columns.map(function(name, i) {
-				return JSON.stringify(name) + ": d[" + i + "]";
-			  }).join(",") + "}");
-			}
-
-			function customConverter(columns, f) {
-			  var object = objectConverter(columns);
-			  return function(row, i) {
-				return f(object(row), i, columns);
-			  };
-			}
-
-			// Compute unique columns in order of discovery.
-			function inferColumns(rows) {
-			  var columnSet = Object.create(null),
-				  columns = [];
-
-			  rows.forEach(function(row) {
-				for (var column in row) {
-				  if (!(column in columnSet)) {
-					columns.push(columnSet[column] = column);
-				  }
-				}
-			  });
-
-			  return columns;
-			}
-
-			var dsv = function(delimiter) {
-			  var reFormat = new RegExp("[\"" + delimiter + "\n]"),
-				  delimiterCode = delimiter.charCodeAt(0);
-
-			  function parse(text, f) {
-				var convert, columns, rows = parseRows(text, function(row, i) {
-				  if (convert) return convert(row, i - 1);
-				  columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
-				});
-				rows.columns = columns;
-				return rows;
-			  }
-
-			  function parseRows(text, f) {
-				var EOL = {}, // sentinel value for end-of-line
-					EOF = {}, // sentinel value for end-of-file
-					rows = [], // output rows
-					N = text.length,
-					I = 0, // current character index
-					n = 0, // the current line number
-					t, // the current token
-					eol; // is the current token followed by EOL?
-
-				function token() {
-				  if (I >= N) return EOF; // special case: end of file
-				  if (eol) return eol = false, EOL; // special case: end of line
-
-				  // special case: quotes
-				  var j = I, c;
-				  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;
-					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.slice(j + 1, i).replace(/""/g, "\"");
-				  }
-
-				  // common case: find next delimiter or newline
-				  while (I < N) {
-					var k = 1;
-					c = text.charCodeAt(I++);
-					if (c === 10) eol = true; // \n
-					else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
-					else if (c !== delimiterCode) continue;
-					return text.slice(j, I - k);
-				  }
-
-				  // special case: last token before EOF
-				  return text.slice(j);
-				}
-
-				while ((t = token()) !== EOF) {
-				  var a = [];
-				  while (t !== EOL && t !== EOF) {
-					a.push(t);
-					t = token();
-				  }
-				  if (f && (a = f(a, n++)) == null) continue;
-				  rows.push(a);
-				}
-
-				return rows;
-			  }
-
-			  function format(rows, columns) {
-				if (columns == null) columns = inferColumns(rows);
-				return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
-				  return columns.map(function(column) {
-					return formatValue(row[column]);
-				  }).join(delimiter);
-				})).join("\n");
-			  }
-
-			  function formatRows(rows) {
-				return rows.map(formatRow).join("\n");
-			  }
-
-			  function formatRow(row) {
-				return row.map(formatValue).join(delimiter);
-			  }
-
-			  function formatValue(text) {
-				return text == null ? ""
-					: reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
-					: text;
-			  }
-
-			  return {
-				parse: parse,
-				parseRows: parseRows,
-				format: format,
-				formatRows: formatRows
-			  };
-			};
-
-			var csv = dsv(",");
-
-			var csvParse = csv.parse;
-			var csvParseRows = csv.parseRows;
-			var csvFormat = csv.format;
-			var csvFormatRows = csv.formatRows;
-
-			var tsv = dsv("\t");
-
-			var tsvParse = tsv.parse;
-			var tsvParseRows = tsv.parseRows;
-			var tsvFormat = tsv.format;
-			var tsvFormatRows = tsv.formatRows;
-
-			var request = function(url, callback) {
-			  var request,
-				  event = dispatch("beforesend", "progress", "load", "error"),
-				  mimeType,
-				  headers = map$1(),
-				  xhr = new XMLHttpRequest,
-				  user = null,
-				  password = null,
-				  response,
-				  responseType,
-				  timeout = 0;
-
-			  // If IE does not support CORS, use XDomainRequest.
-			  if (typeof XDomainRequest !== "undefined"
-				  && !("withCredentials" in xhr)
-				  && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
-
-			  "onload" in xhr
-				  ? xhr.onload = xhr.onerror = xhr.ontimeout = respond
-				  : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
-
-			  function respond(o) {
-				var status = xhr.status, result;
-				if (!status && hasResponse(xhr)
-					|| status >= 200 && status < 300
-					|| status === 304) {
-				  if (response) {
-					try {
-					  result = response.call(request, xhr);
-					} catch (e) {
-					  event.call("error", request, e);
-					  return;
-					}
-				  } else {
-					result = xhr;
-				  }
-				  event.call("load", request, result);
-				} else {
-				  event.call("error", request, o);
-				}
-			  }
-
-			  xhr.onprogress = function(e) {
-				event.call("progress", request, e);
-			  };
-
-			  request = {
-				header: function(name, value) {
-				  name = (name + "").toLowerCase();
-				  if (arguments.length < 2) return headers.get(name);
-				  if (value == null) headers.remove(name);
-				  else headers.set(name, value + "");
-				  return request;
-				},
-
-				// If mimeType is non-null and no Accept header is set, a default is used.
-				mimeType: function(value) {
-				  if (!arguments.length) return mimeType;
-				  mimeType = value == null ? null : value + "";
-				  return request;
-				},
-
-				// Specifies what type the response value should take;
-				// for instance, arraybuffer, blob, document, or text.
-				responseType: function(value) {
-				  if (!arguments.length) return responseType;
-				  responseType = value;
-				  return request;
-				},
-
-				timeout: function(value) {
-				  if (!arguments.length) return timeout;
-				  timeout = +value;
-				  return request;
-				},
-
-				user: function(value) {
-				  return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
-				},
-
-				password: function(value) {
-				  return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
-				},
-
-				// Specify how to convert the response content to a specific type;
-				// changes the callback value on "load" events.
-				response: function(value) {
-				  response = value;
-				  return request;
-				},
-
-				// Alias for send("GET", …).
-				get: function(data, callback) {
-				  return request.send("GET", data, callback);
-				},
-
-				// Alias for send("POST", …).
-				post: function(data, callback) {
-				  return request.send("POST", data, callback);
-				},
-
-				// If callback is non-null, it will be used for error and load events.
-				send: function(method, data, callback) {
-				  xhr.open(method, url, true, user, password);
-				  if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
-				  if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
-				  if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
-				  if (responseType != null) xhr.responseType = responseType;
-				  if (timeout > 0) xhr.timeout = timeout;
-				  if (callback == null && typeof data === "function") callback = data, data = null;
-				  if (callback != null && callback.length === 1) callback = fixCallback(callback);
-				  if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
-				  event.call("beforesend", request, xhr);
-				  xhr.send(data == null ? null : data);
-				  return request;
-				},
-
-				abort: function() {
-				  xhr.abort();
-				  return request;
-				},
-
-				on: function() {
-				  var value = event.on.apply(event, arguments);
-				  return value === event ? request : value;
-				}
-			  };
-
-			  if (callback != null) {
-				if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
-				return request.get(callback);
-			  }
-
-			  return request;
-			};
-
-			function fixCallback(callback) {
-			  return function(error, xhr) {
-				callback(error == null ? xhr : null);
-			  };
-			}
-
-			function hasResponse(xhr) {
-			  var type = xhr.responseType;
-			  return type && type !== "text"
-				  ? xhr.response // null on error
-				  : xhr.responseText; // "" on error
-			}
-
-			var type = function(defaultMimeType, response) {
-			  return function(url, callback) {
-				var r = request(url).mimeType(defaultMimeType).response(response);
-				if (callback != null) {
-				  if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
-				  return r.get(callback);
-				}
-				return r;
-			  };
-			};
-
-			var html = type("text/html", function(xhr) {
-			  return document.createRange().createContextualFragment(xhr.responseText);
-			});
-
-			var json = type("application/json", function(xhr) {
-			  return JSON.parse(xhr.responseText);
-			});
-
-			var text = type("text/plain", function(xhr) {
-			  return xhr.responseText;
-			});
-
-			var xml = type("application/xml", function(xhr) {
-			  var xml = xhr.responseXML;
-			  if (!xml) throw new Error("parse error");
-			  return xml;
-			});
-
-			var dsv$1 = function(defaultMimeType, parse) {
-			  return function(url, row, callback) {
-				if (arguments.length < 3) callback = row, row = null;
-				var r = request(url).mimeType(defaultMimeType);
-				r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
-				r.row(row);
-				return callback ? r.get(callback) : r;
-			  };
-			};
-
-			function responseOf(parse, row) {
-			  return function(request$$1) {
-				return parse(request$$1.responseText, row);
-			  };
-			}
-
-			var csv$1 = dsv$1("text/csv", csvParse);
-
-			var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
-
-			var frame = 0;
-			var timeout = 0;
-			var interval = 0;
-			var pokeDelay = 1000;
-			var taskHead;
-			var taskTail;
-			var clockLast = 0;
-			var clockNow = 0;
-			var clockSkew = 0;
-			var clock = typeof performance === "object" && performance.now ? performance : Date;
-			var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
-
-			function now() {
-			  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
-			}
-
-			function clearNow() {
-			  clockNow = 0;
-			}
-
-			function Timer() {
-			  this._call =
-			  this._time =
-			  this._next = null;
-			}
-
-			Timer.prototype = timer.prototype = {
-			  constructor: Timer,
-			  restart: function(callback, delay, time) {
-				if (typeof callback !== "function") throw new TypeError("callback is not a function");
-				time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
-				if (!this._next && taskTail !== this) {
-				  if (taskTail) taskTail._next = this;
-				  else taskHead = this;
-				  taskTail = this;
-				}
-				this._call = callback;
-				this._time = time;
-				sleep();
-			  },
-			  stop: function() {
-				if (this._call) {
-				  this._call = null;
-				  this._time = Infinity;
-				  sleep();
-				}
-			  }
-			};
-
-			function timer(callback, delay, time) {
-			  var t = new Timer;
-			  t.restart(callback, delay, time);
-			  return t;
-			}
-
-			function timerFlush() {
-			  now(); // Get the current time, if not already set.
-			  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
-			  var t = taskHead, e;
-			  while (t) {
-				if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
-				t = t._next;
-			  }
-			  --frame;
-			}
-
-			function wake() {
-			  clockNow = (clockLast = clock.now()) + clockSkew;
-			  frame = timeout = 0;
-			  try {
-				timerFlush();
-			  } finally {
-				frame = 0;
-				nap();
-				clockNow = 0;
-			  }
-			}
-
-			function poke$1() {
-			  var now = clock.now(), delay = now - clockLast;
-			  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
-			}
-
-			function nap() {
-			  var t0, t1 = taskHead, t2, time = Infinity;
-			  while (t1) {
-				if (t1._call) {
-				  if (time > t1._time) time = t1._time;
-				  t0 = t1, t1 = t1._next;
-				} else {
-				  t2 = t1._next, t1._next = null;
-				  t1 = t0 ? t0._next = t2 : taskHead = t2;
-				}
-			  }
-			  taskTail = t0;
-			  sleep(time);
-			}
-
-			function sleep(time) {
-			  if (frame) return; // Soonest alarm already set, or will be.
-			  if (timeout) timeout = clearTimeout(timeout);
-			  var delay = time - clockNow;
-			  if (delay > 24) {
-				if (time < Infinity) timeout = setTimeout(wake, delay);
-				if (interval) interval = clearInterval(interval);
-			  } else {
-				if (!interval) interval = setInterval(poke$1, pokeDelay);
-				frame = 1, setFrame(wake);
-			  }
-			}
-
-			var timeout$1 = function(callback, delay, time) {
-			  var t = new Timer;
-			  delay = delay == null ? 0 : +delay;
-			  t.restart(function(elapsed) {
-				t.stop();
-				callback(elapsed + delay);
-			  }, delay, time);
-			  return t;
-			};
-
-			var interval$1 = function(callback, delay, time) {
-			  var t = new Timer, total = delay;
-			  if (delay == null) return t.restart(callback, delay, time), t;
-			  delay = +delay, time = time == null ? now() : +time;
-			  t.restart(function tick(elapsed) {
-				elapsed += total;
-				t.restart(tick, total += delay, time);
-				callback(elapsed);
-			  }, delay, time);
-			  return t;
-			};
-
-			var t0$1 = new Date;
-			var t1$1 = new Date;
-
-			function newInterval(floori, offseti, count, field) {
-
-			  function interval(date) {
-				return floori(date = new Date(+date)), date;
-			  }
-
-			  interval.floor = interval;
-
-			  interval.ceil = function(date) {
-				return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
-			  };
-
-			  interval.round = function(date) {
-				var d0 = interval(date),
-					d1 = interval.ceil(date);
-				return date - d0 < d1 - date ? d0 : d1;
-			  };
-
-			  interval.offset = function(date, step) {
-				return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
-			  };
-
-			  interval.range = function(start, stop, step) {
-				var range = [];
-				start = interval.ceil(start);
-				step = step == null ? 1 : Math.floor(step);
-				if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
-				do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
-				return range;
-			  };
-
-			  interval.filter = function(test) {
-				return newInterval(function(date) {
-				  if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
-				}, function(date, step) {
-				  if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
-				});
-			  };
-
-			  if (count) {
-				interval.count = function(start, end) {
-				  t0$1.setTime(+start), t1$1.setTime(+end);
-				  floori(t0$1), floori(t1$1);
-				  return Math.floor(count(t0$1, t1$1));
-				};
-
-				interval.every = function(step) {
-				  step = Math.floor(step);
-				  return !isFinite(step) || !(step > 0) ? null
-					  : !(step > 1) ? interval
-					  : interval.filter(field
-						  ? function(d) { return field(d) % step === 0; }
-						  : function(d) { return interval.count(0, d) % step === 0; });
-				};
-			  }
-
-			  return interval;
-			}
-
-			var millisecond = newInterval(function() {
-			  // noop
-			}, function(date, step) {
-			  date.setTime(+date + step);
-			}, function(start, end) {
-			  return end - start;
-			});
-
-			// An optimized implementation for this simple case.
-			millisecond.every = function(k) {
-			  k = Math.floor(k);
-			  if (!isFinite(k) || !(k > 0)) return null;
-			  if (!(k > 1)) return millisecond;
-			  return newInterval(function(date) {
-				date.setTime(Math.floor(date / k) * k);
-			  }, function(date, step) {
-				date.setTime(+date + step * k);
-			  }, function(start, end) {
-				return (end - start) / k;
-			  });
-			};
-
-			var milliseconds = millisecond.range;
-
-			var durationSecond = 1e3;
-			var durationMinute = 6e4;
-			var durationHour = 36e5;
-			var durationDay = 864e5;
-			var durationWeek = 6048e5;
-
-			var second = newInterval(function(date) {
-			  date.setTime(Math.floor(date / durationSecond) * durationSecond);
-			}, function(date, step) {
-			  date.setTime(+date + step * durationSecond);
-			}, function(start, end) {
-			  return (end - start) / durationSecond;
-			}, function(date) {
-			  return date.getUTCSeconds();
-			});
-
-			var seconds = second.range;
-
-			var minute = newInterval(function(date) {
-			  date.setTime(Math.floor(date / durationMinute) * durationMinute);
-			}, function(date, step) {
-			  date.setTime(+date + step * durationMinute);
-			}, function(start, end) {
-			  return (end - start) / durationMinute;
-			}, function(date) {
-			  return date.getMinutes();
-			});
-
-			var minutes = minute.range;
-
-			var hour = newInterval(function(date) {
-			  var offset = date.getTimezoneOffset() * durationMinute % durationHour;
-			  if (offset < 0) offset += durationHour;
-			  date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
-			}, function(date, step) {
-			  date.setTime(+date + step * durationHour);
-			}, function(start, end) {
-			  return (end - start) / durationHour;
-			}, function(date) {
-			  return date.getHours();
-			});
-
-			var hours = hour.range;
-
-			var day = newInterval(function(date) {
-			  date.setHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setDate(date.getDate() + step);
-			}, function(start, end) {
-			  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
-			}, function(date) {
-			  return date.getDate() - 1;
-			});
-
-			var days = day.range;
-
-			function weekday(i) {
-			  return newInterval(function(date) {
-				date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
-				date.setHours(0, 0, 0, 0);
-			  }, function(date, step) {
-				date.setDate(date.getDate() + step * 7);
-			  }, function(start, end) {
-				return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
-			  });
-			}
-
-			var sunday = weekday(0);
-			var monday = weekday(1);
-			var tuesday = weekday(2);
-			var wednesday = weekday(3);
-			var thursday = weekday(4);
-			var friday = weekday(5);
-			var saturday = weekday(6);
-
-			var sundays = sunday.range;
-			var mondays = monday.range;
-			var tuesdays = tuesday.range;
-			var wednesdays = wednesday.range;
-			var thursdays = thursday.range;
-			var fridays = friday.range;
-			var saturdays = saturday.range;
-
-			var month = newInterval(function(date) {
-			  date.setDate(1);
-			  date.setHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setMonth(date.getMonth() + step);
-			}, function(start, end) {
-			  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
-			}, function(date) {
-			  return date.getMonth();
-			});
-
-			var months = month.range;
-
-			var year = newInterval(function(date) {
-			  date.setMonth(0, 1);
-			  date.setHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setFullYear(date.getFullYear() + step);
-			}, function(start, end) {
-			  return end.getFullYear() - start.getFullYear();
-			}, function(date) {
-			  return date.getFullYear();
-			});
-
-			// An optimized implementation for this simple case.
-			year.every = function(k) {
-			  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
-				date.setFullYear(Math.floor(date.getFullYear() / k) * k);
-				date.setMonth(0, 1);
-				date.setHours(0, 0, 0, 0);
-			  }, function(date, step) {
-				date.setFullYear(date.getFullYear() + step * k);
-			  });
-			};
-
-			var years = year.range;
-
-			var utcMinute = newInterval(function(date) {
-			  date.setUTCSeconds(0, 0);
-			}, function(date, step) {
-			  date.setTime(+date + step * durationMinute);
-			}, function(start, end) {
-			  return (end - start) / durationMinute;
-			}, function(date) {
-			  return date.getUTCMinutes();
-			});
-
-			var utcMinutes = utcMinute.range;
-
-			var utcHour = newInterval(function(date) {
-			  date.setUTCMinutes(0, 0, 0);
-			}, function(date, step) {
-			  date.setTime(+date + step * durationHour);
-			}, function(start, end) {
-			  return (end - start) / durationHour;
-			}, function(date) {
-			  return date.getUTCHours();
-			});
-
-			var utcHours = utcHour.range;
-
-			var utcDay = newInterval(function(date) {
-			  date.setUTCHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setUTCDate(date.getUTCDate() + step);
-			}, function(start, end) {
-			  return (end - start) / durationDay;
-			}, function(date) {
-			  return date.getUTCDate() - 1;
-			});
-
-			var utcDays = utcDay.range;
-
-			function utcWeekday(i) {
-			  return newInterval(function(date) {
-				date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
-				date.setUTCHours(0, 0, 0, 0);
-			  }, function(date, step) {
-				date.setUTCDate(date.getUTCDate() + step * 7);
-			  }, function(start, end) {
-				return (end - start) / durationWeek;
-			  });
-			}
-
-			var utcSunday = utcWeekday(0);
-			var utcMonday = utcWeekday(1);
-			var utcTuesday = utcWeekday(2);
-			var utcWednesday = utcWeekday(3);
-			var utcThursday = utcWeekday(4);
-			var utcFriday = utcWeekday(5);
-			var utcSaturday = utcWeekday(6);
-
-			var utcSundays = utcSunday.range;
-			var utcMondays = utcMonday.range;
-			var utcTuesdays = utcTuesday.range;
-			var utcWednesdays = utcWednesday.range;
-			var utcThursdays = utcThursday.range;
-			var utcFridays = utcFriday.range;
-			var utcSaturdays = utcSaturday.range;
-
-			var utcMonth = newInterval(function(date) {
-			  date.setUTCDate(1);
-			  date.setUTCHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setUTCMonth(date.getUTCMonth() + step);
-			}, function(start, end) {
-			  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
-			}, function(date) {
-			  return date.getUTCMonth();
-			});
-
-			var utcMonths = utcMonth.range;
-
-			var utcYear = newInterval(function(date) {
-			  date.setUTCMonth(0, 1);
-			  date.setUTCHours(0, 0, 0, 0);
-			}, function(date, step) {
-			  date.setUTCFullYear(date.getUTCFullYear() + step);
-			}, function(start, end) {
-			  return end.getUTCFullYear() - start.getUTCFullYear();
-			}, function(date) {
-			  return date.getUTCFullYear();
-			});
-
-			// An optimized implementation for this simple case.
-			utcYear.every = function(k) {
-			  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
-				date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
-				date.setUTCMonth(0, 1);
-				date.setUTCHours(0, 0, 0, 0);
-			  }, function(date, step) {
-				date.setUTCFullYear(date.getUTCFullYear() + step * k);
-			  });
-			};
-
-			var utcYears = utcYear.range;
-
-			// Computes the decimal coefficient and exponent of the specified number x with
-			// significant digits p, where x is positive and p is in [1, 21] or undefined.
-			// For example, formatDecimal(1.23) returns ["123", 0].
-			var formatDecimal = function(x, p) {
-			  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
-			  var i, coefficient = x.slice(0, i);
-
-			  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
-			  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
-			  return [
-				coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
-				+x.slice(i + 1)
-			  ];
-			};
-
-			var exponent$1 = function(x) {
-			  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
-			};
-
-			var formatGroup = function(grouping, thousands) {
-			  return function(value, width) {
-				var i = value.length,
-					t = [],
-					j = 0,
-					g = grouping[0],
-					length = 0;
-
-				while (i > 0 && g > 0) {
-				  if (length + g + 1 > width) g = Math.max(1, width - length);
-				  t.push(value.substring(i -= g, i + g));
-				  if ((length += g + 1) > width) break;
-				  g = grouping[j = (j + 1) % grouping.length];
-				}
-
-				return t.reverse().join(thousands);
-			  };
-			};
-
-			var formatDefault = function(x, p) {
-			  x = x.toPrecision(p);
-
-			  out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
-				switch (x[i]) {
-				  case ".": i0 = i1 = i; break;
-				  case "0": if (i0 === 0) i0 = i; i1 = i; break;
-				  case "e": break out;
-				  default: if (i0 > 0) i0 = 0; break;
-				}
-			  }
-
-			  return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
-			};
-
-			var prefixExponent;
-
-			var formatPrefixAuto = function(x, p) {
-			  var d = formatDecimal(x, p);
-			  if (!d) return x + "";
-			  var coefficient = d[0],
-				  exponent = d[1],
-				  i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
-				  n = coefficient.length;
-			  return i === n ? coefficient
-				  : i > n ? coefficient + new Array(i - n + 1).join("0")
-				  : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
-				  : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
-			};
-
-			var formatRounded = function(x, p) {
-			  var d = formatDecimal(x, p);
-			  if (!d) return x + "";
-			  var coefficient = d[0],
-				  exponent = d[1];
-			  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
-				  : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
-				  : coefficient + new Array(exponent - coefficient.length + 2).join("0");
-			};
-
-			var formatTypes = {
-			  "": formatDefault,
-			  "%": function(x, p) { return (x * 100).toFixed(p); },
-			  "b": function(x) { return Math.round(x).toString(2); },
-			  "c": function(x) { return x + ""; },
-			  "d": function(x) { return Math.round(x).toString(10); },
-			  "e": function(x, p) { return x.toExponential(p); },
-			  "f": function(x, p) { return x.toFixed(p); },
-			  "g": function(x, p) { return x.toPrecision(p); },
-			  "o": function(x) { return Math.round(x).toString(8); },
-			  "p": function(x, p) { return formatRounded(x * 100, p); },
-			  "r": formatRounded,
-			  "s": formatPrefixAuto,
-			  "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
-			  "x": function(x) { return Math.round(x).toString(16); }
-			};
-
-			// [[fill]align][sign][symbol][0][width][,][.precision][type]
-			var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
-
-			var formatSpecifier = function(specifier) {
-			  return new FormatSpecifier(specifier);
-			};
-
-			function FormatSpecifier(specifier) {
-			  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
-
-			  var match,
-				  fill = match[1] || " ",
-				  align = match[2] || ">",
-				  sign = match[3] || "-",
-				  symbol = match[4] || "",
-				  zero = !!match[5],
-				  width = match[6] && +match[6],
-				  comma = !!match[7],
-				  precision = match[8] && +match[8].slice(1),
-				  type = match[9] || "";
-
-			  // The "n" type is an alias for ",g".
-			  if (type === "n") comma = true, type = "g";
-
-			  // Map invalid types to the default format.
-			  else if (!formatTypes[type]) type = "";
-
-			  // If zero fill is specified, padding goes after sign and before digits.
-			  if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
-
-			  this.fill = fill;
-			  this.align = align;
-			  this.sign = sign;
-			  this.symbol = symbol;
-			  this.zero = zero;
-			  this.width = width;
-			  this.comma = comma;
-			  this.precision = precision;
-			  this.type = type;
-			}
-
-			FormatSpecifier.prototype.toString = function() {
-			  return this.fill
-				  + this.align
-				  + this.sign
-				  + this.symbol
-				  + (this.zero ? "0" : "")
-				  + (this.width == null ? "" : Math.max(1, this.width | 0))
-				  + (this.comma ? "," : "")
-				  + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
-				  + this.type;
-			};
-
-			var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
-
-			function identity$3(x) {
-			  return x;
-			}
-
-			var formatLocale = function(locale) {
-			  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
-				  currency = locale.currency,
-				  decimal = locale.decimal;
-
-			  function newFormat(specifier) {
-				specifier = formatSpecifier(specifier);
-
-				var fill = specifier.fill,
-					align = specifier.align,
-					sign = specifier.sign,
-					symbol = specifier.symbol,
-					zero = specifier.zero,
-					width = specifier.width,
-					comma = specifier.comma,
-					precision = specifier.precision,
-					type = specifier.type;
-
-				// Compute the prefix and suffix.
-				// For SI-prefix, the suffix is lazily computed.
-				var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
-					suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
-
-				// What format function should we use?
-				// Is this an integer type?
-				// Can this type generate exponential notation?
-				var formatType = formatTypes[type],
-					maybeSuffix = !type || /[defgprs%]/.test(type);
-
-				// Set the default precision if not specified,
-				// or clamp the specified precision to the supported range.
-				// For significant precision, it must be in [1, 21].
-				// For fixed precision, it must be in [0, 20].
-				precision = precision == null ? (type ? 6 : 12)
-					: /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
-					: Math.max(0, Math.min(20, precision));
-
-				function format(value) {
-				  var valuePrefix = prefix,
-					  valueSuffix = suffix,
-					  i, n, c;
-
-				  if (type === "c") {
-					valueSuffix = formatType(value) + valueSuffix;
-					value = "";
-				  } else {
-					value = +value;
-
-					// Convert negative to positive, and compute the prefix.
-					// Note that -0 is not less than 0, but 1 / -0 is!
-					var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
-
-					// Perform the initial formatting.
-					value = formatType(value, precision);
-
-					// If the original value was negative, it may be rounded to zero during
-					// formatting; treat this as (positive) zero.
-					if (valueNegative) {
-					  i = -1, n = value.length;
-					  valueNegative = false;
-					  while (++i < n) {
-						if (c = value.charCodeAt(i), (48 < c && c < 58)
-							|| (type === "x" && 96 < c && c < 103)
-							|| (type === "X" && 64 < c && c < 71)) {
-						  valueNegative = true;
-						  break;
-						}
-					  }
-					}
-
-					// Compute the prefix and suffix.
-					valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
-					valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
-
-					// Break the formatted value into the integer “value” part that can be
-					// grouped, and fractional or exponential “suffix” part that is not.
-					if (maybeSuffix) {
-					  i = -1, n = value.length;
-					  while (++i < n) {
-						if (c = value.charCodeAt(i), 48 > c || c > 57) {
-						  valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
-						  value = value.slice(0, i);
-						  break;
-						}
-					  }
-					}
-				  }
-
-				  // If the fill character is not "0", grouping is applied before padding.
-				  if (comma && !zero) value = group(value, Infinity);
-
-				  // Compute the padding.
-				  var length = valuePrefix.length + value.length + valueSuffix.length,
-					  padding = length < width ? new Array(width - length + 1).join(fill) : "";
-
-				  // If the fill character is "0", grouping is applied after padding.
-				  if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
-
-				  // Reconstruct the final output based on the desired alignment.
-				  switch (align) {
-					case "<": return valuePrefix + value + valueSuffix + padding;
-					case "=": return valuePrefix + padding + value + valueSuffix;
-					case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
-				  }
-				  return padding + valuePrefix + value + valueSuffix;
-				}
-
-				format.toString = function() {
-				  return specifier + "";
-				};
-
-				return format;
-			  }
-
-			  function formatPrefix(specifier, value) {
-				var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
-					e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
-					k = Math.pow(10, -e),
-					prefix = prefixes[8 + e / 3];
-				return function(value) {
-				  return f(k * value) + prefix;
-				};
-			  }
-
-			  return {
-				format: newFormat,
-				formatPrefix: formatPrefix
-			  };
-			};
-
-			var locale$1;
-
-
-
-			defaultLocale({
-			  decimal: ".",
-			  thousands: ",",
-			  grouping: [3],
-			  currency: ["$", ""]
-			});
-
-			function defaultLocale(definition) {
-			  locale$1 = formatLocale(definition);
-			  exports.format = locale$1.format;
-			  exports.formatPrefix = locale$1.formatPrefix;
-			  return locale$1;
-			}
-
-			var precisionFixed = function(step) {
-			  return Math.max(0, -exponent$1(Math.abs(step)));
-			};
-
-			var precisionPrefix = function(step, value) {
-			  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
-			};
-
-			var precisionRound = function(step, max) {
-			  step = Math.abs(step), max = Math.abs(max) - step;
-			  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
-			};
-
-			function localDate(d) {
-			  if (0 <= d.y && d.y < 100) {
-				var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
-				date.setFullYear(d.y);
-				return date;
-			  }
-			  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
-			}
-
-			function utcDate(d) {
-			  if (0 <= d.y && d.y < 100) {
-				var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
-				date.setUTCFullYear(d.y);
-				return date;
-			  }
-			  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
-			}
-
-			function newYear(y) {
-			  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
-			}
-
-			function formatLocale$1(locale) {
-			  var locale_dateTime = locale.dateTime,
-				  locale_date = locale.date,
-				  locale_time = locale.time,
-				  locale_periods = locale.periods,
-				  locale_weekdays = locale.days,
-				  locale_shortWeekdays = locale.shortDays,
-				  locale_months = locale.months,
-				  locale_shortMonths = locale.shortMonths;
-
-			  var periodRe = formatRe(locale_periods),
-				  periodLookup = formatLookup(locale_periods),
-				  weekdayRe = formatRe(locale_weekdays),
-				  weekdayLookup = formatLookup(locale_weekdays),
-				  shortWeekdayRe = formatRe(locale_shortWeekdays),
-				  shortWeekdayLookup = formatLookup(locale_shortWeekdays),
-				  monthRe = formatRe(locale_months),
-				  monthLookup = formatLookup(locale_months),
-				  shortMonthRe = formatRe(locale_shortMonths),
-				  shortMonthLookup = formatLookup(locale_shortMonths);
-
-			  var formats = {
-				"a": formatShortWeekday,
-				"A": formatWeekday,
-				"b": formatShortMonth,
-				"B": formatMonth,
-				"c": null,
-				"d": formatDayOfMonth,
-				"e": formatDayOfMonth,
-				"H": formatHour24,
-				"I": formatHour12,
-				"j": formatDayOfYear,
-				"L": formatMilliseconds,
-				"m": formatMonthNumber,
-				"M": formatMinutes,
-				"p": formatPeriod,
-				"S": formatSeconds,
-				"U": formatWeekNumberSunday,
-				"w": formatWeekdayNumber,
-				"W": formatWeekNumberMonday,
-				"x": null,
-				"X": null,
-				"y": formatYear,
-				"Y": formatFullYear,
-				"Z": formatZone,
-				"%": formatLiteralPercent
-			  };
-
-			  var utcFormats = {
-				"a": formatUTCShortWeekday,
-				"A": formatUTCWeekday,
-				"b": formatUTCShortMonth,
-				"B": formatUTCMonth,
-				"c": null,
-				"d": formatUTCDayOfMonth,
-				"e": formatUTCDayOfMonth,
-				"H": formatUTCHour24,
-				"I": formatUTCHour12,
-				"j": formatUTCDayOfYear,
-				"L": formatUTCMilliseconds,
-				"m": formatUTCMonthNumber,
-				"M": formatUTCMinutes,
-				"p": formatUTCPeriod,
-				"S": formatUTCSeconds,
-				"U": formatUTCWeekNumberSunday,
-				"w": formatUTCWeekdayNumber,
-				"W": formatUTCWeekNumberMonday,
-				"x": null,
-				"X": null,
-				"y": formatUTCYear,
-				"Y": formatUTCFullYear,
-				"Z": formatUTCZone,
-				"%": formatLiteralPercent
-			  };
-
-			  var parses = {
-				"a": parseShortWeekday,
-				"A": parseWeekday,
-				"b": parseShortMonth,
-				"B": parseMonth,
-				"c": parseLocaleDateTime,
-				"d": parseDayOfMonth,
-				"e": parseDayOfMonth,
-				"H": parseHour24,
-				"I": parseHour24,
-				"j": parseDayOfYear,
-				"L": parseMilliseconds,
-				"m": parseMonthNumber,
-				"M": parseMinutes,
-				"p": parsePeriod,
-				"S": parseSeconds,
-				"U": parseWeekNumberSunday,
-				"w": parseWeekdayNumber,
-				"W": parseWeekNumberMonday,
-				"x": parseLocaleDate,
-				"X": parseLocaleTime,
-				"y": parseYear,
-				"Y": parseFullYear,
-				"Z": parseZone,
-				"%": parseLiteralPercent
-			  };
-
-			  // These recursive directive definitions must be deferred.
-			  formats.x = newFormat(locale_date, formats);
-			  formats.X = newFormat(locale_time, formats);
-			  formats.c = newFormat(locale_dateTime, formats);
-			  utcFormats.x = newFormat(locale_date, utcFormats);
-			  utcFormats.X = newFormat(locale_time, utcFormats);
-			  utcFormats.c = newFormat(locale_dateTime, utcFormats);
-
-			  function newFormat(specifier, formats) {
-				return function(date) {
-				  var string = [],
-					  i = -1,
-					  j = 0,
-					  n = specifier.length,
-					  c,
-					  pad,
-					  format;
-
-				  if (!(date instanceof Date)) date = new Date(+date);
-
-				  while (++i < n) {
-					if (specifier.charCodeAt(i) === 37) {
-					  string.push(specifier.slice(j, i));
-					  if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
-					  else pad = c === "e" ? " " : "0";
-					  if (format = formats[c]) c = format(date, pad);
-					  string.push(c);
-					  j = i + 1;
-					}
-				  }
-
-				  string.push(specifier.slice(j, i));
-				  return string.join("");
-				};
-			  }
-
-			  function newParse(specifier, newDate) {
-				return function(string) {
-				  var d = newYear(1900),
-					  i = parseSpecifier(d, specifier, string += "", 0);
-				  if (i != string.length) return null;
-
-				  // The am-pm flag is 0 for AM, and 1 for PM.
-				  if ("p" in d) d.H = d.H % 12 + d.p * 12;
-
-				  // Convert day-of-week and week-of-year to day-of-year.
-				  if ("W" in d || "U" in d) {
-					if (!("w" in d)) d.w = "W" in d ? 1 : 0;
-					var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
-					d.m = 0;
-					d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
-				  }
-
-				  // If a time zone is specified, all fields are interpreted as UTC and then
-				  // offset according to the specified time zone.
-				  if ("Z" in d) {
-					d.H += d.Z / 100 | 0;
-					d.M += d.Z % 100;
-					return utcDate(d);
-				  }
-
-				  // Otherwise, all fields are in local time.
-				  return newDate(d);
-				};
-			  }
-
-			  function parseSpecifier(d, specifier, string, j) {
-				var i = 0,
-					n = specifier.length,
-					m = string.length,
-					c,
-					parse;
-
-				while (i < n) {
-				  if (j >= m) return -1;
-				  c = specifier.charCodeAt(i++);
-				  if (c === 37) {
-					c = specifier.charAt(i++);
-					parse = parses[c in pads ? specifier.charAt(i++) : c];
-					if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
-				  } else if (c != string.charCodeAt(j++)) {
-					return -1;
-				  }
-				}
-
-				return j;
-			  }
-
-			  function parsePeriod(d, string, i) {
-				var n = periodRe.exec(string.slice(i));
-				return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-			  }
-
-			  function parseShortWeekday(d, string, i) {
-				var n = shortWeekdayRe.exec(string.slice(i));
-				return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-			  }
-
-			  function parseWeekday(d, string, i) {
-				var n = weekdayRe.exec(string.slice(i));
-				return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-			  }
-
-			  function parseShortMonth(d, string, i) {
-				var n = shortMonthRe.exec(string.slice(i));
-				return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-			  }
-
-			  function parseMonth(d, string, i) {
-				var n = monthRe.exec(string.slice(i));
-				return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-			  }
-
-			  function parseLocaleDateTime(d, string, i) {
-				return parseSpecifier(d, locale_dateTime, string, i);
-			  }
-
-			  function parseLocaleDate(d, string, i) {
-				return parseSpecifier(d, locale_date, string, i);
-			  }
-
-			  function parseLocaleTime(d, string, i) {
-				return parseSpecifier(d, locale_time, string, i);
-			  }
-
-			  function formatShortWeekday(d) {
-				return locale_shortWeekdays[d.getDay()];
-			  }
-
-			  function formatWeekday(d) {
-				return locale_weekdays[d.getDay()];
-			  }
-
-			  function formatShortMonth(d) {
-				return locale_shortMonths[d.getMonth()];
-			  }
-
-			  function formatMonth(d) {
-				return locale_months[d.getMonth()];
-			  }
-
-			  function formatPeriod(d) {
-				return locale_periods[+(d.getHours() >= 12)];
-			  }
-
-			  function formatUTCShortWeekday(d) {
-				return locale_shortWeekdays[d.getUTCDay()];
-			  }
-
-			  function formatUTCWeekday(d) {
-				return locale_weekdays[d.getUTCDay()];
-			  }
-
-			  function formatUTCShortMonth(d) {
-				return locale_shortMonths[d.getUTCMonth()];
-			  }
-
-			  function formatUTCMonth(d) {
-				return locale_months[d.getUTCMonth()];
-			  }
-
-			  function formatUTCPeriod(d) {
-				return locale_periods[+(d.getUTCHours() >= 12)];
-			  }
-
-			  return {
-				format: function(specifier) {
-				  var f = newFormat(specifier += "", formats);
-				  f.toString = function() { return specifier; };
-				  return f;
-				},
-				parse: function(specifier) {
-				  var p = newParse(specifier += "", localDate);
-				  p.toString = function() { return specifier; };
-				  return p;
-				},
-				utcFormat: function(specifier) {
-				  var f = newFormat(specifier += "", utcFormats);
-				  f.toString = function() { return specifier; };
-				  return f;
-				},
-				utcParse: function(specifier) {
-				  var p = newParse(specifier, utcDate);
-				  p.toString = function() { return specifier; };
-				  return p;
-				}
-			  };
-			}
-
-			var pads = {"-": "", "_": " ", "0": "0"};
-			var numberRe = /^\s*\d+/;
-			var percentRe = /^%/;
-			var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-
-			function pad(value, fill, width) {
-			  var sign = value < 0 ? "-" : "",
-				  string = (sign ? -value : value) + "",
-				  length = string.length;
-			  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
-			}
-
-			function requote(s) {
-			  return s.replace(requoteRe, "\\$&");
-			}
-
-			function formatRe(names) {
-			  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
-			}
-
-			function formatLookup(names) {
-			  var map = {}, i = -1, n = names.length;
-			  while (++i < n) map[names[i].toLowerCase()] = i;
-			  return map;
-			}
-
-			function parseWeekdayNumber(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 1));
-			  return n ? (d.w = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseWeekNumberSunday(d, string, i) {
-			  var n = numberRe.exec(string.slice(i));
-			  return n ? (d.U = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseWeekNumberMonday(d, string, i) {
-			  var n = numberRe.exec(string.slice(i));
-			  return n ? (d.W = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseFullYear(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 4));
-			  return n ? (d.y = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseYear(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
-			}
-
-			function parseZone(d, string, i) {
-			  var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
-			  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
-			}
-
-			function parseMonthNumber(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
-			}
-
-			function parseDayOfMonth(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.d = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseDayOfYear(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 3));
-			  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseHour24(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.H = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseMinutes(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.M = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseSeconds(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 2));
-			  return n ? (d.S = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseMilliseconds(d, string, i) {
-			  var n = numberRe.exec(string.slice(i, i + 3));
-			  return n ? (d.L = +n[0], i + n[0].length) : -1;
-			}
-
-			function parseLiteralPercent(d, string, i) {
-			  var n = percentRe.exec(string.slice(i, i + 1));
-			  return n ? i + n[0].length : -1;
-			}
-
-			function formatDayOfMonth(d, p) {
-			  return pad(d.getDate(), p, 2);
-			}
-
-			function formatHour24(d, p) {
-			  return pad(d.getHours(), p, 2);
-			}
-
-			function formatHour12(d, p) {
-			  return pad(d.getHours() % 12 || 12, p, 2);
-			}
-
-			function formatDayOfYear(d, p) {
-			  return pad(1 + day.count(year(d), d), p, 3);
-			}
-
-			function formatMilliseconds(d, p) {
-			  return pad(d.getMilliseconds(), p, 3);
-			}
-
-			function formatMonthNumber(d, p) {
-			  return pad(d.getMonth() + 1, p, 2);
-			}
-
-			function formatMinutes(d, p) {
-			  return pad(d.getMinutes(), p, 2);
-			}
-
-			function formatSeconds(d, p) {
-			  return pad(d.getSeconds(), p, 2);
-			}
-
-			function formatWeekNumberSunday(d, p) {
-			  return pad(sunday.count(year(d), d), p, 2);
-			}
-
-			function formatWeekdayNumber(d) {
-			  return d.getDay();
-			}
-
-			function formatWeekNumberMonday(d, p) {
-			  return pad(monday.count(year(d), d), p, 2);
-			}
-
-			function formatYear(d, p) {
-			  return pad(d.getFullYear() % 100, p, 2);
-			}
-
-			function formatFullYear(d, p) {
-			  return pad(d.getFullYear() % 10000, p, 4);
-			}
-
-			function formatZone(d) {
-			  var z = d.getTimezoneOffset();
-			  return (z > 0 ? "-" : (z *= -1, "+"))
-				  + pad(z / 60 | 0, "0", 2)
-				  + pad(z % 60, "0", 2);
-			}
-
-			function formatUTCDayOfMonth(d, p) {
-			  return pad(d.getUTCDate(), p, 2);
-			}
-
-			function formatUTCHour24(d, p) {
-			  return pad(d.getUTCHours(), p, 2);
-			}
-
-			function formatUTCHour12(d, p) {
-			  return pad(d.getUTCHours() % 12 || 12, p, 2);
-			}
-
-			function formatUTCDayOfYear(d, p) {
-			  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
-			}
-
-			function formatUTCMilliseconds(d, p) {
-			  return pad(d.getUTCMilliseconds(), p, 3);
-			}
-
-			function formatUTCMonthNumber(d, p) {
-			  return pad(d.getUTCMonth() + 1, p, 2);
-			}
-
-			function formatUTCMinutes(d, p) {
-			  return pad(d.getUTCMinutes(), p, 2);
-			}
-
-			function formatUTCSeconds(d, p) {
-			  return pad(d.getUTCSeconds(), p, 2);
-			}
-
-			function formatUTCWeekNumberSunday(d, p) {
-			  return pad(utcSunday.count(utcYear(d), d), p, 2);
-			}
-
-			function formatUTCWeekdayNumber(d) {
-			  return d.getUTCDay();
-			}
-
-			function formatUTCWeekNumberMonday(d, p) {
-			  return pad(utcMonday.count(utcYear(d), d), p, 2);
-			}
-
-			function formatUTCYear(d, p) {
-			  return pad(d.getUTCFullYear() % 100, p, 2);
-			}
-
-			function formatUTCFullYear(d, p) {
-			  return pad(d.getUTCFullYear() % 10000, p, 4);
-			}
-
-			function formatUTCZone() {
-			  return "+0000";
-			}
-
-			function formatLiteralPercent() {
-			  return "%";
-			}
-
-			var locale$2;
-
-
-
-
-
-			defaultLocale$1({
-			  dateTime: "%x, %X",
-			  date: "%-m/%-d/%Y",
-			  time: "%-I:%M:%S %p",
-			  periods: ["AM", "PM"],
-			  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
-			  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
-			  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
-			  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
-			});
-
-			function defaultLocale$1(definition) {
-			  locale$2 = formatLocale$1(definition);
-			  exports.timeFormat = locale$2.format;
-			  exports.timeParse = locale$2.parse;
-			  exports.utcFormat = locale$2.utcFormat;
-			  exports.utcParse = locale$2.utcParse;
-			  return locale$2;
-			}
-
-			var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
-
-			function formatIsoNative(date) {
-			  return date.toISOString();
-			}
-
-			var formatIso = Date.prototype.toISOString
-				? formatIsoNative
-				: exports.utcFormat(isoSpecifier);
-
-			function parseIsoNative(string) {
-			  var date = new Date(string);
-			  return isNaN(date) ? null : date;
-			}
-
-			var parseIso = +new Date("2000-01-01T00:00:00.000Z")
-				? parseIsoNative
-				: exports.utcParse(isoSpecifier);
-
-			var array$2 = Array.prototype;
-
-			var map$3 = array$2.map;
-			var slice$3 = array$2.slice;
-
-			var implicit = {name: "implicit"};
-
-			function ordinal(range) {
-			  var index = map$1(),
-				  domain = [],
-				  unknown = implicit;
-
-			  range = range == null ? [] : slice$3.call(range);
-
-			  function scale(d) {
-				var key = d + "", i = index.get(key);
-				if (!i) {
-				  if (unknown !== implicit) return unknown;
-				  index.set(key, i = domain.push(d));
-				}
-				return range[(i - 1) % range.length];
-			  }
-
-			  scale.domain = function(_) {
-				if (!arguments.length) return domain.slice();
-				domain = [], index = map$1();
-				var i = -1, n = _.length, d, key;
-				while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
-				return scale;
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (range = slice$3.call(_), scale) : range.slice();
-			  };
-
-			  scale.unknown = function(_) {
-				return arguments.length ? (unknown = _, scale) : unknown;
-			  };
-
-			  scale.copy = function() {
-				return ordinal()
-					.domain(domain)
-					.range(range)
-					.unknown(unknown);
-			  };
-
-			  return scale;
-			}
-
-			function band() {
-			  var scale = ordinal().unknown(undefined),
-				  domain = scale.domain,
-				  ordinalRange = scale.range,
-				  range$$1 = [0, 1],
-				  step,
-				  bandwidth,
-				  round = false,
-				  paddingInner = 0,
-				  paddingOuter = 0,
-				  align = 0.5;
-
-			  delete scale.unknown;
-
-			  function rescale() {
-				var n = domain().length,
-					reverse = range$$1[1] < range$$1[0],
-					start = range$$1[reverse - 0],
-					stop = range$$1[1 - reverse];
-				step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
-				if (round) step = Math.floor(step);
-				start += (stop - start - step * (n - paddingInner)) * align;
-				bandwidth = step * (1 - paddingInner);
-				if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
-				var values = range(n).map(function(i) { return start + step * i; });
-				return ordinalRange(reverse ? values.reverse() : values);
-			  }
-
-			  scale.domain = function(_) {
-				return arguments.length ? (domain(_), rescale()) : domain();
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
-			  };
-
-			  scale.rangeRound = function(_) {
-				return range$$1 = [+_[0], +_[1]], round = true, rescale();
-			  };
-
-			  scale.bandwidth = function() {
-				return bandwidth;
-			  };
-
-			  scale.step = function() {
-				return step;
-			  };
-
-			  scale.round = function(_) {
-				return arguments.length ? (round = !!_, rescale()) : round;
-			  };
-
-			  scale.padding = function(_) {
-				return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
-			  };
-
-			  scale.paddingInner = function(_) {
-				return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
-			  };
-
-			  scale.paddingOuter = function(_) {
-				return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
-			  };
-
-			  scale.align = function(_) {
-				return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
-			  };
-
-			  scale.copy = function() {
-				return band()
-					.domain(domain())
-					.range(range$$1)
-					.round(round)
-					.paddingInner(paddingInner)
-					.paddingOuter(paddingOuter)
-					.align(align);
-			  };
-
-			  return rescale();
-			}
-
-			function pointish(scale) {
-			  var copy = scale.copy;
-
-			  scale.padding = scale.paddingOuter;
-			  delete scale.paddingInner;
-			  delete scale.paddingOuter;
-
-			  scale.copy = function() {
-				return pointish(copy());
-			  };
-
-			  return scale;
-			}
-
-			function point$4() {
-			  return pointish(band().paddingInner(1));
-			}
-
-			var constant$4 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var number$1 = function(x) {
-			  return +x;
-			};
-
-			var unit = [0, 1];
-
-			function deinterpolateLinear(a, b) {
-			  return (b -= (a = +a))
-				  ? function(x) { return (x - a) / b; }
-				  : constant$4(b);
-			}
-
-			function deinterpolateClamp(deinterpolate) {
-			  return function(a, b) {
-				var d = deinterpolate(a = +a, b = +b);
-				return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
-			  };
-			}
-
-			function reinterpolateClamp(reinterpolate) {
-			  return function(a, b) {
-				var r = reinterpolate(a = +a, b = +b);
-				return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
-			  };
-			}
-
-			function bimap(domain, range$$1, deinterpolate, reinterpolate) {
-			  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
-			  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
-			  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
-			  return function(x) { return r0(d0(x)); };
-			}
-
-			function polymap(domain, range$$1, deinterpolate, reinterpolate) {
-			  var j = Math.min(domain.length, range$$1.length) - 1,
-				  d = new Array(j),
-				  r = new Array(j),
-				  i = -1;
-
-			  // Reverse descending domains.
-			  if (domain[j] < domain[0]) {
-				domain = domain.slice().reverse();
-				range$$1 = range$$1.slice().reverse();
-			  }
-
-			  while (++i < j) {
-				d[i] = deinterpolate(domain[i], domain[i + 1]);
-				r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
-			  }
-
-			  return function(x) {
-				var i = bisectRight(domain, x, 1, j) - 1;
-				return r[i](d[i](x));
-			  };
-			}
-
-			function copy(source, target) {
-			  return target
-				  .domain(source.domain())
-				  .range(source.range())
-				  .interpolate(source.interpolate())
-				  .clamp(source.clamp());
-			}
-
-			// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
-			// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
-			function continuous(deinterpolate, reinterpolate) {
-			  var domain = unit,
-				  range$$1 = unit,
-				  interpolate$$1 = interpolate,
-				  clamp = false,
-				  piecewise,
-				  output,
-				  input;
-
-			  function rescale() {
-				piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
-				output = input = null;
-				return scale;
-			  }
-
-			  function scale(x) {
-				return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
-			  }
-
-			  scale.invert = function(y) {
-				return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
-			  };
-
-			  scale.domain = function(_) {
-				return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
-			  };
-
-			  scale.rangeRound = function(_) {
-				return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale();
-			  };
-
-			  scale.clamp = function(_) {
-				return arguments.length ? (clamp = !!_, rescale()) : clamp;
-			  };
-
-			  scale.interpolate = function(_) {
-				return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
-			  };
-
-			  return rescale();
-			}
-
-			var tickFormat = function(domain, count, specifier) {
-			  var start = domain[0],
-				  stop = domain[domain.length - 1],
-				  step = tickStep(start, stop, count == null ? 10 : count),
-				  precision;
-			  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
-			  switch (specifier.type) {
-				case "s": {
-				  var value = Math.max(Math.abs(start), Math.abs(stop));
-				  if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
-				  return exports.formatPrefix(specifier, value);
-				}
-				case "":
-				case "e":
-				case "g":
-				case "p":
-				case "r": {
-				  if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
-				  break;
-				}
-				case "f":
-				case "%": {
-				  if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
-				  break;
-				}
-			  }
-			  return exports.format(specifier);
-			};
-
-			function linearish(scale) {
-			  var domain = scale.domain;
-
-			  scale.ticks = function(count) {
-				var d = domain();
-				return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
-			  };
-
-			  scale.tickFormat = function(count, specifier) {
-				return tickFormat(domain(), count, specifier);
-			  };
-
-			  scale.nice = function(count) {
-				var d = domain(),
-					i = d.length - 1,
-					n = count == null ? 10 : count,
-					start = d[0],
-					stop = d[i],
-					step = tickStep(start, stop, n);
-
-				if (step) {
-				  step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
-				  d[0] = Math.floor(start / step) * step;
-				  d[i] = Math.ceil(stop / step) * step;
-				  domain(d);
-				}
-
-				return scale;
-			  };
-
-			  return scale;
-			}
-
-			function linear$2() {
-			  var scale = continuous(deinterpolateLinear, interpolateNumber);
-
-			  scale.copy = function() {
-				return copy(scale, linear$2());
-			  };
-
-			  return linearish(scale);
-			}
-
-			function identity$4() {
-			  var domain = [0, 1];
-
-			  function scale(x) {
-				return +x;
-			  }
-
-			  scale.invert = scale;
-
-			  scale.domain = scale.range = function(_) {
-				return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
-			  };
-
-			  scale.copy = function() {
-				return identity$4().domain(domain);
-			  };
-
-			  return linearish(scale);
-			}
-
-			var nice = function(domain, interval) {
-			  domain = domain.slice();
-
-			  var i0 = 0,
-				  i1 = domain.length - 1,
-				  x0 = domain[i0],
-				  x1 = domain[i1],
-				  t;
-
-			  if (x1 < x0) {
-				t = i0, i0 = i1, i1 = t;
-				t = x0, x0 = x1, x1 = t;
-			  }
-
-			  domain[i0] = interval.floor(x0);
-			  domain[i1] = interval.ceil(x1);
-			  return domain;
-			};
-
-			function deinterpolate(a, b) {
-			  return (b = Math.log(b / a))
-				  ? function(x) { return Math.log(x / a) / b; }
-				  : constant$4(b);
-			}
-
-			function reinterpolate(a, b) {
-			  return a < 0
-				  ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
-				  : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
-			}
-
-			function pow10(x) {
-			  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
-			}
-
-			function powp(base) {
-			  return base === 10 ? pow10
-				  : base === Math.E ? Math.exp
-				  : function(x) { return Math.pow(base, x); };
-			}
-
-			function logp(base) {
-			  return base === Math.E ? Math.log
-				  : base === 10 && Math.log10
-				  || base === 2 && Math.log2
-				  || (base = Math.log(base), function(x) { return Math.log(x) / base; });
-			}
-
-			function reflect(f) {
-			  return function(x) {
-				return -f(-x);
-			  };
-			}
-
-			function log() {
-			  var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
-				  domain = scale.domain,
-				  base = 10,
-				  logs = logp(10),
-				  pows = powp(10);
-
-			  function rescale() {
-				logs = logp(base), pows = powp(base);
-				if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
-				return scale;
-			  }
-
-			  scale.base = function(_) {
-				return arguments.length ? (base = +_, rescale()) : base;
-			  };
-
-			  scale.domain = function(_) {
-				return arguments.length ? (domain(_), rescale()) : domain();
-			  };
-
-			  scale.ticks = function(count) {
-				var d = domain(),
-					u = d[0],
-					v = d[d.length - 1],
-					r;
-
-				if (r = v < u) i = u, u = v, v = i;
-
-				var i = logs(u),
-					j = logs(v),
-					p,
-					k,
-					t,
-					n = count == null ? 10 : +count,
-					z = [];
-
-				if (!(base % 1) && j - i < n) {
-				  i = Math.round(i) - 1, j = Math.round(j) + 1;
-				  if (u > 0) for (; i < j; ++i) {
-					for (k = 1, p = pows(i); k < base; ++k) {
-					  t = p * k;
-					  if (t < u) continue;
-					  if (t > v) break;
-					  z.push(t);
-					}
-				  } else for (; i < j; ++i) {
-					for (k = base - 1, p = pows(i); k >= 1; --k) {
-					  t = p * k;
-					  if (t < u) continue;
-					  if (t > v) break;
-					  z.push(t);
-					}
-				  }
-				} else {
-				  z = ticks(i, j, Math.min(j - i, n)).map(pows);
-				}
-
-				return r ? z.reverse() : z;
-			  };
-
-			  scale.tickFormat = function(count, specifier) {
-				if (specifier == null) specifier = base === 10 ? ".0e" : ",";
-				if (typeof specifier !== "function") specifier = exports.format(specifier);
-				if (count === Infinity) return specifier;
-				if (count == null) count = 10;
-				var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
-				return function(d) {
-				  var i = d / pows(Math.round(logs(d)));
-				  if (i * base < base - 0.5) i *= base;
-				  return i <= k ? specifier(d) : "";
-				};
-			  };
-
-			  scale.nice = function() {
-				return domain(nice(domain(), {
-				  floor: function(x) { return pows(Math.floor(logs(x))); },
-				  ceil: function(x) { return pows(Math.ceil(logs(x))); }
-				}));
-			  };
-
-			  scale.copy = function() {
-				return copy(scale, log().base(base));
-			  };
-
-			  return scale;
-			}
-
-			function raise(x, exponent) {
-			  return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
-			}
-
-			function pow() {
-			  var exponent = 1,
-				  scale = continuous(deinterpolate, reinterpolate),
-				  domain = scale.domain;
-
-			  function deinterpolate(a, b) {
-				return (b = raise(b, exponent) - (a = raise(a, exponent)))
-					? function(x) { return (raise(x, exponent) - a) / b; }
-					: constant$4(b);
-			  }
-
-			  function reinterpolate(a, b) {
-				b = raise(b, exponent) - (a = raise(a, exponent));
-				return function(t) { return raise(a + b * t, 1 / exponent); };
-			  }
-
-			  scale.exponent = function(_) {
-				return arguments.length ? (exponent = +_, domain(domain())) : exponent;
-			  };
-
-			  scale.copy = function() {
-				return copy(scale, pow().exponent(exponent));
-			  };
-
-			  return linearish(scale);
-			}
-
-			function sqrt() {
-			  return pow().exponent(0.5);
-			}
-
-			function quantile$$1() {
-			  var domain = [],
-				  range$$1 = [],
-				  thresholds = [];
-
-			  function rescale() {
-				var i = 0, n = Math.max(1, range$$1.length);
-				thresholds = new Array(n - 1);
-				while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
-				return scale;
-			  }
-
-			  function scale(x) {
-				if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
-			  }
-
-			  scale.invertExtent = function(y) {
-				var i = range$$1.indexOf(y);
-				return i < 0 ? [NaN, NaN] : [
-				  i > 0 ? thresholds[i - 1] : domain[0],
-				  i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
-				];
-			  };
-
-			  scale.domain = function(_) {
-				if (!arguments.length) return domain.slice();
-				domain = [];
-				for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
-				domain.sort(ascending);
-				return rescale();
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
-			  };
-
-			  scale.quantiles = function() {
-				return thresholds.slice();
-			  };
-
-			  scale.copy = function() {
-				return quantile$$1()
-					.domain(domain)
-					.range(range$$1);
-			  };
-
-			  return scale;
-			}
-
-			function quantize$1() {
-			  var x0 = 0,
-				  x1 = 1,
-				  n = 1,
-				  domain = [0.5],
-				  range$$1 = [0, 1];
-
-			  function scale(x) {
-				if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
-			  }
-
-			  function rescale() {
-				var i = -1;
-				domain = new Array(n);
-				while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
-				return scale;
-			  }
-
-			  scale.domain = function(_) {
-				return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice();
-			  };
-
-			  scale.invertExtent = function(y) {
-				var i = range$$1.indexOf(y);
-				return i < 0 ? [NaN, NaN]
-					: i < 1 ? [x0, domain[0]]
-					: i >= n ? [domain[n - 1], x1]
-					: [domain[i - 1], domain[i]];
-			  };
-
-			  scale.copy = function() {
-				return quantize$1()
-					.domain([x0, x1])
-					.range(range$$1);
-			  };
-
-			  return linearish(scale);
-			}
-
-			function threshold$1() {
-			  var domain = [0.5],
-				  range$$1 = [0, 1],
-				  n = 1;
-
-			  function scale(x) {
-				if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
-			  }
-
-			  scale.domain = function(_) {
-				return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
-			  };
-
-			  scale.range = function(_) {
-				return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
-			  };
-
-			  scale.invertExtent = function(y) {
-				var i = range$$1.indexOf(y);
-				return [domain[i - 1], domain[i]];
-			  };
-
-			  scale.copy = function() {
-				return threshold$1()
-					.domain(domain)
-					.range(range$$1);
-			  };
-
-			  return scale;
-			}
-
-			var durationSecond$1 = 1000;
-			var durationMinute$1 = durationSecond$1 * 60;
-			var durationHour$1 = durationMinute$1 * 60;
-			var durationDay$1 = durationHour$1 * 24;
-			var durationWeek$1 = durationDay$1 * 7;
-			var durationMonth = durationDay$1 * 30;
-			var durationYear = durationDay$1 * 365;
-
-			function date$1(t) {
-			  return new Date(t);
-			}
-
-			function number$2(t) {
-			  return t instanceof Date ? +t : +new Date(+t);
-			}
-
-			function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
-			  var scale = continuous(deinterpolateLinear, interpolateNumber),
-				  invert = scale.invert,
-				  domain = scale.domain;
-
-			  var formatMillisecond = format(".%L"),
-				  formatSecond = format(":%S"),
-				  formatMinute = format("%I:%M"),
-				  formatHour = format("%I %p"),
-				  formatDay = format("%a %d"),
-				  formatWeek = format("%b %d"),
-				  formatMonth = format("%B"),
-				  formatYear = format("%Y");
-
-			  var tickIntervals = [
-				[second$$1,  1,      durationSecond$1],
-				[second$$1,  5,  5 * durationSecond$1],
-				[second$$1, 15, 15 * durationSecond$1],
-				[second$$1, 30, 30 * durationSecond$1],
-				[minute$$1,  1,      durationMinute$1],
-				[minute$$1,  5,  5 * durationMinute$1],
-				[minute$$1, 15, 15 * durationMinute$1],
-				[minute$$1, 30, 30 * durationMinute$1],
-				[  hour$$1,  1,      durationHour$1  ],
-				[  hour$$1,  3,  3 * durationHour$1  ],
-				[  hour$$1,  6,  6 * durationHour$1  ],
-				[  hour$$1, 12, 12 * durationHour$1  ],
-				[   day$$1,  1,      durationDay$1   ],
-				[   day$$1,  2,  2 * durationDay$1   ],
-				[  week,  1,      durationWeek$1  ],
-				[ month$$1,  1,      durationMonth ],
-				[ month$$1,  3,  3 * durationMonth ],
-				[  year$$1,  1,      durationYear  ]
-			  ];
-
-			  function tickFormat(date) {
-				return (second$$1(date) < date ? formatMillisecond
-					: minute$$1(date) < date ? formatSecond
-					: hour$$1(date) < date ? formatMinute
-					: day$$1(date) < date ? formatHour
-					: month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
-					: year$$1(date) < date ? formatMonth
-					: formatYear)(date);
-			  }
-
-			  function tickInterval(interval, start, stop, step) {
-				if (interval == null) interval = 10;
-
-				// If a desired tick count is specified, pick a reasonable tick interval
-				// based on the extent of the domain and a rough estimate of tick size.
-				// Otherwise, assume interval is already a time interval and use it.
-				if (typeof interval === "number") {
-				  var target = Math.abs(stop - start) / interval,
-					  i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
-				  if (i === tickIntervals.length) {
-					step = tickStep(start / durationYear, stop / durationYear, interval);
-					interval = year$$1;
-				  } else if (i) {
-					i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
-					step = i[1];
-					interval = i[0];
-				  } else {
-					step = tickStep(start, stop, interval);
-					interval = millisecond$$1;
-				  }
-				}
-
-				return step == null ? interval : interval.every(step);
-			  }
-
-			  scale.invert = function(y) {
-				return new Date(invert(y));
-			  };
-
-			  scale.domain = function(_) {
-				return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
-			  };
-
-			  scale.ticks = function(interval, step) {
-				var d = domain(),
-					t0 = d[0],
-					t1 = d[d.length - 1],
-					r = t1 < t0,
-					t;
-				if (r) t = t0, t0 = t1, t1 = t;
-				t = tickInterval(interval, t0, t1, step);
-				t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
-				return r ? t.reverse() : t;
-			  };
-
-			  scale.tickFormat = function(count, specifier) {
-				return specifier == null ? tickFormat : format(specifier);
-			  };
-
-			  scale.nice = function(interval, step) {
-				var d = domain();
-				return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
-					? domain(nice(d, interval))
-					: scale;
-			  };
-
-			  scale.copy = function() {
-				return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
-			  };
-
-			  return scale;
-			}
-
-			var time = function() {
-			  return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
-			};
-
-			var utcTime = function() {
-			  return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
-			};
-
-			var colors = function(s) {
-			  return s.match(/.{6}/g).map(function(x) {
-				return "#" + x;
-			  });
-			};
-
-			var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
-
-			var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
-
-			var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
-
-			var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
-
-			var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
-
-			var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
-
-			var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
-
-			var rainbow = cubehelix();
-
-			var rainbow$1 = function(t) {
-			  if (t < 0 || t > 1) t -= Math.floor(t);
-			  var ts = Math.abs(t - 0.5);
-			  rainbow.h = 360 * t - 100;
-			  rainbow.s = 1.5 - 1.5 * ts;
-			  rainbow.l = 0.8 - 0.9 * ts;
-			  return rainbow + "";
-			};
-
-			function ramp(range) {
-			  var n = range.length;
-			  return function(t) {
-				return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
-			  };
-			}
-
-			var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
-
-			var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
-
-			var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
-
-			var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
-
-			function sequential(interpolator) {
-			  var x0 = 0,
-				  x1 = 1,
-				  clamp = false;
-
-			  function scale(x) {
-				var t = (x - x0) / (x1 - x0);
-				return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
-			  }
-
-			  scale.domain = function(_) {
-				return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
-			  };
-
-			  scale.clamp = function(_) {
-				return arguments.length ? (clamp = !!_, scale) : clamp;
-			  };
-
-			  scale.interpolator = function(_) {
-				return arguments.length ? (interpolator = _, scale) : interpolator;
-			  };
-
-			  scale.copy = function() {
-				return sequential(interpolator).domain([x0, x1]).clamp(clamp);
-			  };
-
-			  return linearish(scale);
-			}
-
-			var xhtml = "http://www.w3.org/1999/xhtml";
-
-			var namespaces = {
-			  svg: "http://www.w3.org/2000/svg",
-			  xhtml: xhtml,
-			  xlink: "http://www.w3.org/1999/xlink",
-			  xml: "http://www.w3.org/XML/1998/namespace",
-			  xmlns: "http://www.w3.org/2000/xmlns/"
-			};
-
-			var namespace = function(name) {
-			  var prefix = name += "", i = prefix.indexOf(":");
-			  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
-			  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
-			};
-
-			function creatorInherit(name) {
-			  return function() {
-				var document = this.ownerDocument,
-					uri = this.namespaceURI;
-				return uri === xhtml && document.documentElement.namespaceURI === xhtml
-					? document.createElement(name)
-					: document.createElementNS(uri, name);
-			  };
-			}
-
-			function creatorFixed(fullname) {
-			  return function() {
-				return this.ownerDocument.createElementNS(fullname.space, fullname.local);
-			  };
-			}
-
-			var creator = function(name) {
-			  var fullname = namespace(name);
-			  return (fullname.local
-				  ? creatorFixed
-				  : creatorInherit)(fullname);
-			};
-
-			var nextId = 0;
-
-			function local() {
-			  return new Local;
-			}
-
-			function Local() {
-			  this._ = "@" + (++nextId).toString(36);
-			}
-
-			Local.prototype = local.prototype = {
-			  constructor: Local,
-			  get: function(node) {
-				var id = this._;
-				while (!(id in node)) if (!(node = node.parentNode)) return;
-				return node[id];
-			  },
-			  set: function(node, value) {
-				return node[this._] = value;
-			  },
-			  remove: function(node) {
-				return this._ in node && delete node[this._];
-			  },
-			  toString: function() {
-				return this._;
-			  }
-			};
-
-			var matcher = function(selector) {
-			  return function() {
-				return this.matches(selector);
-			  };
-			};
-
-			if (typeof document !== "undefined") {
-			  var element = document.documentElement;
-			  if (!element.matches) {
-				var vendorMatches = element.webkitMatchesSelector
-					|| element.msMatchesSelector
-					|| element.mozMatchesSelector
-					|| element.oMatchesSelector;
-				matcher = function(selector) {
-				  return function() {
-					return vendorMatches.call(this, selector);
-				  };
-				};
-			  }
-			}
-
-			var matcher$1 = matcher;
-
-			var filterEvents = {};
-
-			exports.event = null;
-
-			if (typeof document !== "undefined") {
-			  var element$1 = document.documentElement;
-			  if (!("onmouseenter" in element$1)) {
-				filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
-			  }
-			}
-
-			function filterContextListener(listener, index, group) {
-			  listener = contextListener(listener, index, group);
-			  return function(event) {
-				var related = event.relatedTarget;
-				if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
-				  listener.call(this, event);
-				}
-			  };
-			}
-
-			function contextListener(listener, index, group) {
-			  return function(event1) {
-				var event0 = exports.event; // Events can be reentrant (e.g., focus).
-				exports.event = event1;
-				try {
-				  listener.call(this, this.__data__, index, group);
-				} finally {
-				  exports.event = event0;
-				}
-			  };
-			}
-
-			function parseTypenames$1(typenames) {
-			  return typenames.trim().split(/^|\s+/).map(function(t) {
-				var name = "", i = t.indexOf(".");
-				if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-				return {type: t, name: name};
-			  });
-			}
-
-			function onRemove(typename) {
-			  return function() {
-				var on = this.__on;
-				if (!on) return;
-				for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
-				  if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
-					this.removeEventListener(o.type, o.listener, o.capture);
-				  } else {
-					on[++i] = o;
-				  }
-				}
-				if (++i) on.length = i;
-				else delete this.__on;
-			  };
-			}
-
-			function onAdd(typename, value, capture) {
-			  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
-			  return function(d, i, group) {
-				var on = this.__on, o, listener = wrap(value, i, group);
-				if (on) for (var j = 0, m = on.length; j < m; ++j) {
-				  if ((o = on[j]).type === typename.type && o.name === typename.name) {
-					this.removeEventListener(o.type, o.listener, o.capture);
-					this.addEventListener(o.type, o.listener = listener, o.capture = capture);
-					o.value = value;
-					return;
-				  }
-				}
-				this.addEventListener(typename.type, listener, capture);
-				o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
-				if (!on) this.__on = [o];
-				else on.push(o);
-			  };
-			}
-
-			var selection_on = function(typename, value, capture) {
-			  var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
-
-			  if (arguments.length < 2) {
-				var on = this.node().__on;
-				if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
-				  for (i = 0, o = on[j]; i < n; ++i) {
-					if ((t = typenames[i]).type === o.type && t.name === o.name) {
-					  return o.value;
-					}
-				  }
-				}
-				return;
-			  }
-
-			  on = value ? onAdd : onRemove;
-			  if (capture == null) capture = false;
-			  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
-			  return this;
-			};
-
-			function customEvent(event1, listener, that, args) {
-			  var event0 = exports.event;
-			  event1.sourceEvent = exports.event;
-			  exports.event = event1;
-			  try {
-				return listener.apply(that, args);
-			  } finally {
-				exports.event = event0;
-			  }
-			}
-
-			var sourceEvent = function() {
-			  var current = exports.event, source;
-			  while (source = current.sourceEvent) current = source;
-			  return current;
-			};
-
-			var point$5 = function(node, event) {
-			  var svg = node.ownerSVGElement || node;
-
-			  if (svg.createSVGPoint) {
-				var point = svg.createSVGPoint();
-				point.x = event.clientX, point.y = event.clientY;
-				point = point.matrixTransform(node.getScreenCTM().inverse());
-				return [point.x, point.y];
-			  }
-
-			  var rect = node.getBoundingClientRect();
-			  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
-			};
-
-			var mouse = function(node) {
-			  var event = sourceEvent();
-			  if (event.changedTouches) event = event.changedTouches[0];
-			  return point$5(node, event);
-			};
-
-			function none$2() {}
-
-			var selector = function(selector) {
-			  return selector == null ? none$2 : function() {
-				return this.querySelector(selector);
-			  };
-			};
-
-			var selection_select = function(select) {
-			  if (typeof select !== "function") select = selector(select);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-				  if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
-					if ("__data__" in node) subnode.__data__ = node.__data__;
-					subgroup[i] = subnode;
-				  }
-				}
-			  }
-
-			  return new Selection(subgroups, this._parents);
-			};
-
-			function empty() {
-			  return [];
-			}
-
-			var selectorAll = function(selector) {
-			  return selector == null ? empty : function() {
-				return this.querySelectorAll(selector);
-			  };
-			};
-
-			var selection_selectAll = function(select) {
-			  if (typeof select !== "function") select = selectorAll(select);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-				  if (node = group[i]) {
-					subgroups.push(select.call(node, node.__data__, i, group));
-					parents.push(node);
-				  }
-				}
-			  }
-
-			  return new Selection(subgroups, parents);
-			};
-
-			var selection_filter = function(match) {
-			  if (typeof match !== "function") match = matcher$1(match);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-				  if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-					subgroup.push(node);
-				  }
-				}
-			  }
-
-			  return new Selection(subgroups, this._parents);
-			};
-
-			var sparse = function(update) {
-			  return new Array(update.length);
-			};
-
-			var selection_enter = function() {
-			  return new Selection(this._enter || this._groups.map(sparse), this._parents);
-			};
-
-			function EnterNode(parent, datum) {
-			  this.ownerDocument = parent.ownerDocument;
-			  this.namespaceURI = parent.namespaceURI;
-			  this._next = null;
-			  this._parent = parent;
-			  this.__data__ = datum;
-			}
-
-			EnterNode.prototype = {
-			  constructor: EnterNode,
-			  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
-			  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
-			  querySelector: function(selector) { return this._parent.querySelector(selector); },
-			  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
-			};
-
-			var constant$5 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var keyPrefix = "$"; // Protect against keys like “__proto__”.
-
-			function bindIndex(parent, group, enter, update, exit, data) {
-			  var i = 0,
-				  node,
-				  groupLength = group.length,
-				  dataLength = data.length;
-
-			  // Put any non-null nodes that fit into update.
-			  // Put any null nodes into enter.
-			  // Put any remaining data into enter.
-			  for (; i < dataLength; ++i) {
-				if (node = group[i]) {
-				  node.__data__ = data[i];
-				  update[i] = node;
-				} else {
-				  enter[i] = new EnterNode(parent, data[i]);
-				}
-			  }
-
-			  // Put any non-null nodes that don’t fit into exit.
-			  for (; i < groupLength; ++i) {
-				if (node = group[i]) {
-				  exit[i] = node;
-				}
-			  }
-			}
-
-			function bindKey(parent, group, enter, update, exit, data, key) {
-			  var i,
-				  node,
-				  nodeByKeyValue = {},
-				  groupLength = group.length,
-				  dataLength = data.length,
-				  keyValues = new Array(groupLength),
-				  keyValue;
-
-			  // Compute the key for each node.
-			  // If multiple nodes have the same key, the duplicates are added to exit.
-			  for (i = 0; i < groupLength; ++i) {
-				if (node = group[i]) {
-				  keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
-				  if (keyValue in nodeByKeyValue) {
-					exit[i] = node;
-				  } else {
-					nodeByKeyValue[keyValue] = node;
-				  }
-				}
-			  }
-
-			  // Compute the key for each datum.
-			  // If there a node associated with this key, join and add it to update.
-			  // If there is not (or the key is a duplicate), add it to enter.
-			  for (i = 0; i < dataLength; ++i) {
-				keyValue = keyPrefix + key.call(parent, data[i], i, data);
-				if (node = nodeByKeyValue[keyValue]) {
-				  update[i] = node;
-				  node.__data__ = data[i];
-				  nodeByKeyValue[keyValue] = null;
-				} else {
-				  enter[i] = new EnterNode(parent, data[i]);
-				}
-			  }
-
-			  // Add any remaining nodes that were not bound to data to exit.
-			  for (i = 0; i < groupLength; ++i) {
-				if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
-				  exit[i] = node;
-				}
-			  }
-			}
-
-			var selection_data = function(value, key) {
-			  if (!value) {
-				data = new Array(this.size()), j = -1;
-				this.each(function(d) { data[++j] = d; });
-				return data;
-			  }
-
-			  var bind = key ? bindKey : bindIndex,
-				  parents = this._parents,
-				  groups = this._groups;
-
-			  if (typeof value !== "function") value = constant$5(value);
-
-			  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
-				var parent = parents[j],
-					group = groups[j],
-					groupLength = group.length,
-					data = value.call(parent, parent && parent.__data__, j, parents),
-					dataLength = data.length,
-					enterGroup = enter[j] = new Array(dataLength),
-					updateGroup = update[j] = new Array(dataLength),
-					exitGroup = exit[j] = new Array(groupLength);
-
-				bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
-
-				// Now connect the enter nodes to their following update node, such that
-				// appendChild can insert the materialized enter node before this node,
-				// rather than at the end of the parent node.
-				for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
-				  if (previous = enterGroup[i0]) {
-					if (i0 >= i1) i1 = i0 + 1;
-					while (!(next = updateGroup[i1]) && ++i1 < dataLength);
-					previous._next = next || null;
-				  }
-				}
-			  }
-
-			  update = new Selection(update, parents);
-			  update._enter = enter;
-			  update._exit = exit;
-			  return update;
-			};
-
-			var selection_exit = function() {
-			  return new Selection(this._exit || this._groups.map(sparse), this._parents);
-			};
-
-			var selection_merge = function(selection) {
-
-			  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-				for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-				  if (node = group0[i] || group1[i]) {
-					merge[i] = node;
-				  }
-				}
-			  }
-
-			  for (; j < m0; ++j) {
-				merges[j] = groups0[j];
-			  }
-
-			  return new Selection(merges, this._parents);
-			};
-
-			var selection_order = function() {
-
-			  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
-				for (var group = groups[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;
-			};
-
-			var selection_sort = function(compare) {
-			  if (!compare) compare = ascending$2;
-
-			  function compareNode(a, b) {
-				return a && b ? compare(a.__data__, b.__data__) : !a - !b;
-			  }
-
-			  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
-				  if (node = group[i]) {
-					sortgroup[i] = node;
-				  }
-				}
-				sortgroup.sort(compareNode);
-			  }
-
-			  return new Selection(sortgroups, this._parents).order();
-			};
-
-			function ascending$2(a, b) {
-			  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-			}
-
-			var selection_call = function() {
-			  var callback = arguments[0];
-			  arguments[0] = this;
-			  callback.apply(null, arguments);
-			  return this;
-			};
-
-			var selection_nodes = function() {
-			  var nodes = new Array(this.size()), i = -1;
-			  this.each(function() { nodes[++i] = this; });
-			  return nodes;
-			};
-
-			var selection_node = function() {
-
-			  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
-				for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
-				  var node = group[i];
-				  if (node) return node;
-				}
-			  }
-
-			  return null;
-			};
-
-			var selection_size = function() {
-			  var size = 0;
-			  this.each(function() { ++size; });
-			  return size;
-			};
-
-			var selection_empty = function() {
-			  return !this.node();
-			};
-
-			var selection_each = function(callback) {
-
-			  for (var groups = this._groups, 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.call(node, node.__data__, i, group);
-				}
-			  }
-
-			  return this;
-			};
-
-			function attrRemove(name) {
-			  return function() {
-				this.removeAttribute(name);
-			  };
-			}
-
-			function attrRemoveNS(fullname) {
-			  return function() {
-				this.removeAttributeNS(fullname.space, fullname.local);
-			  };
-			}
-
-			function attrConstant(name, value) {
-			  return function() {
-				this.setAttribute(name, value);
-			  };
-			}
-
-			function attrConstantNS(fullname, value) {
-			  return function() {
-				this.setAttributeNS(fullname.space, fullname.local, value);
-			  };
-			}
-
-			function attrFunction(name, value) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				if (v == null) this.removeAttribute(name);
-				else this.setAttribute(name, v);
-			  };
-			}
-
-			function attrFunctionNS(fullname, value) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
-				else this.setAttributeNS(fullname.space, fullname.local, v);
-			  };
-			}
-
-			var selection_attr = function(name, value) {
-			  var fullname = namespace(name);
-
-			  if (arguments.length < 2) {
-				var node = this.node();
-				return fullname.local
-					? node.getAttributeNS(fullname.space, fullname.local)
-					: node.getAttribute(fullname);
-			  }
-
-			  return this.each((value == null
-				  ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
-				  ? (fullname.local ? attrFunctionNS : attrFunction)
-				  : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
-			};
-
-			var window = function(node) {
-			  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
-				  || (node.document && node) // node is a Window
-				  || node.defaultView; // node is a Document
-			};
-
-			function styleRemove(name) {
-			  return function() {
-				this.style.removeProperty(name);
-			  };
-			}
-
-			function styleConstant(name, value, priority) {
-			  return function() {
-				this.style.setProperty(name, value, priority);
-			  };
-			}
-
-			function styleFunction(name, value, priority) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				if (v == null) this.style.removeProperty(name);
-				else this.style.setProperty(name, v, priority);
-			  };
-			}
-
-			var selection_style = function(name, value, priority) {
-			  var node;
-			  return arguments.length > 1
-				  ? this.each((value == null
-						? styleRemove : typeof value === "function"
-						? styleFunction
-						: styleConstant)(name, value, priority == null ? "" : priority))
-				  : window(node = this.node())
-					  .getComputedStyle(node, null)
-					  .getPropertyValue(name);
-			};
-
-			function propertyRemove(name) {
-			  return function() {
-				delete this[name];
-			  };
-			}
-
-			function propertyConstant(name, value) {
-			  return function() {
-				this[name] = value;
-			  };
-			}
-
-			function propertyFunction(name, value) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				if (v == null) delete this[name];
-				else this[name] = v;
-			  };
-			}
-
-			var selection_property = function(name, value) {
-			  return arguments.length > 1
-				  ? this.each((value == null
-					  ? propertyRemove : typeof value === "function"
-					  ? propertyFunction
-					  : propertyConstant)(name, value))
-				  : this.node()[name];
-			};
-
-			function classArray(string) {
-			  return string.trim().split(/^|\s+/);
-			}
-
-			function classList(node) {
-			  return node.classList || new ClassList(node);
-			}
-
-			function ClassList(node) {
-			  this._node = node;
-			  this._names = classArray(node.getAttribute("class") || "");
-			}
-
-			ClassList.prototype = {
-			  add: function(name) {
-				var i = this._names.indexOf(name);
-				if (i < 0) {
-				  this._names.push(name);
-				  this._node.setAttribute("class", this._names.join(" "));
-				}
-			  },
-			  remove: function(name) {
-				var i = this._names.indexOf(name);
-				if (i >= 0) {
-				  this._names.splice(i, 1);
-				  this._node.setAttribute("class", this._names.join(" "));
-				}
-			  },
-			  contains: function(name) {
-				return this._names.indexOf(name) >= 0;
-			  }
-			};
-
-			function classedAdd(node, names) {
-			  var list = classList(node), i = -1, n = names.length;
-			  while (++i < n) list.add(names[i]);
-			}
-
-			function classedRemove(node, names) {
-			  var list = classList(node), i = -1, n = names.length;
-			  while (++i < n) list.remove(names[i]);
-			}
-
-			function classedTrue(names) {
-			  return function() {
-				classedAdd(this, names);
-			  };
-			}
-
-			function classedFalse(names) {
-			  return function() {
-				classedRemove(this, names);
-			  };
-			}
-
-			function classedFunction(names, value) {
-			  return function() {
-				(value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
-			  };
-			}
-
-			var selection_classed = function(name, value) {
-			  var names = classArray(name + "");
-
-			  if (arguments.length < 2) {
-				var list = classList(this.node()), i = -1, n = names.length;
-				while (++i < n) if (!list.contains(names[i])) return false;
-				return true;
-			  }
-
-			  return this.each((typeof value === "function"
-				  ? classedFunction : value
-				  ? classedTrue
-				  : classedFalse)(names, value));
-			};
-
-			function textRemove() {
-			  this.textContent = "";
-			}
-
-			function textConstant(value) {
-			  return function() {
-				this.textContent = value;
-			  };
-			}
-
-			function textFunction(value) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				this.textContent = v == null ? "" : v;
-			  };
-			}
-
-			var selection_text = function(value) {
-			  return arguments.length
-				  ? this.each(value == null
-					  ? textRemove : (typeof value === "function"
-					  ? textFunction
-					  : textConstant)(value))
-				  : this.node().textContent;
-			};
-
-			function htmlRemove() {
-			  this.innerHTML = "";
-			}
-
-			function htmlConstant(value) {
-			  return function() {
-				this.innerHTML = value;
-			  };
-			}
-
-			function htmlFunction(value) {
-			  return function() {
-				var v = value.apply(this, arguments);
-				this.innerHTML = v == null ? "" : v;
-			  };
-			}
-
-			var selection_html = function(value) {
-			  return arguments.length
-				  ? this.each(value == null
-					  ? htmlRemove : (typeof value === "function"
-					  ? htmlFunction
-					  : htmlConstant)(value))
-				  : this.node().innerHTML;
-			};
-
-			function raise$1() {
-			  if (this.nextSibling) this.parentNode.appendChild(this);
-			}
-
-			var selection_raise = function() {
-			  return this.each(raise$1);
-			};
-
-			function lower() {
-			  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
-			}
-
-			var selection_lower = function() {
-			  return this.each(lower);
-			};
-
-			var selection_append = function(name) {
-			  var create = typeof name === "function" ? name : creator(name);
-			  return this.select(function() {
-				return this.appendChild(create.apply(this, arguments));
-			  });
-			};
-
-			function constantNull() {
-			  return null;
-			}
-
-			var selection_insert = function(name, before) {
-			  var create = typeof name === "function" ? name : creator(name),
-				  select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
-			  return this.select(function() {
-				return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
-			  });
-			};
-
-			function remove() {
-			  var parent = this.parentNode;
-			  if (parent) parent.removeChild(this);
-			}
-
-			var selection_remove = function() {
-			  return this.each(remove);
-			};
-
-			var selection_datum = function(value) {
-			  return arguments.length
-				  ? this.property("__data__", value)
-				  : this.node().__data__;
-			};
-
-			function dispatchEvent(node, type, params) {
-			  var window$$1 = window(node),
-				  event = window$$1.CustomEvent;
-
-			  if (event) {
-				event = new event(type, params);
-			  } else {
-				event = window$$1.document.createEvent("Event");
-				if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
-				else event.initEvent(type, false, false);
-			  }
-
-			  node.dispatchEvent(event);
-			}
-
-			function dispatchConstant(type, params) {
-			  return function() {
-				return dispatchEvent(this, type, params);
-			  };
-			}
-
-			function dispatchFunction(type, params) {
-			  return function() {
-				return dispatchEvent(this, type, params.apply(this, arguments));
-			  };
-			}
-
-			var selection_dispatch = function(type, params) {
-			  return this.each((typeof params === "function"
-				  ? dispatchFunction
-				  : dispatchConstant)(type, params));
-			};
-
-			var root = [null];
-
-			function Selection(groups, parents) {
-			  this._groups = groups;
-			  this._parents = parents;
-			}
-
-			function selection() {
-			  return new Selection([[document.documentElement]], root);
-			}
-
-			Selection.prototype = selection.prototype = {
-			  constructor: Selection,
-			  select: selection_select,
-			  selectAll: selection_selectAll,
-			  filter: selection_filter,
-			  data: selection_data,
-			  enter: selection_enter,
-			  exit: selection_exit,
-			  merge: selection_merge,
-			  order: selection_order,
-			  sort: selection_sort,
-			  call: selection_call,
-			  nodes: selection_nodes,
-			  node: selection_node,
-			  size: selection_size,
-			  empty: selection_empty,
-			  each: selection_each,
-			  attr: selection_attr,
-			  style: selection_style,
-			  property: selection_property,
-			  classed: selection_classed,
-			  text: selection_text,
-			  html: selection_html,
-			  raise: selection_raise,
-			  lower: selection_lower,
-			  append: selection_append,
-			  insert: selection_insert,
-			  remove: selection_remove,
-			  datum: selection_datum,
-			  on: selection_on,
-			  dispatch: selection_dispatch
-			};
-
-			var select = function(selector) {
-			  return typeof selector === "string"
-				  ? new Selection([[document.querySelector(selector)]], [document.documentElement])
-				  : new Selection([[selector]], root);
-			};
-
-			var selectAll = function(selector) {
-			  return typeof selector === "string"
-				  ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
-				  : new Selection([selector == null ? [] : selector], root);
-			};
-
-			var touch = function(node, touches, identifier) {
-			  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
-
-			  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
-				if ((touch = touches[i]).identifier === identifier) {
-				  return point$5(node, touch);
-				}
-			  }
-
-			  return null;
-			};
-
-			var touches = function(node, touches) {
-			  if (touches == null) touches = sourceEvent().touches;
-
-			  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
-				points[i] = point$5(node, touches[i]);
-			  }
-
-			  return points;
-			};
-
-			var emptyOn = dispatch("start", "end", "interrupt");
-			var emptyTween = [];
-
-			var CREATED = 0;
-			var SCHEDULED = 1;
-			var STARTING = 2;
-			var STARTED = 3;
-			var RUNNING = 4;
-			var ENDING = 5;
-			var ENDED = 6;
-
-			var schedule = function(node, name, id, index, group, timing) {
-			  var schedules = node.__transition;
-			  if (!schedules) node.__transition = {};
-			  else if (id in schedules) return;
-			  create(node, id, {
-				name: name,
-				index: index, // For context during callback.
-				group: group, // For context during callback.
-				on: emptyOn,
-				tween: emptyTween,
-				time: timing.time,
-				delay: timing.delay,
-				duration: timing.duration,
-				ease: timing.ease,
-				timer: null,
-				state: CREATED
-			  });
-			};
-
-			function init(node, id) {
-			  var schedule = node.__transition;
-			  if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
-			  return schedule;
-			}
-
-			function set$3(node, id) {
-			  var schedule = node.__transition;
-			  if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
-			  return schedule;
-			}
-
-			function get$1(node, id) {
-			  var schedule = node.__transition;
-			  if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
-			  return schedule;
-			}
-
-			function create(node, id, self) {
-			  var schedules = node.__transition,
-				  tween;
-
-			  // Initialize the self timer when the transition is created.
-			  // Note the actual delay is not known until the first callback!
-			  schedules[id] = self;
-			  self.timer = timer(schedule, 0, self.time);
-
-			  function schedule(elapsed) {
-				self.state = SCHEDULED;
-				self.timer.restart(start, self.delay, self.time);
-
-				// If the elapsed delay is less than our first sleep, start immediately.
-				if (self.delay <= elapsed) start(elapsed - self.delay);
-			  }
-
-			  function start(elapsed) {
-				var i, j, n, o;
-
-				// If the state is not SCHEDULED, then we previously errored on start.
-				if (self.state !== SCHEDULED) return stop();
-
-				for (i in schedules) {
-				  o = schedules[i];
-				  if (o.name !== self.name) continue;
-
-				  // While this element already has a starting transition during this frame,
-				  // defer starting an interrupting transition until that transition has a
-				  // chance to tick (and possibly end); see d3/d3-transition#54!
-				  if (o.state === STARTED) return timeout$1(start);
-
-				  // Interrupt the active transition, if any.
-				  // Dispatch the interrupt event.
-				  if (o.state === RUNNING) {
-					o.state = ENDED;
-					o.timer.stop();
-					o.on.call("interrupt", node, node.__data__, o.index, o.group);
-					delete schedules[i];
-				  }
-
-				  // Cancel any pre-empted transitions. No interrupt event is dispatched
-				  // because the cancelled transitions never started. Note that this also
-				  // removes this transition from the pending list!
-				  else if (+i < id) {
-					o.state = ENDED;
-					o.timer.stop();
-					delete schedules[i];
-				  }
-				}
-
-				// Defer the first tick to end of the current frame; see d3/d3#1576.
-				// Note the transition may be canceled after start and before the first tick!
-				// Note this must be scheduled before the start event; see d3/d3-transition#16!
-				// Assuming this is successful, subsequent callbacks go straight to tick.
-				timeout$1(function() {
-				  if (self.state === STARTED) {
-					self.state = RUNNING;
-					self.timer.restart(tick, self.delay, self.time);
-					tick(elapsed);
-				  }
-				});
-
-				// Dispatch the start event.
-				// Note this must be done before the tween are initialized.
-				self.state = STARTING;
-				self.on.call("start", node, node.__data__, self.index, self.group);
-				if (self.state !== STARTING) return; // interrupted
-				self.state = STARTED;
-
-				// Initialize the tween, deleting null tween.
-				tween = new Array(n = self.tween.length);
-				for (i = 0, j = -1; i < n; ++i) {
-				  if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
-					tween[++j] = o;
-				  }
-				}
-				tween.length = j + 1;
-			  }
-
-			  function tick(elapsed) {
-				var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
-					i = -1,
-					n = tween.length;
-
-				while (++i < n) {
-				  tween[i].call(null, t);
-				}
-
-				// Dispatch the end event.
-				if (self.state === ENDING) {
-				  self.on.call("end", node, node.__data__, self.index, self.group);
-				  stop();
-				}
-			  }
-
-			  function stop() {
-				self.state = ENDED;
-				self.timer.stop();
-				delete schedules[id];
-				for (var i in schedules) return; // eslint-disable-line no-unused-vars
-				delete node.__transition;
-			  }
-			}
-
-			var interrupt = function(node, name) {
-			  var schedules = node.__transition,
-				  schedule,
-				  active,
-				  empty = true,
-				  i;
-
-			  if (!schedules) return;
-
-			  name = name == null ? null : name + "";
-
-			  for (i in schedules) {
-				if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
-				active = schedule.state > STARTING && schedule.state < ENDING;
-				schedule.state = ENDED;
-				schedule.timer.stop();
-				if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
-				delete schedules[i];
-			  }
-
-			  if (empty) delete node.__transition;
-			};
-
-			var selection_interrupt = function(name) {
-			  return this.each(function() {
-				interrupt(this, name);
-			  });
-			};
-
-			function tweenRemove(id, name) {
-			  var tween0, tween1;
-			  return function() {
-				var schedule = set$3(this, id),
-					tween = schedule.tween;
-
-				// If this node shared tween with the previous node,
-				// just assign the updated shared tween and we’re done!
-				// Otherwise, copy-on-write.
-				if (tween !== tween0) {
-				  tween1 = tween0 = tween;
-				  for (var i = 0, n = tween1.length; i < n; ++i) {
-					if (tween1[i].name === name) {
-					  tween1 = tween1.slice();
-					  tween1.splice(i, 1);
-					  break;
-					}
-				  }
-				}
-
-				schedule.tween = tween1;
-			  };
-			}
-
-			function tweenFunction(id, name, value) {
-			  var tween0, tween1;
-			  if (typeof value !== "function") throw new Error;
-			  return function() {
-				var schedule = set$3(this, id),
-					tween = schedule.tween;
-
-				// If this node shared tween with the previous node,
-				// just assign the updated shared tween and we’re done!
-				// Otherwise, copy-on-write.
-				if (tween !== tween0) {
-				  tween1 = (tween0 = tween).slice();
-				  for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
-					if (tween1[i].name === name) {
-					  tween1[i] = t;
-					  break;
-					}
-				  }
-				  if (i === n) tween1.push(t);
-				}
-
-				schedule.tween = tween1;
-			  };
-			}
-
-			var transition_tween = function(name, value) {
-			  var id = this._id;
-
-			  name += "";
-
-			  if (arguments.length < 2) {
-				var tween = get$1(this.node(), id).tween;
-				for (var i = 0, n = tween.length, t; i < n; ++i) {
-				  if ((t = tween[i]).name === name) {
-					return t.value;
-				  }
-				}
-				return null;
-			  }
-
-			  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
-			};
-
-			function tweenValue(transition, name, value) {
-			  var id = transition._id;
-
-			  transition.each(function() {
-				var schedule = set$3(this, id);
-				(schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
-			  });
-
-			  return function(node) {
-				return get$1(node, id).value[name];
-			  };
-			}
-
-			var interpolate$1 = function(a, b) {
-			  var c;
-			  return (typeof b === "number" ? interpolateNumber
-				  : b instanceof color ? interpolateRgb
-				  : (c = color(b)) ? (b = c, interpolateRgb)
-				  : interpolateString)(a, b);
-			};
-
-			function attrRemove$1(name) {
-			  return function() {
-				this.removeAttribute(name);
-			  };
-			}
-
-			function attrRemoveNS$1(fullname) {
-			  return function() {
-				this.removeAttributeNS(fullname.space, fullname.local);
-			  };
-			}
-
-			function attrConstant$1(name, interpolate$$1, value1) {
-			  var value00,
-				  interpolate0;
-			  return function() {
-				var value0 = this.getAttribute(name);
-				return value0 === value1 ? null
-					: value0 === value00 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value1);
-			  };
-			}
-
-			function attrConstantNS$1(fullname, interpolate$$1, value1) {
-			  var value00,
-				  interpolate0;
-			  return function() {
-				var value0 = this.getAttributeNS(fullname.space, fullname.local);
-				return value0 === value1 ? null
-					: value0 === value00 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value1);
-			  };
-			}
-
-			function attrFunction$1(name, interpolate$$1, value) {
-			  var value00,
-				  value10,
-				  interpolate0;
-			  return function() {
-				var value0, value1 = value(this);
-				if (value1 == null) return void this.removeAttribute(name);
-				value0 = this.getAttribute(name);
-				return value0 === value1 ? null
-					: value0 === value00 && value1 === value10 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-			  };
-			}
-
-			function attrFunctionNS$1(fullname, interpolate$$1, value) {
-			  var value00,
-				  value10,
-				  interpolate0;
-			  return function() {
-				var value0, value1 = value(this);
-				if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
-				value0 = this.getAttributeNS(fullname.space, fullname.local);
-				return value0 === value1 ? null
-					: value0 === value00 && value1 === value10 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-			  };
-			}
-
-			var transition_attr = function(name, value) {
-			  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1;
-			  return this.attrTween(name, typeof value === "function"
-				  ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
-				  : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
-				  : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
-			};
-
-			function attrTweenNS(fullname, value) {
-			  function tween() {
-				var node = this, i = value.apply(node, arguments);
-				return i && function(t) {
-				  node.setAttributeNS(fullname.space, fullname.local, i(t));
-				};
-			  }
-			  tween._value = value;
-			  return tween;
-			}
-
-			function attrTween(name, value) {
-			  function tween() {
-				var node = this, i = value.apply(node, arguments);
-				return i && function(t) {
-				  node.setAttribute(name, i(t));
-				};
-			  }
-			  tween._value = value;
-			  return tween;
-			}
-
-			var transition_attrTween = function(name, value) {
-			  var key = "attr." + name;
-			  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-			  if (value == null) return this.tween(key, null);
-			  if (typeof value !== "function") throw new Error;
-			  var fullname = namespace(name);
-			  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
-			};
-
-			function delayFunction(id, value) {
-			  return function() {
-				init(this, id).delay = +value.apply(this, arguments);
-			  };
-			}
-
-			function delayConstant(id, value) {
-			  return value = +value, function() {
-				init(this, id).delay = value;
-			  };
-			}
-
-			var transition_delay = function(value) {
-			  var id = this._id;
-
-			  return arguments.length
-				  ? this.each((typeof value === "function"
-					  ? delayFunction
-					  : delayConstant)(id, value))
-				  : get$1(this.node(), id).delay;
-			};
-
-			function durationFunction(id, value) {
-			  return function() {
-				set$3(this, id).duration = +value.apply(this, arguments);
-			  };
-			}
-
-			function durationConstant(id, value) {
-			  return value = +value, function() {
-				set$3(this, id).duration = value;
-			  };
-			}
-
-			var transition_duration = function(value) {
-			  var id = this._id;
-
-			  return arguments.length
-				  ? this.each((typeof value === "function"
-					  ? durationFunction
-					  : durationConstant)(id, value))
-				  : get$1(this.node(), id).duration;
-			};
-
-			function easeConstant(id, value) {
-			  if (typeof value !== "function") throw new Error;
-			  return function() {
-				set$3(this, id).ease = value;
-			  };
-			}
-
-			var transition_ease = function(value) {
-			  var id = this._id;
-
-			  return arguments.length
-				  ? this.each(easeConstant(id, value))
-				  : get$1(this.node(), id).ease;
-			};
-
-			var transition_filter = function(match) {
-			  if (typeof match !== "function") match = matcher$1(match);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-				  if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-					subgroup.push(node);
-				  }
-				}
-			  }
-
-			  return new Transition(subgroups, this._parents, this._name, this._id);
-			};
-
-			var transition_merge = function(transition) {
-			  if (transition._id !== this._id) throw new Error;
-
-			  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-				for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-				  if (node = group0[i] || group1[i]) {
-					merge[i] = node;
-				  }
-				}
-			  }
-
-			  for (; j < m0; ++j) {
-				merges[j] = groups0[j];
-			  }
-
-			  return new Transition(merges, this._parents, this._name, this._id);
-			};
-
-			function start$1(name) {
-			  return (name + "").trim().split(/^|\s+/).every(function(t) {
-				var i = t.indexOf(".");
-				if (i >= 0) t = t.slice(0, i);
-				return !t || t === "start";
-			  });
-			}
-
-			function onFunction(id, name, listener) {
-			  var on0, on1, sit = start$1(name) ? init : set$3;
-			  return function() {
-				var schedule = sit(this, id),
-					on = schedule.on;
-
-				// If this node shared a dispatch with the previous node,
-				// just assign the updated shared dispatch and we’re done!
-				// Otherwise, copy-on-write.
-				if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
-
-				schedule.on = on1;
-			  };
-			}
-
-			var transition_on = function(name, listener) {
-			  var id = this._id;
-
-			  return arguments.length < 2
-				  ? get$1(this.node(), id).on.on(name)
-				  : this.each(onFunction(id, name, listener));
-			};
-
-			function removeFunction(id) {
-			  return function() {
-				var parent = this.parentNode;
-				for (var i in this.__transition) if (+i !== id) return;
-				if (parent) parent.removeChild(this);
-			  };
-			}
-
-			var transition_remove = function() {
-			  return this.on("end.remove", removeFunction(this._id));
-			};
-
-			var transition_select = function(select$$1) {
-			  var name = this._name,
-				  id = this._id;
-
-			  if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-				  if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
-					if ("__data__" in node) subnode.__data__ = node.__data__;
-					subgroup[i] = subnode;
-					schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
-				  }
-				}
-			  }
-
-			  return new Transition(subgroups, this._parents, name, id);
-			};
-
-			var transition_selectAll = function(select$$1) {
-			  var name = this._name,
-				  id = this._id;
-
-			  if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
-
-			  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-				  if (node = group[i]) {
-					for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
-					  if (child = children[k]) {
-						schedule(child, name, id, k, children, inherit);
-					  }
-					}
-					subgroups.push(children);
-					parents.push(node);
-				  }
-				}
-			  }
-
-			  return new Transition(subgroups, parents, name, id);
-			};
-
-			var Selection$1 = selection.prototype.constructor;
-
-			var transition_selection = function() {
-			  return new Selection$1(this._groups, this._parents);
-			};
-
-			function styleRemove$1(name, interpolate$$1) {
-			  var value00,
-				  value10,
-				  interpolate0;
-			  return function() {
-				var style = window(this).getComputedStyle(this, null),
-					value0 = style.getPropertyValue(name),
-					value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
-				return value0 === value1 ? null
-					: value0 === value00 && value1 === value10 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-			  };
-			}
-
-			function styleRemoveEnd(name) {
-			  return function() {
-				this.style.removeProperty(name);
-			  };
-			}
-
-			function styleConstant$1(name, interpolate$$1, value1) {
-			  var value00,
-				  interpolate0;
-			  return function() {
-				var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);
-				return value0 === value1 ? null
-					: value0 === value00 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value1);
-			  };
-			}
-
-			function styleFunction$1(name, interpolate$$1, value) {
-			  var value00,
-				  value10,
-				  interpolate0;
-			  return function() {
-				var style = window(this).getComputedStyle(this, null),
-					value0 = style.getPropertyValue(name),
-					value1 = value(this);
-				if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
-				return value0 === value1 ? null
-					: value0 === value00 && value1 === value10 ? interpolate0
-					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-			  };
-			}
-
-			var transition_style = function(name, value, priority) {
-			  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1;
-			  return value == null ? this
-					  .styleTween(name, styleRemove$1(name, i))
-					  .on("end.style." + name, styleRemoveEnd(name))
-				  : this.styleTween(name, typeof value === "function"
-					  ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
-					  : styleConstant$1(name, i, value), priority);
-			};
-
-			function styleTween(name, value, priority) {
-			  function tween() {
-				var node = this, i = value.apply(node, arguments);
-				return i && function(t) {
-				  node.style.setProperty(name, i(t), priority);
-				};
-			  }
-			  tween._value = value;
-			  return tween;
-			}
-
-			var transition_styleTween = function(name, value, priority) {
-			  var key = "style." + (name += "");
-			  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-			  if (value == null) return this.tween(key, null);
-			  if (typeof value !== "function") throw new Error;
-			  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
-			};
-
-			function textConstant$1(value) {
-			  return function() {
-				this.textContent = value;
-			  };
-			}
-
-			function textFunction$1(value) {
-			  return function() {
-				var value1 = value(this);
-				this.textContent = value1 == null ? "" : value1;
-			  };
-			}
-
-			var transition_text = function(value) {
-			  return this.tween("text", typeof value === "function"
-				  ? textFunction$1(tweenValue(this, "text", value))
-				  : textConstant$1(value == null ? "" : value + ""));
-			};
-
-			var transition_transition = function() {
-			  var name = this._name,
-				  id0 = this._id,
-				  id1 = newId();
-
-			  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-				  if (node = group[i]) {
-					var inherit = get$1(node, id0);
-					schedule(node, name, id1, i, group, {
-					  time: inherit.time + inherit.delay + inherit.duration,
-					  delay: 0,
-					  duration: inherit.duration,
-					  ease: inherit.ease
-					});
-				  }
-				}
-			  }
-
-			  return new Transition(groups, this._parents, name, id1);
-			};
-
-			var id = 0;
-
-			function Transition(groups, parents, name, id) {
-			  this._groups = groups;
-			  this._parents = parents;
-			  this._name = name;
-			  this._id = id;
-			}
-
-			function transition(name) {
-			  return selection().transition(name);
-			}
-
-			function newId() {
-			  return ++id;
-			}
-
-			var selection_prototype = selection.prototype;
-
-			Transition.prototype = transition.prototype = {
-			  constructor: Transition,
-			  select: transition_select,
-			  selectAll: transition_selectAll,
-			  filter: transition_filter,
-			  merge: transition_merge,
-			  selection: transition_selection,
-			  transition: transition_transition,
-			  call: selection_prototype.call,
-			  nodes: selection_prototype.nodes,
-			  node: selection_prototype.node,
-			  size: selection_prototype.size,
-			  empty: selection_prototype.empty,
-			  each: selection_prototype.each,
-			  on: transition_on,
-			  attr: transition_attr,
-			  attrTween: transition_attrTween,
-			  style: transition_style,
-			  styleTween: transition_styleTween,
-			  text: transition_text,
-			  remove: transition_remove,
-			  tween: transition_tween,
-			  delay: transition_delay,
-			  duration: transition_duration,
-			  ease: transition_ease
-			};
-
-			var defaultTiming = {
-			  time: null, // Set on use.
-			  delay: 0,
-			  duration: 250,
-			  ease: cubicInOut
-			};
-
-			function inherit(node, id) {
-			  var timing;
-			  while (!(timing = node.__transition) || !(timing = timing[id])) {
-				if (!(node = node.parentNode)) {
-				  return defaultTiming.time = now(), defaultTiming;
-				}
-			  }
-			  return timing;
-			}
-
-			var selection_transition = function(name) {
-			  var id,
-				  timing;
-
-			  if (name instanceof Transition) {
-				id = name._id, name = name._name;
-			  } else {
-				id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
-			  }
-
-			  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-				  if (node = group[i]) {
-					schedule(node, name, id, i, group, timing || inherit(node, id));
-				  }
-				}
-			  }
-
-			  return new Transition(groups, this._parents, name, id);
-			};
-
-			selection.prototype.interrupt = selection_interrupt;
-			selection.prototype.transition = selection_transition;
-
-			var root$1 = [null];
-
-			var active = function(node, name) {
-			  var schedules = node.__transition,
-				  schedule,
-				  i;
-
-			  if (schedules) {
-				name = name == null ? null : name + "";
-				for (i in schedules) {
-				  if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
-					return new Transition([[node]], root$1, name, +i);
-				  }
-				}
-			  }
-
-			  return null;
-			};
-
-			var slice$4 = Array.prototype.slice;
-
-			var identity$5 = function(x) {
-			  return x;
-			};
-
-			var top = 1;
-			var right = 2;
-			var bottom = 3;
-			var left = 4;
-			var epsilon$2 = 1e-6;
-
-			function translateX(scale0, scale1, d) {
-			  var x = scale0(d);
-			  return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
-			}
-
-			function translateY(scale0, scale1, d) {
-			  var y = scale0(d);
-			  return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
-			}
-
-			function center(scale) {
-			  var offset = scale.bandwidth() / 2;
-			  if (scale.round()) offset = Math.round(offset);
-			  return function(d) {
-				return scale(d) + offset;
-			  };
-			}
-
-			function entering() {
-			  return !this.__axis;
-			}
-
-			function axis(orient, scale) {
-			  var tickArguments = [],
-				  tickValues = null,
-				  tickFormat = null,
-				  tickSizeInner = 6,
-				  tickSizeOuter = 6,
-				  tickPadding = 3;
-
-			  function axis(context) {
-				var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
-					format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,
-					spacing = Math.max(tickSizeInner, 0) + tickPadding,
-					transform = orient === top || orient === bottom ? translateX : translateY,
-					range = scale.range(),
-					range0 = range[0] + 0.5,
-					range1 = range[range.length - 1] + 0.5,
-					position = (scale.bandwidth ? center : identity$5)(scale.copy()),
-					selection = context.selection ? context.selection() : context,
-					path = selection.selectAll(".domain").data([null]),
-					tick = selection.selectAll(".tick").data(values, scale).order(),
-					tickExit = tick.exit(),
-					tickEnter = tick.enter().append("g").attr("class", "tick"),
-					line = tick.select("line"),
-					text = tick.select("text"),
-					k = orient === top || orient === left ? -1 : 1,
-					x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
-
-				path = path.merge(path.enter().insert("path", ".tick")
-					.attr("class", "domain")
-					.attr("stroke", "#000"));
-
-				tick = tick.merge(tickEnter);
-
-				line = line.merge(tickEnter.append("line")
-					.attr("stroke", "#000")
-					.attr(x + "2", k * tickSizeInner)
-					.attr(y + "1", 0.5)
-					.attr(y + "2", 0.5));
-
-				text = text.merge(tickEnter.append("text")
-					.attr("fill", "#000")
-					.attr(x, k * spacing)
-					.attr(y, 0.5)
-					.attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
-
-				if (context !== selection) {
-				  path = path.transition(context);
-				  tick = tick.transition(context);
-				  line = line.transition(context);
-				  text = text.transition(context);
-
-				  tickExit = tickExit.transition(context)
-					  .attr("opacity", epsilon$2)
-					  .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
-
-				  tickEnter
-					  .attr("opacity", epsilon$2)
-					  .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
-				}
-
-				tickExit.remove();
-
-				path
-					.attr("d", orient === left || orient == right
-						? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
-						: "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
-
-				tick
-					.attr("opacity", 1)
-					.attr("transform", function(d) { return transform(position, position, d); });
-
-				line
-					.attr(x + "2", k * tickSizeInner);
-
-				text
-					.attr(x, k * spacing)
-					.text(format);
-
-				selection.filter(entering)
-					.attr("fill", "none")
-					.attr("font-size", 10)
-					.attr("font-family", "sans-serif")
-					.attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
-
-				selection
-					.each(function() { this.__axis = position; });
-			  }
-
-			  axis.scale = function(_) {
-				return arguments.length ? (scale = _, axis) : scale;
-			  };
-
-			  axis.ticks = function() {
-				return tickArguments = slice$4.call(arguments), axis;
-			  };
-
-			  axis.tickArguments = function(_) {
-				return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();
-			  };
-
-			  axis.tickValues = function(_) {
-				return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();
-			  };
-
-			  axis.tickFormat = function(_) {
-				return arguments.length ? (tickFormat = _, axis) : tickFormat;
-			  };
-
-			  axis.tickSize = function(_) {
-				return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
-			  };
-
-			  axis.tickSizeInner = function(_) {
-				return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
-			  };
-
-			  axis.tickSizeOuter = function(_) {
-				return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
-			  };
-
-			  axis.tickPadding = function(_) {
-				return arguments.length ? (tickPadding = +_, axis) : tickPadding;
-			  };
-
-			  return axis;
-			}
-
-			function axisTop(scale) {
-			  return axis(top, scale);
-			}
-
-			function axisRight(scale) {
-			  return axis(right, scale);
-			}
-
-			function axisBottom(scale) {
-			  return axis(bottom, scale);
-			}
-
-			function axisLeft(scale) {
-			  return axis(left, scale);
-			}
-
-			function defaultSeparation(a, b) {
-			  return a.parent === b.parent ? 1 : 2;
-			}
-
-			function meanX(children) {
-			  return children.reduce(meanXReduce, 0) / children.length;
-			}
-
-			function meanXReduce(x, c) {
-			  return x + c.x;
-			}
-
-			function maxY(children) {
-			  return 1 + children.reduce(maxYReduce, 0);
-			}
-
-			function maxYReduce(y, c) {
-			  return Math.max(y, c.y);
-			}
-
-			function leafLeft(node) {
-			  var children;
-			  while (children = node.children) node = children[0];
-			  return node;
-			}
-
-			function leafRight(node) {
-			  var children;
-			  while (children = node.children) node = children[children.length - 1];
-			  return node;
-			}
-
-			var cluster = function() {
-			  var separation = defaultSeparation,
-				  dx = 1,
-				  dy = 1,
-				  nodeSize = false;
-
-			  function cluster(root) {
-				var previousNode,
-					x = 0;
-
-				// First walk, computing the initial x & y values.
-				root.eachAfter(function(node) {
-				  var children = node.children;
-				  if (children) {
-					node.x = meanX(children);
-					node.y = maxY(children);
-				  } else {
-					node.x = previousNode ? x += separation(node, previousNode) : 0;
-					node.y = 0;
-					previousNode = node;
-				  }
-				});
-
-				var left = leafLeft(root),
-					right = leafRight(root),
-					x0 = left.x - separation(left, right) / 2,
-					x1 = right.x + separation(right, left) / 2;
-
-				// Second walk, normalizing x & y to the desired size.
-				return root.eachAfter(nodeSize ? function(node) {
-				  node.x = (node.x - root.x) * dx;
-				  node.y = (root.y - node.y) * dy;
-				} : function(node) {
-				  node.x = (node.x - x0) / (x1 - x0) * dx;
-				  node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
-				});
-			  }
-
-			  cluster.separation = function(x) {
-				return arguments.length ? (separation = x, cluster) : separation;
-			  };
-
-			  cluster.size = function(x) {
-				return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
-			  };
-
-			  cluster.nodeSize = function(x) {
-				return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
-			  };
-
-			  return cluster;
-			};
-
-			var node_each = function(callback) {
-			  var node = this, current, next = [node], children, i, n;
-			  do {
-				current = next.reverse(), next = [];
-				while (node = current.pop()) {
-				  callback(node), children = node.children;
-				  if (children) for (i = 0, n = children.length; i < n; ++i) {
-					next.push(children[i]);
-				  }
-				}
-			  } while (next.length);
-			  return this;
-			};
-
-			var node_eachBefore = function(callback) {
-			  var node = this, nodes = [node], children, i;
-			  while (node = nodes.pop()) {
-				callback(node), children = node.children;
-				if (children) for (i = children.length - 1; i >= 0; --i) {
-				  nodes.push(children[i]);
-				}
-			  }
-			  return this;
-			};
-
-			var node_eachAfter = function(callback) {
-			  var node = this, nodes = [node], next = [], children, i, n;
-			  while (node = nodes.pop()) {
-				next.push(node), children = node.children;
-				if (children) for (i = 0, n = children.length; i < n; ++i) {
-				  nodes.push(children[i]);
-				}
-			  }
-			  while (node = next.pop()) {
-				callback(node);
-			  }
-			  return this;
-			};
-
-			var node_sum = function(value) {
-			  return this.eachAfter(function(node) {
-				var sum = +value(node.data) || 0,
-					children = node.children,
-					i = children && children.length;
-				while (--i >= 0) sum += children[i].value;
-				node.value = sum;
-			  });
-			};
-
-			var node_sort = function(compare) {
-			  return this.eachBefore(function(node) {
-				if (node.children) {
-				  node.children.sort(compare);
-				}
-			  });
-			};
-
-			var node_path = function(end) {
-			  var start = this,
-				  ancestor = leastCommonAncestor(start, end),
-				  nodes = [start];
-			  while (start !== ancestor) {
-				start = start.parent;
-				nodes.push(start);
-			  }
-			  var k = nodes.length;
-			  while (end !== ancestor) {
-				nodes.splice(k, 0, end);
-				end = end.parent;
-			  }
-			  return nodes;
-			};
-
-			function leastCommonAncestor(a, b) {
-			  if (a === b) return a;
-			  var aNodes = a.ancestors(),
-				  bNodes = b.ancestors(),
-				  c = null;
-			  a = aNodes.pop();
-			  b = bNodes.pop();
-			  while (a === b) {
-				c = a;
-				a = aNodes.pop();
-				b = bNodes.pop();
-			  }
-			  return c;
-			}
-
-			var node_ancestors = function() {
-			  var node = this, nodes = [node];
-			  while (node = node.parent) {
-				nodes.push(node);
-			  }
-			  return nodes;
-			};
-
-			var node_descendants = function() {
-			  var nodes = [];
-			  this.each(function(node) {
-				nodes.push(node);
-			  });
-			  return nodes;
-			};
-
-			var node_leaves = function() {
-			  var leaves = [];
-			  this.eachBefore(function(node) {
-				if (!node.children) {
-				  leaves.push(node);
-				}
-			  });
-			  return leaves;
-			};
-
-			var node_links = function() {
-			  var root = this, links = [];
-			  root.each(function(node) {
-				if (node !== root) { // Don’t include the root’s parent, if any.
-				  links.push({source: node.parent, target: node});
-				}
-			  });
-			  return links;
-			};
-
-			function hierarchy(data, children) {
-			  var root = new Node(data),
-				  valued = +data.value && (root.value = data.value),
-				  node,
-				  nodes = [root],
-				  child,
-				  childs,
-				  i,
-				  n;
-
-			  if (children == null) children = defaultChildren;
-
-			  while (node = nodes.pop()) {
-				if (valued) node.value = +node.data.value;
-				if ((childs = children(node.data)) && (n = childs.length)) {
-				  node.children = new Array(n);
-				  for (i = n - 1; i >= 0; --i) {
-					nodes.push(child = node.children[i] = new Node(childs[i]));
-					child.parent = node;
-					child.depth = node.depth + 1;
-				  }
-				}
-			  }
-
-			  return root.eachBefore(computeHeight);
-			}
-
-			function node_copy() {
-			  return hierarchy(this).eachBefore(copyData);
-			}
-
-			function defaultChildren(d) {
-			  return d.children;
-			}
-
-			function copyData(node) {
-			  node.data = node.data.data;
-			}
-
-			function computeHeight(node) {
-			  var height = 0;
-			  do node.height = height;
-			  while ((node = node.parent) && (node.height < ++height));
-			}
-
-			function Node(data) {
-			  this.data = data;
-			  this.depth =
-			  this.height = 0;
-			  this.parent = null;
-			}
-
-			Node.prototype = hierarchy.prototype = {
-			  constructor: Node,
-			  each: node_each,
-			  eachAfter: node_eachAfter,
-			  eachBefore: node_eachBefore,
-			  sum: node_sum,
-			  sort: node_sort,
-			  path: node_path,
-			  ancestors: node_ancestors,
-			  descendants: node_descendants,
-			  leaves: node_leaves,
-			  links: node_links,
-			  copy: node_copy
-			};
-
-			function Node$2(value) {
-			  this._ = value;
-			  this.next = null;
-			}
-
-			var shuffle$1 = function(array) {
-			  var i,
-				  n = (array = array.slice()).length,
-				  head = null,
-				  node = head;
-
-			  while (n) {
-				var next = new Node$2(array[n - 1]);
-				if (node) node = node.next = next;
-				else node = head = next;
-				array[i] = array[--n];
-			  }
-
-			  return {
-				head: head,
-				tail: node
-			  };
-			};
-
-			var enclose = function(circles) {
-			  return encloseN(shuffle$1(circles), []);
-			};
-
-			function encloses(a, b) {
-			  var dx = b.x - a.x,
-				  dy = b.y - a.y,
-				  dr = a.r - b.r;
-			  return dr * dr + 1e-6 > dx * dx + dy * dy;
-			}
-
-			// Returns the smallest circle that contains circles L and intersects circles B.
-			function encloseN(L, B) {
-			  var circle,
-				  l0 = null,
-				  l1 = L.head,
-				  l2,
-				  p1;
-
-			  switch (B.length) {
-				case 1: circle = enclose1(B[0]); break;
-				case 2: circle = enclose2(B[0], B[1]); break;
-				case 3: circle = enclose3(B[0], B[1], B[2]); break;
-			  }
-
-			  while (l1) {
-				p1 = l1._, l2 = l1.next;
-				if (!circle || !encloses(circle, p1)) {
-
-				  // Temporarily truncate L before l1.
-				  if (l0) L.tail = l0, l0.next = null;
-				  else L.head = L.tail = null;
-
-				  B.push(p1);
-				  circle = encloseN(L, B); // Note: reorders L!
-				  B.pop();
-
-				  // Move l1 to the front of L and reconnect the truncated list L.
-				  if (L.head) l1.next = L.head, L.head = l1;
-				  else l1.next = null, L.head = L.tail = l1;
-				  l0 = L.tail, l0.next = l2;
-
-				} else {
-				  l0 = l1;
-				}
-				l1 = l2;
-			  }
-
-			  L.tail = l0;
-			  return circle;
-			}
-
-			function enclose1(a) {
-			  return {
-				x: a.x,
-				y: a.y,
-				r: a.r
-			  };
-			}
-
-			function enclose2(a, b) {
-			  var x1 = a.x, y1 = a.y, r1 = a.r,
-				  x2 = b.x, y2 = b.y, r2 = b.r,
-				  x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
-				  l = Math.sqrt(x21 * x21 + y21 * y21);
-			  return {
-				x: (x1 + x2 + x21 / l * r21) / 2,
-				y: (y1 + y2 + y21 / l * r21) / 2,
-				r: (l + r1 + r2) / 2
-			  };
-			}
-
-			function enclose3(a, b, c) {
-			  var x1 = a.x, y1 = a.y, r1 = a.r,
-				  x2 = b.x, y2 = b.y, r2 = b.r,
-				  x3 = c.x, y3 = c.y, r3 = c.r,
-				  a2 = 2 * (x1 - x2),
-				  b2 = 2 * (y1 - y2),
-				  c2 = 2 * (r2 - r1),
-				  d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
-				  a3 = 2 * (x1 - x3),
-				  b3 = 2 * (y1 - y3),
-				  c3 = 2 * (r3 - r1),
-				  d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
-				  ab = a3 * b2 - a2 * b3,
-				  xa = (b2 * d3 - b3 * d2) / ab - x1,
-				  xb = (b3 * c2 - b2 * c3) / ab,
-				  ya = (a3 * d2 - a2 * d3) / ab - y1,
-				  yb = (a2 * c3 - a3 * c2) / ab,
-				  A = xb * xb + yb * yb - 1,
-				  B = 2 * (xa * xb + ya * yb + r1),
-				  C = xa * xa + ya * ya - r1 * r1,
-				  r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
-			  return {
-				x: xa + xb * r + x1,
-				y: ya + yb * r + y1,
-				r: r
-			  };
-			}
-
-			function place(a, b, c) {
-			  var ax = a.x,
-				  ay = a.y,
-				  da = b.r + c.r,
-				  db = a.r + c.r,
-				  dx = b.x - ax,
-				  dy = b.y - ay,
-				  dc = dx * dx + dy * dy;
-			  if (dc) {
-				var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
-					y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
-				c.x = ax + x * dx + y * dy;
-				c.y = ay + x * dy - y * dx;
-			  } else {
-				c.x = ax + db;
-				c.y = ay;
-			  }
-			}
-
-			function intersects(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;
-			}
-
-			function distance2(circle, x, y) {
-			  var dx = circle.x - x,
-				  dy = circle.y - y;
-			  return dx * dx + dy * dy;
-			}
-
-			function Node$1(circle) {
-			  this._ = circle;
-			  this.next = null;
-			  this.previous = null;
-			}
-
-			function packEnclose(circles) {
-			  if (!(n = circles.length)) return 0;
-
-			  var a, b, c, n;
-
-			  // Place the first circle.
-			  a = circles[0], a.x = 0, a.y = 0;
-			  if (!(n > 1)) return a.r;
-
-			  // Place the second circle.
-			  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
-			  if (!(n > 2)) return a.r + b.r;
-
-			  // Place the third circle.
-			  place(b, a, c = circles[2]);
-
-			  // Initialize the weighted centroid.
-			  var aa = a.r * a.r,
-				  ba = b.r * b.r,
-				  ca = c.r * c.r,
-				  oa = aa + ba + ca,
-				  ox = aa * a.x + ba * b.x + ca * c.x,
-				  oy = aa * a.y + ba * b.y + ca * c.y,
-				  cx, cy, i, j, k, sj, sk;
-
-			  // Initialize the front-chain using the first three circles a, b and c.
-			  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
-			  a.next = c.previous = b;
-			  b.next = a.previous = c;
-			  c.next = b.previous = a;
-
-			  // Attempt to place each remaining circle…
-			  pack: for (i = 3; i < n; ++i) {
-				place(a._, b._, c = circles[i]), c = new Node$1(c);
-
-				// If there are only three elements in the front-chain…
-				if ((k = a.previous) === (j = b.next)) {
-				  // If the new circle intersects the third circle,
-				  // rotate the front chain to try the next position.
-				  if (intersects(j._, c._)) {
-					a = b, b = j, --i;
-					continue pack;
-				  }
-				}
-
-				// Find the closest intersecting circle on the front-chain, if any.
-				else {
-				  sj = j._.r, sk = k._.r;
-				  do {
-					if (sj <= sk) {
-					  if (intersects(j._, c._)) {
-						b = j, a.next = b, b.previous = a, --i;
-						continue pack;
-					  }
-					  j = j.next, sj += j._.r;
-					} else {
-					  if (intersects(k._, c._)) {
-						a = k, a.next = b, b.previous = a, --i;
-						continue pack;
-					  }
-					  k = k.previous, sk += k._.r;
-					}
-				  } while (j !== k.next);
-				}
-
-				// Success! Insert the new circle c between a and b.
-				c.previous = a, c.next = b, a.next = b.previous = b = c;
-
-				// Update the weighted centroid.
-				oa += ca = c._.r * c._.r;
-				ox += ca * c._.x;
-				oy += ca * c._.y;
-
-				// Compute the new closest circle a to centroid.
-				aa = distance2(a._, cx = ox / oa, cy = oy / oa);
-				while ((c = c.next) !== b) {
-				  if ((ca = distance2(c._, cx, cy)) < aa) {
-					a = c, aa = ca;
-				  }
-				}
-				b = a.next;
-			  }
-
-			  // Compute the enclosing circle of the front chain.
-			  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
-
-			  // Translate the circles to put the enclosing circle around the origin.
-			  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
-
-			  return c.r;
-			}
-
-			var siblings = function(circles) {
-			  packEnclose(circles);
-			  return circles;
-			};
-
-			function optional(f) {
-			  return f == null ? null : required(f);
-			}
-
-			function required(f) {
-			  if (typeof f !== "function") throw new Error;
-			  return f;
-			}
-
-			function constantZero() {
-			  return 0;
-			}
-
-			var constant$6 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function defaultRadius(d) {
-			  return Math.sqrt(d.value);
-			}
-
-			var index = function() {
-			  var radius = null,
-				  dx = 1,
-				  dy = 1,
-				  padding = constantZero;
-
-			  function pack(root) {
-				root.x = dx / 2, root.y = dy / 2;
-				if (radius) {
-				  root.eachBefore(radiusLeaf(radius))
-					  .eachAfter(packChildren(padding, 0.5))
-					  .eachBefore(translateChild(1));
-				} else {
-				  root.eachBefore(radiusLeaf(defaultRadius))
-					  .eachAfter(packChildren(constantZero, 1))
-					  .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
-					  .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
-				}
-				return root;
-			  }
-
-			  pack.radius = function(x) {
-				return arguments.length ? (radius = optional(x), pack) : radius;
-			  };
-
-			  pack.size = function(x) {
-				return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
-			  };
-
-			  pack.padding = function(x) {
-				return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding;
-			  };
-
-			  return pack;
-			};
-
-			function radiusLeaf(radius) {
-			  return function(node) {
-				if (!node.children) {
-				  node.r = Math.max(0, +radius(node) || 0);
-				}
-			  };
-			}
-
-			function packChildren(padding, k) {
-			  return function(node) {
-				if (children = node.children) {
-				  var children,
-					  i,
-					  n = children.length,
-					  r = padding(node) * k || 0,
-					  e;
-
-				  if (r) for (i = 0; i < n; ++i) children[i].r += r;
-				  e = packEnclose(children);
-				  if (r) for (i = 0; i < n; ++i) children[i].r -= r;
-				  node.r = e + r;
-				}
-			  };
-			}
-
-			function translateChild(k) {
-			  return function(node) {
-				var parent = node.parent;
-				node.r *= k;
-				if (parent) {
-				  node.x = parent.x + k * node.x;
-				  node.y = parent.y + k * node.y;
-				}
-			  };
-			}
-
-			var roundNode = function(node) {
-			  node.x0 = Math.round(node.x0);
-			  node.y0 = Math.round(node.y0);
-			  node.x1 = Math.round(node.x1);
-			  node.y1 = Math.round(node.y1);
-			};
-
-			var treemapDice = function(parent, x0, y0, x1, y1) {
-			  var nodes = parent.children,
-				  node,
-				  i = -1,
-				  n = nodes.length,
-				  k = parent.value && (x1 - x0) / parent.value;
-
-			  while (++i < n) {
-				node = nodes[i], node.y0 = y0, node.y1 = y1;
-				node.x0 = x0, node.x1 = x0 += node.value * k;
-			  }
-			};
-
-			var partition = function() {
-			  var dx = 1,
-				  dy = 1,
-				  padding = 0,
-				  round = false;
-
-			  function partition(root) {
-				var n = root.height + 1;
-				root.x0 =
-				root.y0 = padding;
-				root.x1 = dx;
-				root.y1 = dy / n;
-				root.eachBefore(positionNode(dy, n));
-				if (round) root.eachBefore(roundNode);
-				return root;
-			  }
-
-			  function positionNode(dy, n) {
-				return function(node) {
-				  if (node.children) {
-					treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
-				  }
-				  var x0 = node.x0,
-					  y0 = node.y0,
-					  x1 = node.x1 - padding,
-					  y1 = node.y1 - padding;
-				  if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-				  if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-				  node.x0 = x0;
-				  node.y0 = y0;
-				  node.x1 = x1;
-				  node.y1 = y1;
-				};
-			  }
-
-			  partition.round = function(x) {
-				return arguments.length ? (round = !!x, partition) : round;
-			  };
-
-			  partition.size = function(x) {
-				return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
-			  };
-
-			  partition.padding = function(x) {
-				return arguments.length ? (padding = +x, partition) : padding;
-			  };
-
-			  return partition;
-			};
-
-			var keyPrefix$1 = "$";
-			var preroot = {depth: -1};
-			var ambiguous = {};
-
-			function defaultId(d) {
-			  return d.id;
-			}
-
-			function defaultParentId(d) {
-			  return d.parentId;
-			}
-
-			var stratify = function() {
-			  var id = defaultId,
-				  parentId = defaultParentId;
-
-			  function stratify(data) {
-				var d,
-					i,
-					n = data.length,
-					root,
-					parent,
-					node,
-					nodes = new Array(n),
-					nodeId,
-					nodeKey,
-					nodeByKey = {};
-
-				for (i = 0; i < n; ++i) {
-				  d = data[i], node = nodes[i] = new Node(d);
-				  if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
-					nodeKey = keyPrefix$1 + (node.id = nodeId);
-					nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
-				  }
-				}
-
-				for (i = 0; i < n; ++i) {
-				  node = nodes[i], nodeId = parentId(data[i], i, data);
-				  if (nodeId == null || !(nodeId += "")) {
-					if (root) throw new Error("multiple roots");
-					root = node;
-				  } else {
-					parent = nodeByKey[keyPrefix$1 + nodeId];
-					if (!parent) throw new Error("missing: " + nodeId);
-					if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
-					if (parent.children) parent.children.push(node);
-					else parent.children = [node];
-					node.parent = parent;
-				  }
-				}
-
-				if (!root) throw new Error("no root");
-				root.parent = preroot;
-				root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
-				root.parent = null;
-				if (n > 0) throw new Error("cycle");
-
-				return root;
-			  }
-
-			  stratify.id = function(x) {
-				return arguments.length ? (id = required(x), stratify) : id;
-			  };
-
-			  stratify.parentId = function(x) {
-				return arguments.length ? (parentId = required(x), stratify) : parentId;
-			  };
-
-			  return stratify;
-			};
-
-			function defaultSeparation$1(a, b) {
-			  return a.parent === b.parent ? 1 : 2;
-			}
-
-			// function radialSeparation(a, b) {
-			//   return (a.parent === b.parent ? 1 : 2) / a.depth;
-			// }
-
-			// This function is used to traverse the left contour of a subtree (or
-			// subforest). It returns the successor of v on this contour. This successor is
-			// either given by the leftmost child of v or by the thread of v. The function
-			// returns null if and only if v is on the highest level of its subtree.
-			function nextLeft(v) {
-			  var children = v.children;
-			  return children ? children[0] : v.t;
-			}
-
-			// This function works analogously to nextLeft.
-			function nextRight(v) {
-			  var children = v.children;
-			  return children ? children[children.length - 1] : v.t;
-			}
-
-			// Shifts the current subtree rooted at w+. This is done by increasing
-			// prelim(w+) and mod(w+) by shift.
-			function moveSubtree(wm, wp, shift) {
-			  var change = shift / (wp.i - wm.i);
-			  wp.c -= change;
-			  wp.s += shift;
-			  wm.c += change;
-			  wp.z += shift;
-			  wp.m += shift;
-			}
-
-			// All other shifts, applied to the smaller subtrees between w- and w+, are
-			// performed by this function. To prepare the shifts, we have to adjust
-			// change(w+), shift(w+), and change(w-).
-			function executeShifts(v) {
-			  var shift = 0,
-				  change = 0,
-				  children = v.children,
-				  i = children.length,
-				  w;
-			  while (--i >= 0) {
-				w = children[i];
-				w.z += shift;
-				w.m += shift;
-				shift += w.s + (change += w.c);
-			  }
-			}
-
-			// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
-			// returns the specified (default) ancestor.
-			function nextAncestor(vim, v, ancestor) {
-			  return vim.a.parent === v.parent ? vim.a : ancestor;
-			}
-
-			function TreeNode(node, i) {
-			  this._ = node;
-			  this.parent = null;
-			  this.children = null;
-			  this.A = null; // default ancestor
-			  this.a = this; // ancestor
-			  this.z = 0; // prelim
-			  this.m = 0; // mod
-			  this.c = 0; // change
-			  this.s = 0; // shift
-			  this.t = null; // thread
-			  this.i = i; // number
-			}
-
-			TreeNode.prototype = Object.create(Node.prototype);
-
-			function treeRoot(root) {
-			  var tree = new TreeNode(root, 0),
-				  node,
-				  nodes = [tree],
-				  child,
-				  children,
-				  i,
-				  n;
-
-			  while (node = nodes.pop()) {
-				if (children = node._.children) {
-				  node.children = new Array(n = children.length);
-				  for (i = n - 1; i >= 0; --i) {
-					nodes.push(child = node.children[i] = new TreeNode(children[i], i));
-					child.parent = node;
-				  }
-				}
-			  }
-
-			  (tree.parent = new TreeNode(null, 0)).children = [tree];
-			  return tree;
-			}
-
-			// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-			var tree = function() {
-			  var separation = defaultSeparation$1,
-				  dx = 1,
-				  dy = 1,
-				  nodeSize = null;
-
-			  function tree(root) {
-				var t = treeRoot(root);
-
-				// Compute the layout using Buchheim et al.’s algorithm.
-				t.eachAfter(firstWalk), t.parent.m = -t.z;
-				t.eachBefore(secondWalk);
-
-				// If a fixed node size is specified, scale x and y.
-				if (nodeSize) root.eachBefore(sizeNode);
-
-				// If a fixed tree size is specified, scale x and y based on the extent.
-				// Compute the left-most, right-most, and depth-most nodes for extents.
-				else {
-				  var left = root,
-					  right = root,
-					  bottom = root;
-				  root.eachBefore(function(node) {
-					if (node.x < left.x) left = node;
-					if (node.x > right.x) right = node;
-					if (node.depth > bottom.depth) bottom = node;
-				  });
-				  var s = left === right ? 1 : separation(left, right) / 2,
-					  tx = s - left.x,
-					  kx = dx / (right.x + s + tx),
-					  ky = dy / (bottom.depth || 1);
-				  root.eachBefore(function(node) {
-					node.x = (node.x + tx) * kx;
-					node.y = node.depth * ky;
-				  });
-				}
-
-				return root;
-			  }
-
-			  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
-			  // applied recursively to the children of v, as well as the function
-			  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
-			  // node v is placed to the midpoint of its outermost children.
-			  function firstWalk(v) {
-				var children = v.children,
-					siblings = v.parent.children,
-					w = v.i ? siblings[v.i - 1] : null;
-				if (children) {
-				  executeShifts(v);
-				  var midpoint = (children[0].z + children[children.length - 1].z) / 2;
-				  if (w) {
-					v.z = w.z + separation(v._, w._);
-					v.m = v.z - midpoint;
-				  } else {
-					v.z = midpoint;
-				  }
-				} else if (w) {
-				  v.z = w.z + separation(v._, w._);
-				}
-				v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
-			  }
-
-			  // Computes all real x-coordinates by summing up the modifiers recursively.
-			  function secondWalk(v) {
-				v._.x = v.z + v.parent.m;
-				v.m += v.parent.m;
-			  }
-
-			  // The core of the algorithm. Here, a new subtree is combined with the
-			  // previous subtrees. Threads are used to traverse the inside and outside
-			  // contours of the left and right subtree up to the highest common level. The
-			  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
-			  // superscript o means outside and i means inside, the subscript - means left
-			  // subtree and + means right subtree. For summing up the modifiers along the
-			  // contour, we use respective variables si+, si-, so-, and so+. Whenever two
-			  // nodes of the inside contours conflict, we compute the left one of the
-			  // greatest uncommon ancestors using the function ANCESTOR and call MOVE
-			  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
-			  // Finally, we add a new thread (if necessary).
-			  function apportion(v, w, ancestor) {
-				if (w) {
-				  var vip = v,
-					  vop = v,
-					  vim = w,
-					  vom = vip.parent.children[0],
-					  sip = vip.m,
-					  sop = vop.m,
-					  sim = vim.m,
-					  som = vom.m,
-					  shift;
-				  while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
-					vom = nextLeft(vom);
-					vop = nextRight(vop);
-					vop.a = v;
-					shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
-					if (shift > 0) {
-					  moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
-					  sip += shift;
-					  sop += shift;
-					}
-					sim += vim.m;
-					sip += vip.m;
-					som += vom.m;
-					sop += vop.m;
-				  }
-				  if (vim && !nextRight(vop)) {
-					vop.t = vim;
-					vop.m += sim - sop;
-				  }
-				  if (vip && !nextLeft(vom)) {
-					vom.t = vip;
-					vom.m += sip - som;
-					ancestor = v;
-				  }
-				}
-				return ancestor;
-			  }
-
-			  function sizeNode(node) {
-				node.x *= dx;
-				node.y = node.depth * dy;
-			  }
-
-			  tree.separation = function(x) {
-				return arguments.length ? (separation = x, tree) : separation;
-			  };
-
-			  tree.size = function(x) {
-				return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
-			  };
-
-			  tree.nodeSize = function(x) {
-				return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
-			  };
-
-			  return tree;
-			};
-
-			var treemapSlice = function(parent, x0, y0, x1, y1) {
-			  var nodes = parent.children,
-				  node,
-				  i = -1,
-				  n = nodes.length,
-				  k = parent.value && (y1 - y0) / parent.value;
-
-			  while (++i < n) {
-				node = nodes[i], node.x0 = x0, node.x1 = x1;
-				node.y0 = y0, node.y1 = y0 += node.value * k;
-			  }
-			};
-
-			var phi = (1 + Math.sqrt(5)) / 2;
-
-			function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
-			  var rows = [],
-				  nodes = parent.children,
-				  row,
-				  nodeValue,
-				  i0 = 0,
-				  i1,
-				  n = nodes.length,
-				  dx, dy,
-				  value = parent.value,
-				  sumValue,
-				  minValue,
-				  maxValue,
-				  newRatio,
-				  minRatio,
-				  alpha,
-				  beta;
-
-			  while (i0 < n) {
-				dx = x1 - x0, dy = y1 - y0;
-				minValue = maxValue = sumValue = nodes[i0].value;
-				alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
-				beta = sumValue * sumValue * alpha;
-				minRatio = Math.max(maxValue / beta, beta / minValue);
-
-				// Keep adding nodes while the aspect ratio maintains or improves.
-				for (i1 = i0 + 1; i1 < n; ++i1) {
-				  sumValue += nodeValue = nodes[i1].value;
-				  if (nodeValue < minValue) minValue = nodeValue;
-				  if (nodeValue > maxValue) maxValue = nodeValue;
-				  beta = sumValue * sumValue * alpha;
-				  newRatio = Math.max(maxValue / beta, beta / minValue);
-				  if (newRatio > minRatio) { sumValue -= nodeValue; break; }
-				  minRatio = newRatio;
-				}
-
-				// Position and record the row orientation.
-				rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
-				if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
-				else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
-				value -= sumValue, i0 = i1;
-			  }
-
-			  return rows;
-			}
-
-			var squarify = (function custom(ratio) {
-
-			  function squarify(parent, x0, y0, x1, y1) {
-				squarifyRatio(ratio, parent, x0, y0, x1, y1);
-			  }
-
-			  squarify.ratio = function(x) {
-				return custom((x = +x) > 1 ? x : 1);
-			  };
-
-			  return squarify;
-			})(phi);
-
-			var index$1 = function() {
-			  var tile = squarify,
-				  round = false,
-				  dx = 1,
-				  dy = 1,
-				  paddingStack = [0],
-				  paddingInner = constantZero,
-				  paddingTop = constantZero,
-				  paddingRight = constantZero,
-				  paddingBottom = constantZero,
-				  paddingLeft = constantZero;
-
-			  function treemap(root) {
-				root.x0 =
-				root.y0 = 0;
-				root.x1 = dx;
-				root.y1 = dy;
-				root.eachBefore(positionNode);
-				paddingStack = [0];
-				if (round) root.eachBefore(roundNode);
-				return root;
-			  }
-
-			  function positionNode(node) {
-				var p = paddingStack[node.depth],
-					x0 = node.x0 + p,
-					y0 = node.y0 + p,
-					x1 = node.x1 - p,
-					y1 = node.y1 - p;
-				if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-				if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-				node.x0 = x0;
-				node.y0 = y0;
-				node.x1 = x1;
-				node.y1 = y1;
-				if (node.children) {
-				  p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
-				  x0 += paddingLeft(node) - p;
-				  y0 += paddingTop(node) - p;
-				  x1 -= paddingRight(node) - p;
-				  y1 -= paddingBottom(node) - p;
-				  if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-				  if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-				  tile(node, x0, y0, x1, y1);
-				}
-			  }
-
-			  treemap.round = function(x) {
-				return arguments.length ? (round = !!x, treemap) : round;
-			  };
-
-			  treemap.size = function(x) {
-				return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
-			  };
-
-			  treemap.tile = function(x) {
-				return arguments.length ? (tile = required(x), treemap) : tile;
-			  };
-
-			  treemap.padding = function(x) {
-				return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
-			  };
-
-			  treemap.paddingInner = function(x) {
-				return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner;
-			  };
-
-			  treemap.paddingOuter = function(x) {
-				return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
-			  };
-
-			  treemap.paddingTop = function(x) {
-				return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop;
-			  };
-
-			  treemap.paddingRight = function(x) {
-				return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight;
-			  };
-
-			  treemap.paddingBottom = function(x) {
-				return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom;
-			  };
-
-			  treemap.paddingLeft = function(x) {
-				return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft;
-			  };
-
-			  return treemap;
-			};
-
-			var binary = function(parent, x0, y0, x1, y1) {
-			  var nodes = parent.children,
-				  i, n = nodes.length,
-				  sum, sums = new Array(n + 1);
-
-			  for (sums[0] = sum = i = 0; i < n; ++i) {
-				sums[i + 1] = sum += nodes[i].value;
-			  }
-
-			  partition(0, n, parent.value, x0, y0, x1, y1);
-
-			  function partition(i, j, value, x0, y0, x1, y1) {
-				if (i >= j - 1) {
-				  var node = nodes[i];
-				  node.x0 = x0, node.y0 = y0;
-				  node.x1 = x1, node.y1 = y1;
-				  return;
-				}
-
-				var valueOffset = sums[i],
-					valueTarget = (value / 2) + valueOffset,
-					k = i + 1,
-					hi = j - 1;
-
-				while (k < hi) {
-				  var mid = k + hi >>> 1;
-				  if (sums[mid] < valueTarget) k = mid + 1;
-				  else hi = mid;
-				}
-
-				var valueLeft = sums[k] - valueOffset,
-					valueRight = value - valueLeft;
-
-				if ((y1 - y0) > (x1 - x0)) {
-				  var yk = (y0 * valueRight + y1 * valueLeft) / value;
-				  partition(i, k, valueLeft, x0, y0, x1, yk);
-				  partition(k, j, valueRight, x0, yk, x1, y1);
-				} else {
-				  var xk = (x0 * valueRight + x1 * valueLeft) / value;
-				  partition(i, k, valueLeft, x0, y0, xk, y1);
-				  partition(k, j, valueRight, xk, y0, x1, y1);
-				}
-			  }
-			};
-
-			var sliceDice = function(parent, x0, y0, x1, y1) {
-			  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
-			};
-
-			var resquarify = (function custom(ratio) {
-
-			  function resquarify(parent, x0, y0, x1, y1) {
-				if ((rows = parent._squarify) && (rows.ratio === ratio)) {
-				  var rows,
-					  row,
-					  nodes,
-					  i,
-					  j = -1,
-					  n,
-					  m = rows.length,
-					  value = parent.value;
-
-				  while (++j < m) {
-					row = rows[j], nodes = row.children;
-					for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
-					if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
-					else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
-					value -= row.value;
-				  }
-				} else {
-				  parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
-				  rows.ratio = ratio;
-				}
-			  }
-
-			  resquarify.ratio = function(x) {
-				return custom((x = +x) > 1 ? x : 1);
-			  };
-
-			  return resquarify;
-			})(phi);
-
-			var center$1 = function(x, y) {
-			  var nodes;
-
-			  if (x == null) x = 0;
-			  if (y == null) y = 0;
-
-			  function force() {
-				var i,
-					n = nodes.length,
-					node,
-					sx = 0,
-					sy = 0;
-
-				for (i = 0; i < n; ++i) {
-				  node = nodes[i], sx += node.x, sy += node.y;
-				}
-
-				for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
-				  node = nodes[i], node.x -= sx, node.y -= sy;
-				}
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-			  };
-
-			  force.x = function(_) {
-				return arguments.length ? (x = +_, force) : x;
-			  };
-
-			  force.y = function(_) {
-				return arguments.length ? (y = +_, force) : y;
-			  };
-
-			  return force;
-			};
-
-			var constant$7 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var jiggle = function() {
-			  return (Math.random() - 0.5) * 1e-6;
-			};
-
-			function x$1(d) {
-			  return d.x + d.vx;
-			}
-
-			function y$1(d) {
-			  return d.y + d.vy;
-			}
-
-			var collide = function(radius) {
-			  var nodes,
-				  radii,
-				  strength = 1,
-				  iterations = 1;
-
-			  if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
-
-			  function force() {
-				var i, n = nodes.length,
-					tree,
-					node,
-					xi,
-					yi,
-					ri,
-					ri2;
-
-				for (var k = 0; k < iterations; ++k) {
-				  tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);
-				  for (i = 0; i < n; ++i) {
-					node = nodes[i];
-					ri = radii[i], ri2 = ri * ri;
-					xi = node.x + node.vx;
-					yi = node.y + node.vy;
-					tree.visit(apply);
-				  }
-				}
-
-				function apply(quad, x0, y0, x1, y1) {
-				  var data = quad.data, rj = quad.r, r = ri + rj;
-				  if (data) {
-					if (data.index > i) {
-					  var x = xi - data.x - data.vx,
-						  y = yi - data.y - data.vy,
-						  l = x * x + y * y;
-					  if (l < r * r) {
-						if (x === 0) x = jiggle(), l += x * x;
-						if (y === 0) y = jiggle(), l += y * y;
-						l = (r - (l = Math.sqrt(l))) / l * strength;
-						node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
-						node.vy += (y *= l) * r;
-						data.vx -= x * (r = 1 - r);
-						data.vy -= y * r;
-					  }
-					}
-					return;
-				  }
-				  return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
-				}
-			  }
-
-			  function prepare(quad) {
-				if (quad.data) return quad.r = radii[quad.data.index];
-				for (var i = quad.r = 0; i < 4; ++i) {
-				  if (quad[i] && quad[i].r > quad.r) {
-					quad.r = quad[i].r;
-				  }
-				}
-			  }
-
-			  function initialize() {
-				if (!nodes) return;
-				var i, n = nodes.length;
-				radii = new Array(n);
-				for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-				initialize();
-			  };
-
-			  force.iterations = function(_) {
-				return arguments.length ? (iterations = +_, force) : iterations;
-			  };
-
-			  force.strength = function(_) {
-				return arguments.length ? (strength = +_, force) : strength;
-			  };
-
-			  force.radius = function(_) {
-				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
-			  };
-
-			  return force;
-			};
-
-			function index$2(d, i) {
-			  return i;
-			}
-
-			function find(nodeById, nodeId) {
-			  var node = nodeById.get(nodeId);
-			  if (!node) throw new Error("missing: " + nodeId);
-			  return node;
-			}
-
-			var link = function(links) {
-			  var id = index$2,
-				  strength = defaultStrength,
-				  strengths,
-				  distance = constant$7(30),
-				  distances,
-				  nodes,
-				  count,
-				  bias,
-				  iterations = 1;
-
-			  if (links == null) links = [];
-
-			  function defaultStrength(link) {
-				return 1 / Math.min(count[link.source.index], count[link.target.index]);
-			  }
-
-			  function force(alpha) {
-				for (var k = 0, n = links.length; k < iterations; ++k) {
-				  for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
-					link = links[i], source = link.source, target = link.target;
-					x = target.x + target.vx - source.x - source.vx || jiggle();
-					y = target.y + target.vy - source.y - source.vy || jiggle();
-					l = Math.sqrt(x * x + y * y);
-					l = (l - distances[i]) / l * alpha * strengths[i];
-					x *= l, y *= l;
-					target.vx -= x * (b = bias[i]);
-					target.vy -= y * b;
-					source.vx += x * (b = 1 - b);
-					source.vy += y * b;
-				  }
-				}
-			  }
-
-			  function initialize() {
-				if (!nodes) return;
-
-				var i,
-					n = nodes.length,
-					m = links.length,
-					nodeById = map$1(nodes, id),
-					link;
-
-				for (i = 0, count = new Array(n); i < n; ++i) {
-				  count[i] = 0;
-				}
-
-				for (i = 0; i < m; ++i) {
-				  link = links[i], link.index = i;
-				  if (typeof link.source !== "object") link.source = find(nodeById, link.source);
-				  if (typeof link.target !== "object") link.target = find(nodeById, link.target);
-				  ++count[link.source.index], ++count[link.target.index];
-				}
-
-				for (i = 0, bias = new Array(m); i < m; ++i) {
-				  link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
-				}
-
-				strengths = new Array(m), initializeStrength();
-				distances = new Array(m), initializeDistance();
-			  }
-
-			  function initializeStrength() {
-				if (!nodes) return;
-
-				for (var i = 0, n = links.length; i < n; ++i) {
-				  strengths[i] = +strength(links[i], i, links);
-				}
-			  }
-
-			  function initializeDistance() {
-				if (!nodes) return;
-
-				for (var i = 0, n = links.length; i < n; ++i) {
-				  distances[i] = +distance(links[i], i, links);
-				}
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-				initialize();
-			  };
-
-			  force.links = function(_) {
-				return arguments.length ? (links = _, initialize(), force) : links;
-			  };
-
-			  force.id = function(_) {
-				return arguments.length ? (id = _, force) : id;
-			  };
-
-			  force.iterations = function(_) {
-				return arguments.length ? (iterations = +_, force) : iterations;
-			  };
-
-			  force.strength = function(_) {
-				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
-			  };
-
-			  force.distance = function(_) {
-				return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
-			  };
-
-			  return force;
-			};
-
-			function x$2(d) {
-			  return d.x;
-			}
-
-			function y$2(d) {
-			  return d.y;
-			}
-
-			var initialRadius = 10;
-			var initialAngle = Math.PI * (3 - Math.sqrt(5));
-
-			var simulation = function(nodes) {
-			  var simulation,
-				  alpha = 1,
-				  alphaMin = 0.001,
-				  alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
-				  alphaTarget = 0,
-				  velocityDecay = 0.6,
-				  forces = map$1(),
-				  stepper = timer(step),
-				  event = dispatch("tick", "end");
-
-			  if (nodes == null) nodes = [];
-
-			  function step() {
-				tick();
-				event.call("tick", simulation);
-				if (alpha < alphaMin) {
-				  stepper.stop();
-				  event.call("end", simulation);
-				}
-			  }
-
-			  function tick() {
-				var i, n = nodes.length, node;
-
-				alpha += (alphaTarget - alpha) * alphaDecay;
-
-				forces.each(function(force) {
-				  force(alpha);
-				});
-
-				for (i = 0; i < n; ++i) {
-				  node = nodes[i];
-				  if (node.fx == null) node.x += node.vx *= velocityDecay;
-				  else node.x = node.fx, node.vx = 0;
-				  if (node.fy == null) node.y += node.vy *= velocityDecay;
-				  else node.y = node.fy, node.vy = 0;
-				}
-			  }
-
-			  function initializeNodes() {
-				for (var i = 0, n = nodes.length, node; i < n; ++i) {
-				  node = nodes[i], node.index = i;
-				  if (isNaN(node.x) || isNaN(node.y)) {
-					var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
-					node.x = radius * Math.cos(angle);
-					node.y = radius * Math.sin(angle);
-				  }
-				  if (isNaN(node.vx) || isNaN(node.vy)) {
-					node.vx = node.vy = 0;
-				  }
-				}
-			  }
-
-			  function initializeForce(force) {
-				if (force.initialize) force.initialize(nodes);
-				return force;
-			  }
-
-			  initializeNodes();
-
-			  return simulation = {
-				tick: tick,
-
-				restart: function() {
-				  return stepper.restart(step), simulation;
-				},
-
-				stop: function() {
-				  return stepper.stop(), simulation;
-				},
-
-				nodes: function(_) {
-				  return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
-				},
-
-				alpha: function(_) {
-				  return arguments.length ? (alpha = +_, simulation) : alpha;
-				},
-
-				alphaMin: function(_) {
-				  return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
-				},
-
-				alphaDecay: function(_) {
-				  return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
-				},
-
-				alphaTarget: function(_) {
-				  return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
-				},
-
-				velocityDecay: function(_) {
-				  return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
-				},
-
-				force: function(name, _) {
-				  return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
-				},
-
-				find: function(x, y, radius) {
-				  var i = 0,
-					  n = nodes.length,
-					  dx,
-					  dy,
-					  d2,
-					  node,
-					  closest;
-
-				  if (radius == null) radius = Infinity;
-				  else radius *= radius;
-
-				  for (i = 0; i < n; ++i) {
-					node = nodes[i];
-					dx = x - node.x;
-					dy = y - node.y;
-					d2 = dx * dx + dy * dy;
-					if (d2 < radius) closest = node, radius = d2;
-				  }
-
-				  return closest;
-				},
-
-				on: function(name, _) {
-				  return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
-				}
-			  };
-			};
-
-			var manyBody = function() {
-			  var nodes,
-				  node,
-				  alpha,
-				  strength = constant$7(-30),
-				  strengths,
-				  distanceMin2 = 1,
-				  distanceMax2 = Infinity,
-				  theta2 = 0.81;
-
-			  function force(_) {
-				var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);
-				for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
-			  }
-
-			  function initialize() {
-				if (!nodes) return;
-				var i, n = nodes.length;
-				strengths = new Array(n);
-				for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);
-			  }
-
-			  function accumulate(quad) {
-				var strength = 0, q, c, x$$1, y$$1, i;
-
-				// For internal nodes, accumulate forces from child quadrants.
-				if (quad.length) {
-				  for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
-					if ((q = quad[i]) && (c = q.value)) {
-					  strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
-					}
-				  }
-				  quad.x = x$$1 / strength;
-				  quad.y = y$$1 / strength;
-				}
-
-				// For leaf nodes, accumulate forces from coincident quadrants.
-				else {
-				  q = quad;
-				  q.x = q.data.x;
-				  q.y = q.data.y;
-				  do strength += strengths[q.data.index];
-				  while (q = q.next);
-				}
-
-				quad.value = strength;
-			  }
-
-			  function apply(quad, x1, _, x2) {
-				if (!quad.value) return true;
-
-				var x$$1 = quad.x - node.x,
-					y$$1 = quad.y - node.y,
-					w = x2 - x1,
-					l = x$$1 * x$$1 + y$$1 * y$$1;
-
-				// Apply the Barnes-Hut approximation if possible.
-				// Limit forces for very close nodes; randomize direction if coincident.
-				if (w * w / theta2 < l) {
-				  if (l < distanceMax2) {
-					if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-					if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
-					if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
-					node.vx += x$$1 * quad.value * alpha / l;
-					node.vy += y$$1 * quad.value * alpha / l;
-				  }
-				  return true;
-				}
-
-				// Otherwise, process points directly.
-				else if (quad.length || l >= distanceMax2) return;
-
-				// Limit forces for very close nodes; randomize direction if coincident.
-				if (quad.data !== node || quad.next) {
-				  if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-				  if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
-				  if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
-				}
-
-				do if (quad.data !== node) {
-				  w = strengths[quad.data.index] * alpha / l;
-				  node.vx += x$$1 * w;
-				  node.vy += y$$1 * w;
-				} while (quad = quad.next);
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-				initialize();
-			  };
-
-			  force.strength = function(_) {
-				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-			  };
-
-			  force.distanceMin = function(_) {
-				return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
-			  };
-
-			  force.distanceMax = function(_) {
-				return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
-			  };
-
-			  force.theta = function(_) {
-				return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
-			  };
-
-			  return force;
-			};
-
-			var x$3 = function(x) {
-			  var strength = constant$7(0.1),
-				  nodes,
-				  strengths,
-				  xz;
-
-			  if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
-
-			  function force(alpha) {
-				for (var i = 0, n = nodes.length, node; i < n; ++i) {
-				  node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
-				}
-			  }
-
-			  function initialize() {
-				if (!nodes) return;
-				var i, n = nodes.length;
-				strengths = new Array(n);
-				xz = new Array(n);
-				for (i = 0; i < n; ++i) {
-				  strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
-				}
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-				initialize();
-			  };
-
-			  force.strength = function(_) {
-				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-			  };
-
-			  force.x = function(_) {
-				return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
-			  };
-
-			  return force;
-			};
-
-			var y$3 = function(y) {
-			  var strength = constant$7(0.1),
-				  nodes,
-				  strengths,
-				  yz;
-
-			  if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
-
-			  function force(alpha) {
-				for (var i = 0, n = nodes.length, node; i < n; ++i) {
-				  node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
-				}
-			  }
-
-			  function initialize() {
-				if (!nodes) return;
-				var i, n = nodes.length;
-				strengths = new Array(n);
-				yz = new Array(n);
-				for (i = 0; i < n; ++i) {
-				  strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
-				}
-			  }
-
-			  force.initialize = function(_) {
-				nodes = _;
-				initialize();
-			  };
-
-			  force.strength = function(_) {
-				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-			  };
-
-			  force.y = function(_) {
-				return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
-			  };
-
-			  return force;
-			};
-
-			function nopropagation() {
-			  exports.event.stopImmediatePropagation();
-			}
-
-			var noevent = function() {
-			  exports.event.preventDefault();
-			  exports.event.stopImmediatePropagation();
-			};
-
-			var dragDisable = function(view) {
-			  var root = view.document.documentElement,
-				  selection$$1 = select(view).on("dragstart.drag", noevent, true);
-			  if ("onselectstart" in root) {
-				selection$$1.on("selectstart.drag", noevent, true);
-			  } else {
-				root.__noselect = root.style.MozUserSelect;
-				root.style.MozUserSelect = "none";
-			  }
-			};
-
-			function yesdrag(view, noclick) {
-			  var root = view.document.documentElement,
-				  selection$$1 = select(view).on("dragstart.drag", null);
-			  if (noclick) {
-				selection$$1.on("click.drag", noevent, true);
-				setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
-			  }
-			  if ("onselectstart" in root) {
-				selection$$1.on("selectstart.drag", null);
-			  } else {
-				root.style.MozUserSelect = root.__noselect;
-				delete root.__noselect;
-			  }
-			}
-
-			var constant$8 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
-			  this.target = target;
-			  this.type = type;
-			  this.subject = subject;
-			  this.identifier = id;
-			  this.active = active;
-			  this.x = x;
-			  this.y = y;
-			  this.dx = dx;
-			  this.dy = dy;
-			  this._ = dispatch;
-			}
-
-			DragEvent.prototype.on = function() {
-			  var value = this._.on.apply(this._, arguments);
-			  return value === this._ ? this : value;
-			};
-
-			// Ignore right-click, since that should open the context menu.
-			function defaultFilter() {
-			  return !exports.event.button;
-			}
-
-			function defaultContainer() {
-			  return this.parentNode;
-			}
-
-			function defaultSubject(d) {
-			  return d == null ? {x: exports.event.x, y: exports.event.y} : d;
-			}
-
-			var drag = function() {
-			  var filter = defaultFilter,
-				  container = defaultContainer,
-				  subject = defaultSubject,
-				  gestures = {},
-				  listeners = dispatch("start", "drag", "end"),
-				  active = 0,
-				  mousemoving,
-				  touchending;
-
-			  function drag(selection$$1) {
-				selection$$1
-					.on("mousedown.drag", mousedowned)
-					.on("touchstart.drag", touchstarted)
-					.on("touchmove.drag", touchmoved)
-					.on("touchend.drag touchcancel.drag", touchended)
-					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
-			  }
-
-			  function mousedowned() {
-				if (touchending || !filter.apply(this, arguments)) return;
-				var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
-				if (!gesture) return;
-				select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
-				dragDisable(exports.event.view);
-				nopropagation();
-				mousemoving = false;
-				gesture("start");
-			  }
-
-			  function mousemoved() {
-				noevent();
-				mousemoving = true;
-				gestures.mouse("drag");
-			  }
-
-			  function mouseupped() {
-				select(exports.event.view).on("mousemove.drag mouseup.drag", null);
-				yesdrag(exports.event.view, mousemoving);
-				noevent();
-				gestures.mouse("end");
-			  }
-
-			  function touchstarted() {
-				if (!filter.apply(this, arguments)) return;
-				var touches$$1 = exports.event.changedTouches,
-					c = container.apply(this, arguments),
-					n = touches$$1.length, i, gesture;
-
-				for (i = 0; i < n; ++i) {
-				  if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
-					nopropagation();
-					gesture("start");
-				  }
-				}
-			  }
-
-			  function touchmoved() {
-				var touches$$1 = exports.event.changedTouches,
-					n = touches$$1.length, i, gesture;
-
-				for (i = 0; i < n; ++i) {
-				  if (gesture = gestures[touches$$1[i].identifier]) {
-					noevent();
-					gesture("drag");
-				  }
-				}
-			  }
-
-			  function touchended() {
-				var touches$$1 = exports.event.changedTouches,
-					n = touches$$1.length, i, gesture;
-
-				if (touchending) clearTimeout(touchending);
-				touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
-				for (i = 0; i < n; ++i) {
-				  if (gesture = gestures[touches$$1[i].identifier]) {
-					nopropagation();
-					gesture("end");
-				  }
-				}
-			  }
-
-			  function beforestart(id, container, point, that, args) {
-				var p = point(container, id), s, dx, dy,
-					sublisteners = listeners.copy();
-
-				if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
-				  if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
-				  dx = s.x - p[0] || 0;
-				  dy = s.y - p[1] || 0;
-				  return true;
-				})) return;
-
-				return function gesture(type) {
-				  var p0 = p, n;
-				  switch (type) {
-					case "start": gestures[id] = gesture, n = active++; break;
-					case "end": delete gestures[id], --active; // nobreak
-					case "drag": p = point(container, id), n = active; break;
-				  }
-				  customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
-				};
-			  }
-
-			  drag.filter = function(_) {
-				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter;
-			  };
-
-			  drag.container = function(_) {
-				return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container;
-			  };
-
-			  drag.subject = function(_) {
-				return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject;
-			  };
-
-			  drag.on = function() {
-				var value = listeners.on.apply(listeners, arguments);
-				return value === listeners ? drag : value;
-			  };
-
-			  return drag;
-			};
-
-			var constant$9 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function x$4(d) {
-			  return d[0];
-			}
-
-			function y$4(d) {
-			  return d[1];
-			}
-
-			function RedBlackTree() {
-			  this._ = null; // root node
-			}
-
-			function RedBlackNode(node) {
-			  node.U = // parent node
-			  node.C = // color - true for red, false for black
-			  node.L = // left node
-			  node.R = // right node
-			  node.P = // previous node
-			  node.N = null; // next node
-			}
-
-			RedBlackTree.prototype = {
-			  constructor: RedBlackTree,
-
-			  insert: function(after, node) {
-				var parent, grandpa, uncle;
-
-				if (after) {
-				  node.P = after;
-				  node.N = after.N;
-				  if (after.N) after.N.P = node;
-				  after.N = node;
-				  if (after.R) {
-					after = after.R;
-					while (after.L) after = after.L;
-					after.L = node;
-				  } else {
-					after.R = node;
-				  }
-				  parent = after;
-				} else if (this._) {
-				  after = RedBlackFirst(this._);
-				  node.P = null;
-				  node.N = after;
-				  after.P = after.L = node;
-				  parent = after;
-				} else {
-				  node.P = node.N = null;
-				  this._ = node;
-				  parent = null;
-				}
-				node.L = node.R = null;
-				node.U = parent;
-				node.C = true;
-
-				after = node;
-				while (parent && parent.C) {
-				  grandpa = parent.U;
-				  if (parent === grandpa.L) {
-					uncle = grandpa.R;
-					if (uncle && uncle.C) {
-					  parent.C = uncle.C = false;
-					  grandpa.C = true;
-					  after = grandpa;
-					} else {
-					  if (after === parent.R) {
-						RedBlackRotateLeft(this, parent);
-						after = parent;
-						parent = after.U;
-					  }
-					  parent.C = false;
-					  grandpa.C = true;
-					  RedBlackRotateRight(this, grandpa);
-					}
-				  } else {
-					uncle = grandpa.L;
-					if (uncle && uncle.C) {
-					  parent.C = uncle.C = false;
-					  grandpa.C = true;
-					  after = grandpa;
-					} else {
-					  if (after === parent.L) {
-						RedBlackRotateRight(this, parent);
-						after = parent;
-						parent = after.U;
-					  }
-					  parent.C = false;
-					  grandpa.C = true;
-					  RedBlackRotateLeft(this, grandpa);
-					}
-				  }
-				  parent = after.U;
-				}
-				this._.C = false;
-			  },
-
-			  remove: function(node) {
-				if (node.N) node.N.P = node.P;
-				if (node.P) node.P.N = node.N;
-				node.N = node.P = null;
-
-				var parent = node.U,
-					sibling,
-					left = node.L,
-					right = node.R,
-					next,
-					red;
-
-				if (!left) next = right;
-				else if (!right) next = left;
-				else next = RedBlackFirst(right);
-
-				if (parent) {
-				  if (parent.L === node) parent.L = next;
-				  else parent.R = next;
-				} else {
-				  this._ = next;
-				}
-
-				if (left && right) {
-				  red = next.C;
-				  next.C = node.C;
-				  next.L = left;
-				  left.U = next;
-				  if (next !== right) {
-					parent = next.U;
-					next.U = node.U;
-					node = next.R;
-					parent.L = node;
-					next.R = right;
-					right.U = next;
-				  } else {
-					next.U = parent;
-					parent = next;
-					node = next.R;
-				  }
-				} else {
-				  red = node.C;
-				  node = next;
-				}
-
-				if (node) node.U = parent;
-				if (red) return;
-				if (node && node.C) { node.C = false; return; }
-
-				do {
-				  if (node === this._) break;
-				  if (node === parent.L) {
-					sibling = parent.R;
-					if (sibling.C) {
-					  sibling.C = false;
-					  parent.C = true;
-					  RedBlackRotateLeft(this, parent);
-					  sibling = parent.R;
-					}
-					if ((sibling.L && sibling.L.C)
-						|| (sibling.R && sibling.R.C)) {
-					  if (!sibling.R || !sibling.R.C) {
-						sibling.L.C = false;
-						sibling.C = true;
-						RedBlackRotateRight(this, sibling);
-						sibling = parent.R;
-					  }
-					  sibling.C = parent.C;
-					  parent.C = sibling.R.C = false;
-					  RedBlackRotateLeft(this, parent);
-					  node = this._;
-					  break;
-					}
-				  } else {
-					sibling = parent.L;
-					if (sibling.C) {
-					  sibling.C = false;
-					  parent.C = true;
-					  RedBlackRotateRight(this, parent);
-					  sibling = parent.L;
-					}
-					if ((sibling.L && sibling.L.C)
-					  || (sibling.R && sibling.R.C)) {
-					  if (!sibling.L || !sibling.L.C) {
-						sibling.R.C = false;
-						sibling.C = true;
-						RedBlackRotateLeft(this, sibling);
-						sibling = parent.L;
-					  }
-					  sibling.C = parent.C;
-					  parent.C = sibling.L.C = false;
-					  RedBlackRotateRight(this, parent);
-					  node = this._;
-					  break;
-					}
-				  }
-				  sibling.C = true;
-				  node = parent;
-				  parent = parent.U;
-				} while (!node.C);
-
-				if (node) node.C = false;
-			  }
-			};
-
-			function RedBlackRotateLeft(tree, node) {
-			  var p = node,
-				  q = node.R,
-				  parent = p.U;
-
-			  if (parent) {
-				if (parent.L === p) parent.L = q;
-				else parent.R = q;
-			  } else {
-				tree._ = q;
-			  }
-
-			  q.U = parent;
-			  p.U = q;
-			  p.R = q.L;
-			  if (p.R) p.R.U = p;
-			  q.L = p;
-			}
-
-			function RedBlackRotateRight(tree, node) {
-			  var p = node,
-				  q = node.L,
-				  parent = p.U;
-
-			  if (parent) {
-				if (parent.L === p) parent.L = q;
-				else parent.R = q;
-			  } else {
-				tree._ = q;
-			  }
-
-			  q.U = parent;
-			  p.U = q;
-			  p.L = q.R;
-			  if (p.L) p.L.U = p;
-			  q.R = p;
-			}
-
-			function RedBlackFirst(node) {
-			  while (node.L) node = node.L;
-			  return node;
-			}
-
-			function createEdge(left, right, v0, v1) {
-			  var edge = [null, null],
-				  index = edges.push(edge) - 1;
-			  edge.left = left;
-			  edge.right = right;
-			  if (v0) setEdgeEnd(edge, left, right, v0);
-			  if (v1) setEdgeEnd(edge, right, left, v1);
-			  cells[left.index].halfedges.push(index);
-			  cells[right.index].halfedges.push(index);
-			  return edge;
-			}
-
-			function createBorderEdge(left, v0, v1) {
-			  var edge = [v0, v1];
-			  edge.left = left;
-			  return edge;
-			}
-
-			function setEdgeEnd(edge, left, right, vertex) {
-			  if (!edge[0] && !edge[1]) {
-				edge[0] = vertex;
-				edge.left = left;
-				edge.right = right;
-			  } else if (edge.left === right) {
-				edge[1] = vertex;
-			  } else {
-				edge[0] = vertex;
-			  }
-			}
-
-			// Liang–Barsky line clipping.
-			function clipEdge(edge, x0, y0, x1, y1) {
-			  var a = edge[0],
-				  b = edge[1],
-				  ax = a[0],
-				  ay = a[1],
-				  bx = b[0],
-				  by = b[1],
-				  t0 = 0,
-				  t1 = 1,
-				  dx = bx - ax,
-				  dy = by - ay,
-				  r;
-
-			  r = x0 - ax;
-			  if (!dx && r > 0) return;
-			  r /= dx;
-			  if (dx < 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  } else if (dx > 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  }
-
-			  r = x1 - ax;
-			  if (!dx && r < 0) return;
-			  r /= dx;
-			  if (dx < 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  } else if (dx > 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  }
-
-			  r = y0 - ay;
-			  if (!dy && r > 0) return;
-			  r /= dy;
-			  if (dy < 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  } else if (dy > 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  }
-
-			  r = y1 - ay;
-			  if (!dy && r < 0) return;
-			  r /= dy;
-			  if (dy < 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  } else if (dy > 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  }
-
-			  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
-
-			  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
-			  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
-			  return true;
-			}
-
-			function connectEdge(edge, x0, y0, x1, y1) {
-			  var v1 = edge[1];
-			  if (v1) return true;
-
-			  var v0 = edge[0],
-				  left = edge.left,
-				  right = edge.right,
-				  lx = left[0],
-				  ly = left[1],
-				  rx = right[0],
-				  ry = right[1],
-				  fx = (lx + rx) / 2,
-				  fy = (ly + ry) / 2,
-				  fm,
-				  fb;
-
-			  if (ry === ly) {
-				if (fx < x0 || fx >= x1) return;
-				if (lx > rx) {
-				  if (!v0) v0 = [fx, y0];
-				  else if (v0[1] >= y1) return;
-				  v1 = [fx, y1];
-				} else {
-				  if (!v0) v0 = [fx, y1];
-				  else if (v0[1] < y0) return;
-				  v1 = [fx, y0];
-				}
-			  } else {
-				fm = (lx - rx) / (ry - ly);
-				fb = fy - fm * fx;
-				if (fm < -1 || fm > 1) {
-				  if (lx > rx) {
-					if (!v0) v0 = [(y0 - fb) / fm, y0];
-					else if (v0[1] >= y1) return;
-					v1 = [(y1 - fb) / fm, y1];
-				  } else {
-					if (!v0) v0 = [(y1 - fb) / fm, y1];
-					else if (v0[1] < y0) return;
-					v1 = [(y0 - fb) / fm, y0];
-				  }
-				} else {
-				  if (ly < ry) {
-					if (!v0) v0 = [x0, fm * x0 + fb];
-					else if (v0[0] >= x1) return;
-					v1 = [x1, fm * x1 + fb];
-				  } else {
-					if (!v0) v0 = [x1, fm * x1 + fb];
-					else if (v0[0] < x0) return;
-					v1 = [x0, fm * x0 + fb];
-				  }
-				}
-			  }
-
-			  edge[0] = v0;
-			  edge[1] = v1;
-			  return true;
-			}
-
-			function clipEdges(x0, y0, x1, y1) {
-			  var i = edges.length,
-				  edge;
-
-			  while (i--) {
-				if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
-					|| !clipEdge(edge, x0, y0, x1, y1)
-					|| !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3
-						|| Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {
-				  delete edges[i];
-				}
-			  }
-			}
-
-			function createCell(site) {
-			  return cells[site.index] = {
-				site: site,
-				halfedges: []
-			  };
-			}
-
-			function cellHalfedgeAngle(cell, edge) {
-			  var site = cell.site,
-				  va = edge.left,
-				  vb = edge.right;
-			  if (site === vb) vb = va, va = site;
-			  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
-			  if (site === va) va = edge[1], vb = edge[0];
-			  else va = edge[0], vb = edge[1];
-			  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
-			}
-
-			function cellHalfedgeStart(cell, edge) {
-			  return edge[+(edge.left !== cell.site)];
-			}
-
-			function cellHalfedgeEnd(cell, edge) {
-			  return edge[+(edge.left === cell.site)];
-			}
-
-			function sortCellHalfedges() {
-			  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
-				if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
-				  var index = new Array(m),
-					  array = new Array(m);
-				  for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
-				  index.sort(function(i, j) { return array[j] - array[i]; });
-				  for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
-				  for (j = 0; j < m; ++j) halfedges[j] = array[j];
-				}
-			  }
-			}
-
-			function clipCells(x0, y0, x1, y1) {
-			  var nCells = cells.length,
-				  iCell,
-				  cell,
-				  site,
-				  iHalfedge,
-				  halfedges,
-				  nHalfedges,
-				  start,
-				  startX,
-				  startY,
-				  end,
-				  endX,
-				  endY,
-				  cover = true;
-
-			  for (iCell = 0; iCell < nCells; ++iCell) {
-				if (cell = cells[iCell]) {
-				  site = cell.site;
-				  halfedges = cell.halfedges;
-				  iHalfedge = halfedges.length;
-
-				  // Remove any dangling clipped edges.
-				  while (iHalfedge--) {
-					if (!edges[halfedges[iHalfedge]]) {
-					  halfedges.splice(iHalfedge, 1);
-					}
-				  }
-
-				  // Insert any border edges as necessary.
-				  iHalfedge = 0, nHalfedges = halfedges.length;
-				  while (iHalfedge < nHalfedges) {
-					end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
-					start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
-					if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {
-					  halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
-						  Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]
-						  : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]
-						  : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]
-						  : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]
-						  : null)) - 1);
-					  ++nHalfedges;
-					}
-				  }
-
-				  if (nHalfedges) cover = false;
-				}
-			  }
-
-			  // If there weren’t any edges, have the closest site cover the extent.
-			  // It doesn’t matter which corner of the extent we measure!
-			  if (cover) {
-				var dx, dy, d2, dc = Infinity;
-
-				for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
-				  if (cell = cells[iCell]) {
-					site = cell.site;
-					dx = site[0] - x0;
-					dy = site[1] - y0;
-					d2 = dx * dx + dy * dy;
-					if (d2 < dc) dc = d2, cover = cell;
-				  }
-				}
-
-				if (cover) {
-				  var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
-				  cover.halfedges.push(
-					edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
-					edges.push(createBorderEdge(site, v01, v11)) - 1,
-					edges.push(createBorderEdge(site, v11, v10)) - 1,
-					edges.push(createBorderEdge(site, v10, v00)) - 1
-				  );
-				}
-			  }
-
-			  // Lastly delete any cells with no edges; these were entirely clipped.
-			  for (iCell = 0; iCell < nCells; ++iCell) {
-				if (cell = cells[iCell]) {
-				  if (!cell.halfedges.length) {
-					delete cells[iCell];
-				  }
-				}
-			  }
-			}
-
-			var circlePool = [];
-
-			var firstCircle;
-
-			function Circle() {
-			  RedBlackNode(this);
-			  this.x =
-			  this.y =
-			  this.arc =
-			  this.site =
-			  this.cy = null;
-			}
-
-			function attachCircle(arc) {
-			  var lArc = arc.P,
-				  rArc = arc.N;
-
-			  if (!lArc || !rArc) return;
-
-			  var lSite = lArc.site,
-				  cSite = arc.site,
-				  rSite = rArc.site;
-
-			  if (lSite === rSite) return;
-
-			  var bx = cSite[0],
-				  by = cSite[1],
-				  ax = lSite[0] - bx,
-				  ay = lSite[1] - by,
-				  cx = rSite[0] - bx,
-				  cy = rSite[1] - by;
-
-			  var d = 2 * (ax * cy - ay * cx);
-			  if (d >= -epsilon2$1) return;
-
-			  var ha = ax * ax + ay * ay,
-				  hc = cx * cx + cy * cy,
-				  x = (cy * ha - ay * hc) / d,
-				  y = (ax * hc - cx * ha) / d;
-
-			  var circle = circlePool.pop() || new Circle;
-			  circle.arc = arc;
-			  circle.site = cSite;
-			  circle.x = x + bx;
-			  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
-
-			  arc.circle = circle;
-
-			  var before = null,
-				  node = circles._;
-
-			  while (node) {
-				if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
-				  if (node.L) node = node.L;
-				  else { before = node.P; break; }
-				} else {
-				  if (node.R) node = node.R;
-				  else { before = node; break; }
-				}
-			  }
-
-			  circles.insert(before, circle);
-			  if (!before) firstCircle = circle;
-			}
-
-			function detachCircle(arc) {
-			  var circle = arc.circle;
-			  if (circle) {
-				if (!circle.P) firstCircle = circle.N;
-				circles.remove(circle);
-				circlePool.push(circle);
-				RedBlackNode(circle);
-				arc.circle = null;
-			  }
-			}
-
-			var beachPool = [];
-
-			function Beach() {
-			  RedBlackNode(this);
-			  this.edge =
-			  this.site =
-			  this.circle = null;
-			}
-
-			function createBeach(site) {
-			  var beach = beachPool.pop() || new Beach;
-			  beach.site = site;
-			  return beach;
-			}
-
-			function detachBeach(beach) {
-			  detachCircle(beach);
-			  beaches.remove(beach);
-			  beachPool.push(beach);
-			  RedBlackNode(beach);
-			}
-
-			function removeBeach(beach) {
-			  var circle = beach.circle,
-				  x = circle.x,
-				  y = circle.cy,
-				  vertex = [x, y],
-				  previous = beach.P,
-				  next = beach.N,
-				  disappearing = [beach];
-
-			  detachBeach(beach);
-
-			  var lArc = previous;
-			  while (lArc.circle
-				  && Math.abs(x - lArc.circle.x) < epsilon$3
-				  && Math.abs(y - lArc.circle.cy) < epsilon$3) {
-				previous = lArc.P;
-				disappearing.unshift(lArc);
-				detachBeach(lArc);
-				lArc = previous;
-			  }
-
-			  disappearing.unshift(lArc);
-			  detachCircle(lArc);
-
-			  var rArc = next;
-			  while (rArc.circle
-				  && Math.abs(x - rArc.circle.x) < epsilon$3
-				  && Math.abs(y - rArc.circle.cy) < epsilon$3) {
-				next = rArc.N;
-				disappearing.push(rArc);
-				detachBeach(rArc);
-				rArc = next;
-			  }
-
-			  disappearing.push(rArc);
-			  detachCircle(rArc);
-
-			  var nArcs = disappearing.length,
-				  iArc;
-			  for (iArc = 1; iArc < nArcs; ++iArc) {
-				rArc = disappearing[iArc];
-				lArc = disappearing[iArc - 1];
-				setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
-			  }
-
-			  lArc = disappearing[0];
-			  rArc = disappearing[nArcs - 1];
-			  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
-
-			  attachCircle(lArc);
-			  attachCircle(rArc);
-			}
-
-			function addBeach(site) {
-			  var x = site[0],
-				  directrix = site[1],
-				  lArc,
-				  rArc,
-				  dxl,
-				  dxr,
-				  node = beaches._;
-
-			  while (node) {
-				dxl = leftBreakPoint(node, directrix) - x;
-				if (dxl > epsilon$3) node = node.L; else {
-				  dxr = x - rightBreakPoint(node, directrix);
-				  if (dxr > epsilon$3) {
-					if (!node.R) {
-					  lArc = node;
-					  break;
-					}
-					node = node.R;
-				  } else {
-					if (dxl > -epsilon$3) {
-					  lArc = node.P;
-					  rArc = node;
-					} else if (dxr > -epsilon$3) {
-					  lArc = node;
-					  rArc = node.N;
-					} else {
-					  lArc = rArc = node;
-					}
-					break;
-				  }
-				}
-			  }
-
-			  createCell(site);
-			  var newArc = createBeach(site);
-			  beaches.insert(lArc, newArc);
-
-			  if (!lArc && !rArc) return;
-
-			  if (lArc === rArc) {
-				detachCircle(lArc);
-				rArc = createBeach(lArc.site);
-				beaches.insert(newArc, rArc);
-				newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
-				attachCircle(lArc);
-				attachCircle(rArc);
-				return;
-			  }
-
-			  if (!rArc) { // && lArc
-				newArc.edge = createEdge(lArc.site, newArc.site);
-				return;
-			  }
-
-			  // else lArc !== rArc
-			  detachCircle(lArc);
-			  detachCircle(rArc);
-
-			  var lSite = lArc.site,
-				  ax = lSite[0],
-				  ay = lSite[1],
-				  bx = site[0] - ax,
-				  by = site[1] - ay,
-				  rSite = rArc.site,
-				  cx = rSite[0] - ax,
-				  cy = rSite[1] - ay,
-				  d = 2 * (bx * cy - by * cx),
-				  hb = bx * bx + by * by,
-				  hc = cx * cx + cy * cy,
-				  vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
-
-			  setEdgeEnd(rArc.edge, lSite, rSite, vertex);
-			  newArc.edge = createEdge(lSite, site, null, vertex);
-			  rArc.edge = createEdge(site, rSite, null, vertex);
-			  attachCircle(lArc);
-			  attachCircle(rArc);
-			}
-
-			function leftBreakPoint(arc, directrix) {
-			  var site = arc.site,
-				  rfocx = site[0],
-				  rfocy = site[1],
-				  pby2 = rfocy - directrix;
-
-			  if (!pby2) return rfocx;
-
-			  var lArc = arc.P;
-			  if (!lArc) return -Infinity;
-
-			  site = lArc.site;
-			  var lfocx = site[0],
-				  lfocy = site[1],
-				  plby2 = lfocy - directrix;
-
-			  if (!plby2) return lfocx;
-
-			  var hl = lfocx - rfocx,
-				  aby2 = 1 / pby2 - 1 / plby2,
-				  b = hl / plby2;
-
-			  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
-
-			  return (rfocx + lfocx) / 2;
-			}
-
-			function rightBreakPoint(arc, directrix) {
-			  var rArc = arc.N;
-			  if (rArc) return leftBreakPoint(rArc, directrix);
-			  var site = arc.site;
-			  return site[1] === directrix ? site[0] : Infinity;
-			}
-
-			var epsilon$3 = 1e-6;
-			var epsilon2$1 = 1e-12;
-			var beaches;
-			var cells;
-			var circles;
-			var edges;
-
-			function triangleArea(a, b, c) {
-			  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
-			}
-
-			function lexicographic(a, b) {
-			  return b[1] - a[1]
-				  || b[0] - a[0];
-			}
-
-			function Diagram(sites, extent) {
-			  var site = sites.sort(lexicographic).pop(),
-				  x,
-				  y,
-				  circle;
-
-			  edges = [];
-			  cells = new Array(sites.length);
-			  beaches = new RedBlackTree;
-			  circles = new RedBlackTree;
-
-			  while (true) {
-				circle = firstCircle;
-				if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
-				  if (site[0] !== x || site[1] !== y) {
-					addBeach(site);
-					x = site[0], y = site[1];
-				  }
-				  site = sites.pop();
-				} else if (circle) {
-				  removeBeach(circle.arc);
-				} else {
-				  break;
-				}
-			  }
-
-			  sortCellHalfedges();
-
-			  if (extent) {
-				var x0 = +extent[0][0],
-					y0 = +extent[0][1],
-					x1 = +extent[1][0],
-					y1 = +extent[1][1];
-				clipEdges(x0, y0, x1, y1);
-				clipCells(x0, y0, x1, y1);
-			  }
-
-			  this.edges = edges;
-			  this.cells = cells;
-
-			  beaches =
-			  circles =
-			  edges =
-			  cells = null;
-			}
-
-			Diagram.prototype = {
-			  constructor: Diagram,
-
-			  polygons: function() {
-				var edges = this.edges;
-
-				return this.cells.map(function(cell) {
-				  var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
-				  polygon.data = cell.site.data;
-				  return polygon;
-				});
-			  },
-
-			  triangles: function() {
-				var triangles = [],
-					edges = this.edges;
-
-				this.cells.forEach(function(cell, i) {
-				  var site = cell.site,
-					  halfedges = cell.halfedges,
-					  j = -1,
-					  m = halfedges.length,
-					  s0,
-					  e1 = edges[halfedges[m - 1]],
-					  s1 = e1.left === site ? e1.right : e1.left;
-
-				  while (++j < m) {
-					s0 = s1;
-					e1 = edges[halfedges[j]];
-					s1 = e1.left === site ? e1.right : e1.left;
-					if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
-					  triangles.push([site.data, s0.data, s1.data]);
-					}
-				  }
-				});
-
-				return triangles;
-			  },
-
-			  links: function() {
-				return this.edges.filter(function(edge) {
-				  return edge.right;
-				}).map(function(edge) {
-				  return {
-					source: edge.left.data,
-					target: edge.right.data
-				  };
-				});
-			  },
-
-			  find: function(x, y, radius) {
-				var that = this,
-					i0, i1 = that._found || 0,
-					cell = that.cells[i1] || that.cells[i1 = 0],
-					dx = x - cell.site[0],
-					dy = y - cell.site[1],
-					d2 = dx * dx + dy * dy;
-
-				do {
-				  cell = that.cells[i0 = i1], i1 = null;
-				  cell.halfedges.forEach(function(e) {
-					var edge = that.edges[e], v = edge.left;
-					if ((v === cell.site || !v) && !(v = edge.right)) return;
-					var vx = x - v[0],
-						vy = y - v[1],
-						v2 = vx * vx + vy * vy;
-					if (v2 < d2) d2 = v2, i1 = v.index;
-				  });
-				} while (i1 !== null);
-
-				that._found = i0;
-
-				return radius == null || d2 <= radius * radius ? cell.site : null;
-			  }
-			};
-
-			var voronoi = function() {
-			  var x$$1 = x$4,
-				  y$$1 = y$4,
-				  extent = null;
-
-			  function voronoi(data) {
-				return new Diagram(data.map(function(d, i) {
-				  var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3];
-				  s.index = i;
-				  s.data = d;
-				  return s;
-				}), extent);
-			  }
-
-			  voronoi.polygons = function(data) {
-				return voronoi(data).polygons();
-			  };
-
-			  voronoi.links = function(data) {
-				return voronoi(data).links();
-			  };
-
-			  voronoi.triangles = function(data) {
-				return voronoi(data).triangles();
-			  };
-
-			  voronoi.x = function(_) {
-				return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1;
-			  };
-
-			  voronoi.y = function(_) {
-				return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1;
-			  };
-
-			  voronoi.extent = function(_) {
-				return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
-			  };
-
-			  voronoi.size = function(_) {
-				return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
-			  };
-
-			  return voronoi;
-			};
-
-			var constant$10 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function ZoomEvent(target, type, transform) {
-			  this.target = target;
-			  this.type = type;
-			  this.transform = transform;
-			}
-
-			function Transform(k, x, y) {
-			  this.k = k;
-			  this.x = x;
-			  this.y = y;
-			}
-
-			Transform.prototype = {
-			  constructor: Transform,
-			  scale: function(k) {
-				return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
-			  },
-			  translate: function(x, y) {
-				return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
-			  },
-			  apply: function(point) {
-				return [point[0] * this.k + this.x, point[1] * this.k + this.y];
-			  },
-			  applyX: function(x) {
-				return x * this.k + this.x;
-			  },
-			  applyY: function(y) {
-				return y * this.k + this.y;
-			  },
-			  invert: function(location) {
-				return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
-			  },
-			  invertX: function(x) {
-				return (x - this.x) / this.k;
-			  },
-			  invertY: function(y) {
-				return (y - this.y) / this.k;
-			  },
-			  rescaleX: function(x) {
-				return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
-			  },
-			  rescaleY: function(y) {
-				return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
-			  },
-			  toString: function() {
-				return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
-			  }
-			};
-
-			var identity$6 = new Transform(1, 0, 0);
-
-			transform.prototype = Transform.prototype;
-
-			function transform(node) {
-			  return node.__zoom || identity$6;
-			}
-
-			function nopropagation$1() {
-			  exports.event.stopImmediatePropagation();
-			}
-
-			var noevent$1 = function() {
-			  exports.event.preventDefault();
-			  exports.event.stopImmediatePropagation();
-			};
-
-			// Ignore right-click, since that should open the context menu.
-			function defaultFilter$1() {
-			  return !exports.event.button;
-			}
-
-			function defaultExtent() {
-			  var e = this, w, h;
-			  if (e instanceof SVGElement) {
-				e = e.ownerSVGElement || e;
-				w = e.width.baseVal.value;
-				h = e.height.baseVal.value;
-			  } else {
-				w = e.clientWidth;
-				h = e.clientHeight;
-			  }
-			  return [[0, 0], [w, h]];
-			}
-
-			function defaultTransform() {
-			  return this.__zoom || identity$6;
-			}
-
-			var zoom = function() {
-			  var filter = defaultFilter$1,
-				  extent = defaultExtent,
-				  k0 = 0,
-				  k1 = Infinity,
-				  x0 = -k1,
-				  x1 = k1,
-				  y0 = x0,
-				  y1 = x1,
-				  duration = 250,
-				  gestures = [],
-				  listeners = dispatch("start", "zoom", "end"),
-				  touchstarting,
-				  touchending,
-				  touchDelay = 500,
-				  wheelDelay = 150;
-
-			  function zoom(selection$$1) {
-				selection$$1
-					.on("wheel.zoom", wheeled)
-					.on("mousedown.zoom", mousedowned)
-					.on("dblclick.zoom", dblclicked)
-					.on("touchstart.zoom", touchstarted)
-					.on("touchmove.zoom", touchmoved)
-					.on("touchend.zoom touchcancel.zoom", touchended)
-					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
-					.property("__zoom", defaultTransform);
-			  }
-
-			  zoom.transform = function(collection, transform) {
-				var selection$$1 = collection.selection ? collection.selection() : collection;
-				selection$$1.property("__zoom", defaultTransform);
-				if (collection !== selection$$1) {
-				  schedule(collection, transform);
-				} else {
-				  selection$$1.interrupt().each(function() {
-					gesture(this, arguments)
-						.start()
-						.zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
-						.end();
-				  });
-				}
-			  };
-
-			  zoom.scaleBy = function(selection$$1, k) {
-				zoom.scaleTo(selection$$1, function() {
-				  var k0 = this.__zoom.k,
-					  k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-				  return k0 * k1;
-				});
-			  };
-
-			  zoom.scaleTo = function(selection$$1, k) {
-				zoom.transform(selection$$1, function() {
-				  var e = extent.apply(this, arguments),
-					  t0 = this.__zoom,
-					  p0 = centroid(e),
-					  p1 = t0.invert(p0),
-					  k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-				  return constrain(translate(scale(t0, k1), p0, p1), e);
-				});
-			  };
-
-			  zoom.translateBy = function(selection$$1, x, y) {
-				zoom.transform(selection$$1, function() {
-				  return constrain(this.__zoom.translate(
-					typeof x === "function" ? x.apply(this, arguments) : x,
-					typeof y === "function" ? y.apply(this, arguments) : y
-				  ), extent.apply(this, arguments));
-				});
-			  };
-
-			  function scale(transform, k) {
-				k = Math.max(k0, Math.min(k1, k));
-				return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
-			  }
-
-			  function translate(transform, p0, p1) {
-				var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
-				return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
-			  }
-
-			  function constrain(transform, extent) {
-				var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),
-					dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);
-				return dx || dy ? transform.translate(dx, dy) : transform;
-			  }
-
-			  function centroid(extent) {
-				return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
-			  }
-
-			  function schedule(transition$$1, transform, center) {
-				transition$$1
-					.on("start.zoom", function() { gesture(this, arguments).start(); })
-					.on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
-					.tween("zoom", function() {
-					  var that = this,
-						  args = arguments,
-						  g = gesture(that, args),
-						  e = extent.apply(that, args),
-						  p = center || centroid(e),
-						  w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
-						  a = that.__zoom,
-						  b = typeof transform === "function" ? transform.apply(that, args) : transform,
-						  i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
-					  return function(t) {
-						if (t === 1) t = b; // Avoid rounding error on end.
-						else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
-						g.zoom(null, t);
-					  };
-					});
-			  }
-
-			  function gesture(that, args) {
-				for (var i = 0, n = gestures.length, g; i < n; ++i) {
-				  if ((g = gestures[i]).that === that) {
-					return g;
-				  }
-				}
-				return new Gesture(that, args);
-			  }
-
-			  function Gesture(that, args) {
-				this.that = that;
-				this.args = args;
-				this.index = -1;
-				this.active = 0;
-				this.extent = extent.apply(that, args);
-			  }
-
-			  Gesture.prototype = {
-				start: function() {
-				  if (++this.active === 1) {
-					this.index = gestures.push(this) - 1;
-					this.emit("start");
-				  }
-				  return this;
-				},
-				zoom: function(key, transform) {
-				  if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
-				  if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
-				  if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
-				  this.that.__zoom = transform;
-				  this.emit("zoom");
-				  return this;
-				},
-				end: function() {
-				  if (--this.active === 0) {
-					gestures.splice(this.index, 1);
-					this.index = -1;
-					this.emit("end");
-				  }
-				  return this;
-				},
-				emit: function(type) {
-				  customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
-				}
-			  };
-
-			  function wheeled() {
-				if (!filter.apply(this, arguments)) return;
-				var g = gesture(this, arguments),
-					t = this.__zoom,
-					k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
-					p = mouse(this);
-
-				// If the mouse is in the same location as before, reuse it.
-				// If there were recent wheel events, reset the wheel idle timeout.
-				if (g.wheel) {
-				  if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
-					g.mouse[1] = t.invert(g.mouse[0] = p);
-				  }
-				  clearTimeout(g.wheel);
-				}
-
-				// If this wheel event won’t trigger a transform change, ignore it.
-				else if (t.k === k) return;
-
-				// Otherwise, capture the mouse point and location at the start.
-				else {
-				  g.mouse = [p, t.invert(p)];
-				  interrupt(this);
-				  g.start();
-				}
-
-				noevent$1();
-				g.wheel = setTimeout(wheelidled, wheelDelay);
-				g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
-
-				function wheelidled() {
-				  g.wheel = null;
-				  g.end();
-				}
-			  }
-
-			  function mousedowned() {
-				if (touchending || !filter.apply(this, arguments)) return;
-				var g = gesture(this, arguments),
-					v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
-					p = mouse(this);
-
-				dragDisable(exports.event.view);
-				nopropagation$1();
-				g.mouse = [p, this.__zoom.invert(p)];
-				interrupt(this);
-				g.start();
-
-				function mousemoved() {
-				  noevent$1();
-				  g.moved = true;
-				  g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
-				}
-
-				function mouseupped() {
-				  v.on("mousemove.zoom mouseup.zoom", null);
-				  yesdrag(exports.event.view, g.moved);
-				  noevent$1();
-				  g.end();
-				}
-			  }
-
-			  function dblclicked() {
-				if (!filter.apply(this, arguments)) return;
-				var t0 = this.__zoom,
-					p0 = mouse(this),
-					p1 = t0.invert(p0),
-					k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
-					t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
-
-				noevent$1();
-				if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
-				else select(this).call(zoom.transform, t1);
-			  }
-
-			  function touchstarted() {
-				if (!filter.apply(this, arguments)) return;
-				var g = gesture(this, arguments),
-					touches$$1 = exports.event.changedTouches,
-					n = touches$$1.length, i, t, p;
-
-				nopropagation$1();
-				for (i = 0; i < n; ++i) {
-				  t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
-				  p = [p, this.__zoom.invert(p), t.identifier];
-				  if (!g.touch0) g.touch0 = p;
-				  else if (!g.touch1) g.touch1 = p;
-				}
-				if (touchstarting) {
-				  touchstarting = clearTimeout(touchstarting);
-				  if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);
-				}
-				if (exports.event.touches.length === n) {
-				  touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
-				  interrupt(this);
-				  g.start();
-				}
-			  }
-
-			  function touchmoved() {
-				var g = gesture(this, arguments),
-					touches$$1 = exports.event.changedTouches,
-					n = touches$$1.length, i, t, p, l;
-
-				noevent$1();
-				if (touchstarting) touchstarting = clearTimeout(touchstarting);
-				for (i = 0; i < n; ++i) {
-				  t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
-				  if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
-				  else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
-				}
-				t = g.that.__zoom;
-				if (g.touch1) {
-				  var p0 = g.touch0[0], l0 = g.touch0[1],
-					  p1 = g.touch1[0], l1 = g.touch1[1],
-					  dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
-					  dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
-				  t = scale(t, Math.sqrt(dp / dl));
-				  p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
-				  l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
-				}
-				else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
-				else return;
-				g.zoom("touch", constrain(translate(t, p, l), g.extent));
-			  }
-
-			  function touchended() {
-				var g = gesture(this, arguments),
-					touches$$1 = exports.event.changedTouches,
-					n = touches$$1.length, i, t;
-
-				nopropagation$1();
-				if (touchending) clearTimeout(touchending);
-				touchending = setTimeout(function() { touchending = null; }, touchDelay);
-				for (i = 0; i < n; ++i) {
-				  t = touches$$1[i];
-				  if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
-				  else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
-				}
-				if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
-				if (!g.touch0) g.end();
-			  }
-
-			  zoom.filter = function(_) {
-				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter;
-			  };
-
-			  zoom.extent = function(_) {
-				return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
-			  };
-
-			  zoom.scaleExtent = function(_) {
-				return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
-			  };
-
-			  zoom.translateExtent = function(_) {
-				return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
-			  };
-
-			  zoom.duration = function(_) {
-				return arguments.length ? (duration = +_, zoom) : duration;
-			  };
-
-			  zoom.on = function() {
-				var value = listeners.on.apply(listeners, arguments);
-				return value === listeners ? zoom : value;
-			  };
-
-			  return zoom;
-			};
-
-			var constant$11 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var BrushEvent = function(target, type, selection) {
-			  this.target = target;
-			  this.type = type;
-			  this.selection = selection;
-			};
-
-			function nopropagation$2() {
-			  exports.event.stopImmediatePropagation();
-			}
-
-			var noevent$2 = function() {
-			  exports.event.preventDefault();
-			  exports.event.stopImmediatePropagation();
-			};
-
-			var MODE_DRAG = {name: "drag"};
-			var MODE_SPACE = {name: "space"};
-			var MODE_HANDLE = {name: "handle"};
-			var MODE_CENTER = {name: "center"};
-
-			var X = {
-			  name: "x",
-			  handles: ["e", "w"].map(type$1),
-			  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
-			  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
-			};
-
-			var Y = {
-			  name: "y",
-			  handles: ["n", "s"].map(type$1),
-			  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
-			  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
-			};
-
-			var XY = {
-			  name: "xy",
-			  handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1),
-			  input: function(xy) { return xy; },
-			  output: function(xy) { return xy; }
-			};
-
-			var cursors = {
-			  overlay: "crosshair",
-			  selection: "move",
-			  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 flipX = {
-			  e: "w",
-			  w: "e",
-			  nw: "ne",
-			  ne: "nw",
-			  se: "sw",
-			  sw: "se"
-			};
-
-			var flipY = {
-			  n: "s",
-			  s: "n",
-			  nw: "sw",
-			  ne: "se",
-			  se: "ne",
-			  sw: "nw"
-			};
-
-			var signsX = {
-			  overlay: +1,
-			  selection: +1,
-			  n: null,
-			  e: +1,
-			  s: null,
-			  w: -1,
-			  nw: -1,
-			  ne: +1,
-			  se: +1,
-			  sw: -1
-			};
-
-			var signsY = {
-			  overlay: +1,
-			  selection: +1,
-			  n: -1,
-			  e: null,
-			  s: +1,
-			  w: null,
-			  nw: -1,
-			  ne: -1,
-			  se: +1,
-			  sw: +1
-			};
-
-			function type$1(t) {
-			  return {type: t};
-			}
-
-			// Ignore right-click, since that should open the context menu.
-			function defaultFilter$2() {
-			  return !exports.event.button;
-			}
-
-			function defaultExtent$1() {
-			  var svg = this.ownerSVGElement || this;
-			  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
-			}
-
-			// Like d3.local, but with the name “__brush” rather than auto-generated.
-			function local$1(node) {
-			  while (!node.__brush) if (!(node = node.parentNode)) return;
-			  return node.__brush;
-			}
-
-			function empty$1(extent) {
-			  return extent[0][0] === extent[1][0]
-				  || extent[0][1] === extent[1][1];
-			}
-
-			function brushSelection(node) {
-			  var state = node.__brush;
-			  return state ? state.dim.output(state.selection) : null;
-			}
-
-			function brushX() {
-			  return brush$1(X);
-			}
-
-			function brushY() {
-			  return brush$1(Y);
-			}
-
-			var brush = function() {
-			  return brush$1(XY);
-			};
-
-			function brush$1(dim) {
-			  var extent = defaultExtent$1,
-				  filter = defaultFilter$2,
-				  listeners = dispatch(brush, "start", "brush", "end"),
-				  handleSize = 6,
-				  touchending;
-
-			  function brush(group) {
-				var overlay = group
-					.property("__brush", initialize)
-				  .selectAll(".overlay")
-				  .data([type$1("overlay")]);
-
-				overlay.enter().append("rect")
-					.attr("class", "overlay")
-					.attr("pointer-events", "all")
-					.attr("cursor", cursors.overlay)
-				  .merge(overlay)
-					.each(function() {
-					  var extent = local$1(this).extent;
-					  select(this)
-						  .attr("x", extent[0][0])
-						  .attr("y", extent[0][1])
-						  .attr("width", extent[1][0] - extent[0][0])
-						  .attr("height", extent[1][1] - extent[0][1]);
-					});
-
-				group.selectAll(".selection")
-				  .data([type$1("selection")])
-				  .enter().append("rect")
-					.attr("class", "selection")
-					.attr("cursor", cursors.selection)
-					.attr("fill", "#777")
-					.attr("fill-opacity", 0.3)
-					.attr("stroke", "#fff")
-					.attr("shape-rendering", "crispEdges");
-
-				var handle = group.selectAll(".handle")
-				  .data(dim.handles, function(d) { return d.type; });
-
-				handle.exit().remove();
-
-				handle.enter().append("rect")
-					.attr("class", function(d) { return "handle handle--" + d.type; })
-					.attr("cursor", function(d) { return cursors[d.type]; });
-
-				group
-					.each(redraw)
-					.attr("fill", "none")
-					.attr("pointer-events", "all")
-					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
-					.on("mousedown.brush touchstart.brush", started);
-			  }
-
-			  brush.move = function(group, selection$$1) {
-				if (group.selection) {
-				  group
-					  .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
-					  .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
-					  .tween("brush", function() {
-						var that = this,
-							state = that.__brush,
-							emit = emitter(that, arguments),
-							selection0 = state.selection,
-							selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
-							i = interpolate(selection0, selection1);
-
-						function tween(t) {
-						  state.selection = t === 1 && empty$1(selection1) ? null : i(t);
-						  redraw.call(that);
-						  emit.brush();
-						}
-
-						return selection0 && selection1 ? tween : tween(1);
-					  });
-				} else {
-				  group
-					  .each(function() {
-						var that = this,
-							args = arguments,
-							state = that.__brush,
-							selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
-							emit = emitter(that, args).beforestart();
-
-						interrupt(that);
-						state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
-						redraw.call(that);
-						emit.start().brush().end();
-					  });
-				}
-			  };
-
-			  function redraw() {
-				var group = select(this),
-					selection$$1 = local$1(this).selection;
-
-				if (selection$$1) {
-				  group.selectAll(".selection")
-					  .style("display", null)
-					  .attr("x", selection$$1[0][0])
-					  .attr("y", selection$$1[0][1])
-					  .attr("width", selection$$1[1][0] - selection$$1[0][0])
-					  .attr("height", selection$$1[1][1] - selection$$1[0][1]);
-
-				  group.selectAll(".handle")
-					  .style("display", null)
-					  .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
-					  .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
-					  .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
-					  .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
-				}
-
-				else {
-				  group.selectAll(".selection,.handle")
-					  .style("display", "none")
-					  .attr("x", null)
-					  .attr("y", null)
-					  .attr("width", null)
-					  .attr("height", null);
-				}
-			  }
-
-			  function emitter(that, args) {
-				return that.__brush.emitter || new Emitter(that, args);
-			  }
-
-			  function Emitter(that, args) {
-				this.that = that;
-				this.args = args;
-				this.state = that.__brush;
-				this.active = 0;
-			  }
-
-			  Emitter.prototype = {
-				beforestart: function() {
-				  if (++this.active === 1) this.state.emitter = this, this.starting = true;
-				  return this;
-				},
-				start: function() {
-				  if (this.starting) this.starting = false, this.emit("start");
-				  return this;
-				},
-				brush: function() {
-				  this.emit("brush");
-				  return this;
-				},
-				end: function() {
-				  if (--this.active === 0) delete this.state.emitter, this.emit("end");
-				  return this;
-				},
-				emit: function(type) {
-				  customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
-				}
-			  };
-
-			  function started() {
-				if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }
-				else if (touchending) return;
-				if (!filter.apply(this, arguments)) return;
-
-				var that = this,
-					type = exports.event.target.__data__.type,
-					mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
-					signX = dim === Y ? null : signsX[type],
-					signY = dim === X ? null : signsY[type],
-					state = local$1(that),
-					extent = state.extent,
-					selection$$1 = state.selection,
-					W = extent[0][0], w0, w1,
-					N = extent[0][1], n0, n1,
-					E = extent[1][0], e0, e1,
-					S = extent[1][1], s0, s1,
-					dx,
-					dy,
-					moving,
-					shifting = signX && signY && exports.event.shiftKey,
-					lockX,
-					lockY,
-					point0 = mouse(that),
-					point = point0,
-					emit = emitter(that, arguments).beforestart();
-
-				if (type === "overlay") {
-				  state.selection = selection$$1 = [
-					[w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
-					[e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
-				  ];
-				} else {
-				  w0 = selection$$1[0][0];
-				  n0 = selection$$1[0][1];
-				  e0 = selection$$1[1][0];
-				  s0 = selection$$1[1][1];
-				}
-
-				w1 = w0;
-				n1 = n0;
-				e1 = e0;
-				s1 = s0;
-
-				var group = select(that)
-					.attr("pointer-events", "none");
-
-				var overlay = group.selectAll(".overlay")
-					.attr("cursor", cursors[type]);
-
-				if (exports.event.touches) {
-				  group
-					  .on("touchmove.brush", moved, true)
-					  .on("touchend.brush touchcancel.brush", ended, true);
-				} else {
-				  var view = select(exports.event.view)
-					  .on("keydown.brush", keydowned, true)
-					  .on("keyup.brush", keyupped, true)
-					  .on("mousemove.brush", moved, true)
-					  .on("mouseup.brush", ended, true);
-
-				  dragDisable(exports.event.view);
-				}
-
-				nopropagation$2();
-				interrupt(that);
-				redraw.call(that);
-				emit.start();
-
-				function moved() {
-				  var point1 = mouse(that);
-				  if (shifting && !lockX && !lockY) {
-					if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
-					else lockX = true;
-				  }
-				  point = point1;
-				  moving = true;
-				  noevent$2();
-				  move();
-				}
-
-				function move() {
-				  var t;
-
-				  dx = point[0] - point0[0];
-				  dy = point[1] - point0[1];
-
-				  switch (mode) {
-					case MODE_SPACE:
-					case MODE_DRAG: {
-					  if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
-					  if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
-					  break;
-					}
-					case MODE_HANDLE: {
-					  if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
-					  else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
-					  if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
-					  else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
-					  break;
-					}
-					case MODE_CENTER: {
-					  if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
-					  if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
-					  break;
-					}
-				  }
-
-				  if (e1 < w1) {
-					signX *= -1;
-					t = w0, w0 = e0, e0 = t;
-					t = w1, w1 = e1, e1 = t;
-					if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
-				  }
-
-				  if (s1 < n1) {
-					signY *= -1;
-					t = n0, n0 = s0, s0 = t;
-					t = n1, n1 = s1, s1 = t;
-					if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
-				  }
-
-				  if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
-				  if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
-				  if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
-
-				  if (selection$$1[0][0] !== w1
-					  || selection$$1[0][1] !== n1
-					  || selection$$1[1][0] !== e1
-					  || selection$$1[1][1] !== s1) {
-					state.selection = [[w1, n1], [e1, s1]];
-					redraw.call(that);
-					emit.brush();
-				  }
-				}
-
-				function ended() {
-				  nopropagation$2();
-				  if (exports.event.touches) {
-					if (exports.event.touches.length) return;
-					if (touchending) clearTimeout(touchending);
-					touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
-					group.on("touchmove.brush touchend.brush touchcancel.brush", null);
-				  } else {
-					yesdrag(exports.event.view, moving);
-					view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
-				  }
-				  group.attr("pointer-events", "all");
-				  overlay.attr("cursor", cursors.overlay);
-				  if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
-				  if (empty$1(selection$$1)) state.selection = null, redraw.call(that);
-				  emit.end();
-				}
-
-				function keydowned() {
-				  switch (exports.event.keyCode) {
-					case 16: { // SHIFT
-					  shifting = signX && signY;
-					  break;
-					}
-					case 18: { // ALT
-					  if (mode === MODE_HANDLE) {
-						if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-						if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-						mode = MODE_CENTER;
-						move();
-					  }
-					  break;
-					}
-					case 32: { // SPACE; takes priority over ALT
-					  if (mode === MODE_HANDLE || mode === MODE_CENTER) {
-						if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
-						if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
-						mode = MODE_SPACE;
-						overlay.attr("cursor", cursors.selection);
-						move();
-					  }
-					  break;
-					}
-					default: return;
-				  }
-				  noevent$2();
-				}
-
-				function keyupped() {
-				  switch (exports.event.keyCode) {
-					case 16: { // SHIFT
-					  if (shifting) {
-						lockX = lockY = shifting = false;
-						move();
-					  }
-					  break;
-					}
-					case 18: { // ALT
-					  if (mode === MODE_CENTER) {
-						if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-						if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-						mode = MODE_HANDLE;
-						move();
-					  }
-					  break;
-					}
-					case 32: { // SPACE
-					  if (mode === MODE_SPACE) {
-						if (exports.event.altKey) {
-						  if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-						  if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-						  mode = MODE_CENTER;
-						} else {
-						  if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-						  if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-						  mode = MODE_HANDLE;
-						}
-						overlay.attr("cursor", cursors[type]);
-						move();
-					  }
-					  break;
-					}
-					default: return;
-				  }
-				  noevent$2();
-				}
-			  }
-
-			  function initialize() {
-				var state = this.__brush || {selection: null};
-				state.extent = extent.apply(this, arguments);
-				state.dim = dim;
-				return state;
-			  }
-
-			  brush.extent = function(_) {
-				return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
-			  };
-
-			  brush.filter = function(_) {
-				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter;
-			  };
-
-			  brush.handleSize = function(_) {
-				return arguments.length ? (handleSize = +_, brush) : handleSize;
-			  };
-
-			  brush.on = function() {
-				var value = listeners.on.apply(listeners, arguments);
-				return value === listeners ? brush : value;
-			  };
-
-			  return brush;
-			}
-
-			var cos = Math.cos;
-			var sin = Math.sin;
-			var pi$3 = Math.PI;
-			var halfPi$2 = pi$3 / 2;
-			var tau$3 = pi$3 * 2;
-			var max$1 = Math.max;
-
-			function compareValue(compare) {
-			  return function(a, b) {
-				return compare(
-				  a.source.value + a.target.value,
-				  b.source.value + b.target.value
-				);
-			  };
-			}
-
-			var chord = function() {
-			  var padAngle = 0,
-				  sortGroups = null,
-				  sortSubgroups = null,
-				  sortChords = null;
-
-			  function chord(matrix) {
-				var n = matrix.length,
-					groupSums = [],
-					groupIndex = range(n),
-					subgroupIndex = [],
-					chords = [],
-					groups = chords.groups = new Array(n),
-					subgroups = new Array(n * n),
-					k,
-					x,
-					x0,
-					dx,
-					i,
-					j;
-
-				// Compute the sum.
-				k = 0, i = -1; while (++i < n) {
-				  x = 0, j = -1; while (++j < n) {
-					x += matrix[i][j];
-				  }
-				  groupSums.push(x);
-				  subgroupIndex.push(range(n));
-				  k += x;
-				}
-
-				// Sort groups…
-				if (sortGroups) groupIndex.sort(function(a, b) {
-				  return sortGroups(groupSums[a], groupSums[b]);
-				});
-
-				// Sort subgroups…
-				if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
-				  d.sort(function(a, b) {
-					return sortSubgroups(matrix[i][a], matrix[i][b]);
-				  });
-				});
-
-				// Convert the sum to scaling factor for [0, 2pi].
-				// TODO Allow start and end angle to be specified?
-				// TODO Allow padding to be specified as percentage?
-				k = max$1(0, tau$3 - padAngle * n) / k;
-				dx = k ? padAngle : tau$3 / n;
-
-				// Compute the start and end angle for each group and subgroup.
-				// Note: Opera has a bug reordering object literal properties!
-				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[dj * n + di] = {
-					  index: di,
-					  subindex: dj,
-					  startAngle: a0,
-					  endAngle: a1,
-					  value: v
-					};
-				  }
-				  groups[di] = {
-					index: di,
-					startAngle: x0,
-					endAngle: x,
-					value: groupSums[di]
-				  };
-				  x += dx;
-				}
-
-				// Generate chords for each (non-empty) subgroup-subgroup link.
-				i = -1; while (++i < n) {
-				  j = i - 1; while (++j < n) {
-					var source = subgroups[j * n + i],
-						target = subgroups[i * n + j];
-					if (source.value || target.value) {
-					  chords.push(source.value < target.value
-						  ? {source: target, target: source}
-						  : {source: source, target: target});
-					}
-				  }
-				}
-
-				return sortChords ? chords.sort(sortChords) : chords;
-			  }
-
-			  chord.padAngle = function(_) {
-				return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
-			  };
-
-			  chord.sortGroups = function(_) {
-				return arguments.length ? (sortGroups = _, chord) : sortGroups;
-			  };
-
-			  chord.sortSubgroups = function(_) {
-				return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
-			  };
-
-			  chord.sortChords = function(_) {
-				return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
-			  };
-
-			  return chord;
-			};
-
-			var slice$5 = Array.prototype.slice;
-
-			var constant$12 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			function defaultSource(d) {
-			  return d.source;
-			}
-
-			function defaultTarget(d) {
-			  return d.target;
-			}
-
-			function defaultRadius$1(d) {
-			  return d.radius;
-			}
-
-			function defaultStartAngle(d) {
-			  return d.startAngle;
-			}
-
-			function defaultEndAngle(d) {
-			  return d.endAngle;
-			}
-
-			var ribbon = function() {
-			  var source = defaultSource,
-				  target = defaultTarget,
-				  radius = defaultRadius$1,
-				  startAngle = defaultStartAngle,
-				  endAngle = defaultEndAngle,
-				  context = null;
-
-			  function ribbon() {
-				var buffer,
-					argv = slice$5.call(arguments),
-					s = source.apply(this, argv),
-					t = target.apply(this, argv),
-					sr = +radius.apply(this, (argv[0] = s, argv)),
-					sa0 = startAngle.apply(this, argv) - halfPi$2,
-					sa1 = endAngle.apply(this, argv) - halfPi$2,
-					sx0 = sr * cos(sa0),
-					sy0 = sr * sin(sa0),
-					tr = +radius.apply(this, (argv[0] = t, argv)),
-					ta0 = startAngle.apply(this, argv) - halfPi$2,
-					ta1 = endAngle.apply(this, argv) - halfPi$2;
-
-				if (!context) context = buffer = path();
-
-				context.moveTo(sx0, sy0);
-				context.arc(0, 0, sr, sa0, sa1);
-				if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
-				  context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
-				  context.arc(0, 0, tr, ta0, ta1);
-				}
-				context.quadraticCurveTo(0, 0, sx0, sy0);
-				context.closePath();
-
-				if (buffer) return context = null, buffer + "" || null;
-			  }
-
-			  ribbon.radius = function(_) {
-				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius;
-			  };
-
-			  ribbon.startAngle = function(_) {
-				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle;
-			  };
-
-			  ribbon.endAngle = function(_) {
-				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle;
-			  };
-
-			  ribbon.source = function(_) {
-				return arguments.length ? (source = _, ribbon) : source;
-			  };
-
-			  ribbon.target = function(_) {
-				return arguments.length ? (target = _, ribbon) : target;
-			  };
-
-			  ribbon.context = function(_) {
-				return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
-			  };
-
-			  return ribbon;
-			};
-
-			// Adds floating point numbers with twice the normal precision.
-			// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
-			// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
-			// 305–363 (1997).
-			// Code adapted from GeographicLib by Charles F. F. Karney,
-			// http://geographiclib.sourceforge.net/
-
-			var adder = function() {
-			  return new Adder;
-			};
-
-			function Adder() {
-			  this.reset();
-			}
-
-			Adder.prototype = {
-			  constructor: Adder,
-			  reset: function() {
-				this.s = // rounded value
-				this.t = 0; // exact error
-			  },
-			  add: function(y) {
-				add$1(temp, y, this.t);
-				add$1(this, temp.s, this.s);
-				if (this.s) this.t += temp.t;
-				else this.s = temp.t;
-			  },
-			  valueOf: function() {
-				return this.s;
-			  }
-			};
-
-			var temp = new Adder;
-
-			function add$1(adder, a, b) {
-			  var x = adder.s = a + b,
-				  bv = x - a,
-				  av = x - bv;
-			  adder.t = (a - av) + (b - bv);
-			}
-
-			var epsilon$4 = 1e-6;
-			var epsilon2$2 = 1e-12;
-			var pi$4 = Math.PI;
-			var halfPi$3 = pi$4 / 2;
-			var quarterPi = pi$4 / 4;
-			var tau$4 = pi$4 * 2;
-
-			var degrees$1 = 180 / pi$4;
-			var radians = pi$4 / 180;
-
-			var abs = Math.abs;
-			var atan = Math.atan;
-			var atan2 = Math.atan2;
-			var cos$1 = Math.cos;
-			var ceil = Math.ceil;
-			var exp = Math.exp;
-
-			var log$1 = Math.log;
-			var pow$1 = Math.pow;
-			var sin$1 = Math.sin;
-			var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
-			var sqrt$1 = Math.sqrt;
-			var tan = Math.tan;
-
-			function acos(x) {
-			  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
-			}
-
-			function asin$1(x) {
-			  return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);
-			}
-
-			function haversin(x) {
-			  return (x = sin$1(x / 2)) * x;
-			}
-
-			function noop$2() {}
-
-			function streamGeometry(geometry, stream) {
-			  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
-				streamGeometryType[geometry.type](geometry, stream);
-			  }
-			}
-
-			var streamObjectType = {
-			  Feature: function(feature, stream) {
-				streamGeometry(feature.geometry, stream);
-			  },
-			  FeatureCollection: function(object, stream) {
-				var features = object.features, i = -1, n = features.length;
-				while (++i < n) streamGeometry(features[i].geometry, stream);
-			  }
-			};
-
-			var streamGeometryType = {
-			  Sphere: function(object, stream) {
-				stream.sphere();
-			  },
-			  Point: function(object, stream) {
-				object = object.coordinates;
-				stream.point(object[0], object[1], object[2]);
-			  },
-			  MultiPoint: function(object, stream) {
-				var coordinates = object.coordinates, i = -1, n = coordinates.length;
-				while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
-			  },
-			  LineString: function(object, stream) {
-				streamLine(object.coordinates, stream, 0);
-			  },
-			  MultiLineString: function(object, stream) {
-				var coordinates = object.coordinates, i = -1, n = coordinates.length;
-				while (++i < n) streamLine(coordinates[i], stream, 0);
-			  },
-			  Polygon: function(object, stream) {
-				streamPolygon(object.coordinates, stream);
-			  },
-			  MultiPolygon: function(object, stream) {
-				var coordinates = object.coordinates, i = -1, n = coordinates.length;
-				while (++i < n) streamPolygon(coordinates[i], stream);
-			  },
-			  GeometryCollection: function(object, stream) {
-				var geometries = object.geometries, i = -1, n = geometries.length;
-				while (++i < n) streamGeometry(geometries[i], stream);
-			  }
-			};
-
-			function streamLine(coordinates, stream, closed) {
-			  var i = -1, n = coordinates.length - closed, coordinate;
-			  stream.lineStart();
-			  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
-			  stream.lineEnd();
-			}
-
-			function streamPolygon(coordinates, stream) {
-			  var i = -1, n = coordinates.length;
-			  stream.polygonStart();
-			  while (++i < n) streamLine(coordinates[i], stream, 1);
-			  stream.polygonEnd();
-			}
-
-			var geoStream = function(object, stream) {
-			  if (object && streamObjectType.hasOwnProperty(object.type)) {
-				streamObjectType[object.type](object, stream);
-			  } else {
-				streamGeometry(object, stream);
-			  }
-			};
-
-			var areaRingSum = adder();
-
-			var areaSum = adder();
-			var lambda00;
-			var phi00;
-			var lambda0;
-			var cosPhi0;
-			var sinPhi0;
-
-			var areaStream = {
-			  point: noop$2,
-			  lineStart: noop$2,
-			  lineEnd: noop$2,
-			  polygonStart: function() {
-				areaRingSum.reset();
-				areaStream.lineStart = areaRingStart;
-				areaStream.lineEnd = areaRingEnd;
-			  },
-			  polygonEnd: function() {
-				var areaRing = +areaRingSum;
-				areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);
-				this.lineStart = this.lineEnd = this.point = noop$2;
-			  },
-			  sphere: function() {
-				areaSum.add(tau$4);
-			  }
-			};
-
-			function areaRingStart() {
-			  areaStream.point = areaPointFirst;
-			}
-
-			function areaRingEnd() {
-			  areaPoint(lambda00, phi00);
-			}
-
-			function areaPointFirst(lambda, phi) {
-			  areaStream.point = areaPoint;
-			  lambda00 = lambda, phi00 = phi;
-			  lambda *= radians, phi *= radians;
-			  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
-			}
-
-			function areaPoint(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  phi = phi / 2 + quarterPi; // half the angular distance from south pole
-
-			  // Spherical excess E for a spherical triangle with vertices: south pole,
-			  // previous point, current point.  Uses a formula derived from Cagnoli’s
-			  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
-			  var dLambda = lambda - lambda0,
-				  sdLambda = dLambda >= 0 ? 1 : -1,
-				  adLambda = sdLambda * dLambda,
-				  cosPhi = cos$1(phi),
-				  sinPhi = sin$1(phi),
-				  k = sinPhi0 * sinPhi,
-				  u = cosPhi0 * cosPhi + k * cos$1(adLambda),
-				  v = k * sdLambda * sin$1(adLambda);
-			  areaRingSum.add(atan2(v, u));
-
-			  // Advance the previous points.
-			  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
-			}
-
-			var area$2 = function(object) {
-			  areaSum.reset();
-			  geoStream(object, areaStream);
-			  return areaSum * 2;
-			};
-
-			function spherical(cartesian) {
-			  return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];
-			}
-
-			function cartesian(spherical) {
-			  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
-			  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
-			}
-
-			function cartesianDot(a, b) {
-			  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
-			}
-
-			function 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]];
-			}
-
-			// TODO return a
-			function cartesianAddInPlace(a, b) {
-			  a[0] += b[0], a[1] += b[1], a[2] += b[2];
-			}
-
-			function cartesianScale(vector, k) {
-			  return [vector[0] * k, vector[1] * k, vector[2] * k];
-			}
-
-			// TODO return d
-			function cartesianNormalizeInPlace(d) {
-			  var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
-			  d[0] /= l, d[1] /= l, d[2] /= l;
-			}
-
-			var lambda0$1;
-			var phi0;
-			var lambda1;
-			var phi1;
-			var lambda2;
-			var lambda00$1;
-			var phi00$1;
-			var p0;
-			var deltaSum = adder();
-			var ranges;
-			var range$1;
-
-			var boundsStream = {
-			  point: boundsPoint,
-			  lineStart: boundsLineStart,
-			  lineEnd: boundsLineEnd,
-			  polygonStart: function() {
-				boundsStream.point = boundsRingPoint;
-				boundsStream.lineStart = boundsRingStart;
-				boundsStream.lineEnd = boundsRingEnd;
-				deltaSum.reset();
-				areaStream.polygonStart();
-			  },
-			  polygonEnd: function() {
-				areaStream.polygonEnd();
-				boundsStream.point = boundsPoint;
-				boundsStream.lineStart = boundsLineStart;
-				boundsStream.lineEnd = boundsLineEnd;
-				if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
-				else if (deltaSum > epsilon$4) phi1 = 90;
-				else if (deltaSum < -epsilon$4) phi0 = -90;
-				range$1[0] = lambda0$1, range$1[1] = lambda1;
-			  }
-			};
-
-			function boundsPoint(lambda, phi) {
-			  ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
-			  if (phi < phi0) phi0 = phi;
-			  if (phi > phi1) phi1 = phi;
-			}
-
-			function linePoint(lambda, phi) {
-			  var p = cartesian([lambda * radians, phi * radians]);
-			  if (p0) {
-				var normal = cartesianCross(p0, p),
-					equatorial = [normal[1], -normal[0], 0],
-					inflection = cartesianCross(equatorial, normal);
-				cartesianNormalizeInPlace(inflection);
-				inflection = spherical(inflection);
-				var delta = lambda - lambda2,
-					sign$$1 = delta > 0 ? 1 : -1,
-					lambdai = inflection[0] * degrees$1 * sign$$1,
-					phii,
-					antimeridian = abs(delta) > 180;
-				if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
-				  phii = inflection[1] * degrees$1;
-				  if (phii > phi1) phi1 = phii;
-				} else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
-				  phii = -inflection[1] * degrees$1;
-				  if (phii < phi0) phi0 = phii;
-				} else {
-				  if (phi < phi0) phi0 = phi;
-				  if (phi > phi1) phi1 = phi;
-				}
-				if (antimeridian) {
-				  if (lambda < lambda2) {
-					if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
-				  } else {
-					if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
-				  }
-				} else {
-				  if (lambda1 >= lambda0$1) {
-					if (lambda < lambda0$1) lambda0$1 = lambda;
-					if (lambda > lambda1) lambda1 = lambda;
-				  } else {
-					if (lambda > lambda2) {
-					  if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
-					} else {
-					  if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
-					}
-				  }
-				}
-			  } else {
-				boundsPoint(lambda, phi);
-			  }
-			  p0 = p, lambda2 = lambda;
-			}
-
-			function boundsLineStart() {
-			  boundsStream.point = linePoint;
-			}
-
-			function boundsLineEnd() {
-			  range$1[0] = lambda0$1, range$1[1] = lambda1;
-			  boundsStream.point = boundsPoint;
-			  p0 = null;
-			}
-
-			function boundsRingPoint(lambda, phi) {
-			  if (p0) {
-				var delta = lambda - lambda2;
-				deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
-			  } else {
-				lambda00$1 = lambda, phi00$1 = phi;
-			  }
-			  areaStream.point(lambda, phi);
-			  linePoint(lambda, phi);
-			}
-
-			function boundsRingStart() {
-			  areaStream.lineStart();
-			}
-
-			function boundsRingEnd() {
-			  boundsRingPoint(lambda00$1, phi00$1);
-			  areaStream.lineEnd();
-			  if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);
-			  range$1[0] = lambda0$1, range$1[1] = lambda1;
-			  p0 = null;
-			}
-
-			// Finds the left-right distance between two longitudes.
-			// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
-			// the distance between ±180° to be 360°.
-			function angle(lambda0, lambda1) {
-			  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
-			}
-
-			function rangeCompare(a, b) {
-			  return a[0] - b[0];
-			}
-
-			function rangeContains(range, x) {
-			  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
-			}
-
-			var bounds = function(feature) {
-			  var i, n, a, b, merged, deltaMax, delta;
-
-			  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
-			  ranges = [];
-			  geoStream(feature, boundsStream);
-
-			  // First, sort ranges by their minimum longitudes.
-			  if (n = ranges.length) {
-				ranges.sort(rangeCompare);
-
-				// Then, merge any ranges that overlap.
-				for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
-				  b = ranges[i];
-				  if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
-					if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
-					if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
-				  } else {
-					merged.push(a = b);
-				  }
-				}
-
-				// Finally, find the largest gap between the merged ranges.
-				// The final bounding box will be the inverse of this gap.
-				for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
-				  b = merged[i];
-				  if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
-				}
-			  }
-
-			  ranges = range$1 = null;
-
-			  return lambda0$1 === Infinity || phi0 === Infinity
-				  ? [[NaN, NaN], [NaN, NaN]]
-				  : [[lambda0$1, phi0], [lambda1, phi1]];
-			};
-
-			var W0;
-			var W1;
-			var X0;
-			var Y0;
-			var Z0;
-			var X1;
-			var Y1;
-			var Z1;
-			var X2;
-			var Y2;
-			var Z2;
-			var lambda00$2;
-			var phi00$2;
-			var x0;
-			var y0;
-			var z0; // previous point
-
-			var centroidStream = {
-			  sphere: noop$2,
-			  point: centroidPoint,
-			  lineStart: centroidLineStart,
-			  lineEnd: centroidLineEnd,
-			  polygonStart: function() {
-				centroidStream.lineStart = centroidRingStart;
-				centroidStream.lineEnd = centroidRingEnd;
-			  },
-			  polygonEnd: function() {
-				centroidStream.lineStart = centroidLineStart;
-				centroidStream.lineEnd = centroidLineEnd;
-			  }
-			};
-
-			// Arithmetic mean of Cartesian vectors.
-			function centroidPoint(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  var cosPhi = cos$1(phi);
-			  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
-			}
-
-			function centroidPointCartesian(x, y, z) {
-			  ++W0;
-			  X0 += (x - X0) / W0;
-			  Y0 += (y - Y0) / W0;
-			  Z0 += (z - Z0) / W0;
-			}
-
-			function centroidLineStart() {
-			  centroidStream.point = centroidLinePointFirst;
-			}
-
-			function centroidLinePointFirst(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  var cosPhi = cos$1(phi);
-			  x0 = cosPhi * cos$1(lambda);
-			  y0 = cosPhi * sin$1(lambda);
-			  z0 = sin$1(phi);
-			  centroidStream.point = centroidLinePoint;
-			  centroidPointCartesian(x0, y0, z0);
-			}
-
-			function centroidLinePoint(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  var cosPhi = cos$1(phi),
-				  x = cosPhi * cos$1(lambda),
-				  y = cosPhi * sin$1(lambda),
-				  z = sin$1(phi),
-				  w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
-			  W1 += w;
-			  X1 += w * (x0 + (x0 = x));
-			  Y1 += w * (y0 + (y0 = y));
-			  Z1 += w * (z0 + (z0 = z));
-			  centroidPointCartesian(x0, y0, z0);
-			}
-
-			function centroidLineEnd() {
-			  centroidStream.point = centroidPoint;
-			}
-
-			// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
-			// J. Applied Mechanics 42, 239 (1975).
-			function centroidRingStart() {
-			  centroidStream.point = centroidRingPointFirst;
-			}
-
-			function centroidRingEnd() {
-			  centroidRingPoint(lambda00$2, phi00$2);
-			  centroidStream.point = centroidPoint;
-			}
-
-			function centroidRingPointFirst(lambda, phi) {
-			  lambda00$2 = lambda, phi00$2 = phi;
-			  lambda *= radians, phi *= radians;
-			  centroidStream.point = centroidRingPoint;
-			  var cosPhi = cos$1(phi);
-			  x0 = cosPhi * cos$1(lambda);
-			  y0 = cosPhi * sin$1(lambda);
-			  z0 = sin$1(phi);
-			  centroidPointCartesian(x0, y0, z0);
-			}
-
-			function centroidRingPoint(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  var cosPhi = cos$1(phi),
-				  x = cosPhi * cos$1(lambda),
-				  y = cosPhi * sin$1(lambda),
-				  z = sin$1(phi),
-				  cx = y0 * z - z0 * y,
-				  cy = z0 * x - x0 * z,
-				  cz = x0 * y - y0 * x,
-				  m = sqrt$1(cx * cx + cy * cy + cz * cz),
-				  u = x0 * x + y0 * y + z0 * z,
-				  v = m && -acos(u) / m, // area weight
-				  w = atan2(m, u); // line weight
-			  X2 += v * cx;
-			  Y2 += v * cy;
-			  Z2 += v * cz;
-			  W1 += w;
-			  X1 += w * (x0 + (x0 = x));
-			  Y1 += w * (y0 + (y0 = y));
-			  Z1 += w * (z0 + (z0 = z));
-			  centroidPointCartesian(x0, y0, z0);
-			}
-
-			var centroid$1 = function(object) {
-			  W0 = W1 =
-			  X0 = Y0 = Z0 =
-			  X1 = Y1 = Z1 =
-			  X2 = Y2 = Z2 = 0;
-			  geoStream(object, centroidStream);
-
-			  var x = X2,
-				  y = Y2,
-				  z = Z2,
-				  m = x * x + y * y + z * z;
-
-			  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
-			  if (m < epsilon2$2) {
-				x = X1, y = Y1, z = Z1;
-				// If the feature has zero length, fall back to arithmetic mean of point vectors.
-				if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;
-				m = x * x + y * y + z * z;
-				// If the feature still has an undefined ccentroid, then return.
-				if (m < epsilon2$2) return [NaN, NaN];
-			  }
-
-			  return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];
-			};
-
-			var constant$13 = function(x) {
-			  return function() {
-				return x;
-			  };
-			};
-
-			var compose = function(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 rotationIdentity(lambda, phi) {
-			  return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
-			}
-
-			rotationIdentity.invert = rotationIdentity;
-
-			function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
-			  return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
-				: rotationLambda(deltaLambda))
-				: (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
-				: rotationIdentity);
-			}
-
-			function forwardRotationLambda(deltaLambda) {
-			  return function(lambda, phi) {
-				return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
-			  };
-			}
-
-			function rotationLambda(deltaLambda) {
-			  var rotation = forwardRotationLambda(deltaLambda);
-			  rotation.invert = forwardRotationLambda(-deltaLambda);
-			  return rotation;
-			}
-
-			function rotationPhiGamma(deltaPhi, deltaGamma) {
-			  var cosDeltaPhi = cos$1(deltaPhi),
-				  sinDeltaPhi = sin$1(deltaPhi),
-				  cosDeltaGamma = cos$1(deltaGamma),
-				  sinDeltaGamma = sin$1(deltaGamma);
-
-			  function rotation(lambda, phi) {
-				var cosPhi = cos$1(phi),
-					x = cos$1(lambda) * cosPhi,
-					y = sin$1(lambda) * cosPhi,
-					z = sin$1(phi),
-					k = z * cosDeltaPhi + x * sinDeltaPhi;
-				return [
-				  atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
-				  asin$1(k * cosDeltaGamma + y * sinDeltaGamma)
-				];
-			  }
-
-			  rotation.invert = function(lambda, phi) {
-				var cosPhi = cos$1(phi),
-					x = cos$1(lambda) * cosPhi,
-					y = sin$1(lambda) * cosPhi,
-					z = sin$1(phi),
-					k = z * cosDeltaGamma - y * sinDeltaGamma;
-				return [
-				  atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
-				  asin$1(k * cosDeltaPhi - x * sinDeltaPhi)
-				];
-			  };
-
-			  return rotation;
-			}
-
-			var rotation = function(rotate) {
-			  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
-
-			  function forward(coordinates) {
-				coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
-				return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
-			  }
-
-			  forward.invert = function(coordinates) {
-				coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
-				return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
-			  };
-
-			  return forward;
-			};
-
-			// Generates a circle centered at [0°, 0°], with a given radius and precision.
-			function circleStream(stream, radius, delta, direction, t0, t1) {
-			  if (!delta) return;
-			  var cosRadius = cos$1(radius),
-				  sinRadius = sin$1(radius),
-				  step = direction * delta;
-			  if (t0 == null) {
-				t0 = radius + direction * tau$4;
-				t1 = radius - step / 2;
-			  } else {
-				t0 = circleRadius(cosRadius, t0);
-				t1 = circleRadius(cosRadius, t1);
-				if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;
-			  }
-			  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
-				point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
-				stream.point(point[0], point[1]);
-			  }
-			}
-
-			// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
-			function circleRadius(cosRadius, point) {
-			  point = cartesian(point), point[0] -= cosRadius;
-			  cartesianNormalizeInPlace(point);
-			  var radius = acos(-point[1]);
-			  return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;
-			}
-
-			var circle$1 = function() {
-			  var center = constant$13([0, 0]),
-				  radius = constant$13(90),
-				  precision = constant$13(6),
-				  ring,
-				  rotate,
-				  stream = {point: point};
-
-			  function point(x, y) {
-				ring.push(x = rotate(x, y));
-				x[0] *= degrees$1, x[1] *= degrees$1;
-			  }
-
-			  function circle() {
-				var c = center.apply(this, arguments),
-					r = radius.apply(this, arguments) * radians,
-					p = precision.apply(this, arguments) * radians;
-				ring = [];
-				rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
-				circleStream(stream, r, p, 1);
-				c = {type: "Polygon", coordinates: [ring]};
-				ring = rotate = null;
-				return c;
-			  }
-
-			  circle.center = function(_) {
-				return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center;
-			  };
-
-			  circle.radius = function(_) {
-				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius;
-			  };
-
-			  circle.precision = function(_) {
-				return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision;
-			  };
-
-			  return circle;
-			};
-
-			var clipBuffer = function() {
-			  var lines = [],
-				  line;
-			  return {
-				point: function(x, y) {
-				  line.push([x, y]);
-				},
-				lineStart: function() {
-				  lines.push(line = []);
-				},
-				lineEnd: noop$2,
-				rejoin: function() {
-				  if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
-				},
-				result: function() {
-				  var result = lines;
-				  lines = [];
-				  line = null;
-				  return result;
-				}
-			  };
-			};
-
-			var clipLine = function(a, b, x0, y0, x1, y1) {
-			  var ax = a[0],
-				  ay = a[1],
-				  bx = b[0],
-				  by = b[1],
-				  t0 = 0,
-				  t1 = 1,
-				  dx = bx - ax,
-				  dy = by - ay,
-				  r;
-
-			  r = x0 - ax;
-			  if (!dx && r > 0) return;
-			  r /= dx;
-			  if (dx < 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  } else if (dx > 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  }
-
-			  r = x1 - ax;
-			  if (!dx && r < 0) return;
-			  r /= dx;
-			  if (dx < 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  } else if (dx > 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  }
-
-			  r = y0 - ay;
-			  if (!dy && r > 0) return;
-			  r /= dy;
-			  if (dy < 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  } else if (dy > 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  }
-
-			  r = y1 - ay;
-			  if (!dy && r < 0) return;
-			  r /= dy;
-			  if (dy < 0) {
-				if (r > t1) return;
-				if (r > t0) t0 = r;
-			  } else if (dy > 0) {
-				if (r < t0) return;
-				if (r < t1) t1 = r;
-			  }
-
-			  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
-			  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
-			  return true;
-			};
-
-			var pointEqual = function(a, b) {
-			  return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;
-			};
-
-			function Intersection(point, points, other, entry) {
-			  this.x = point;
-			  this.z = points;
-			  this.o = other; // another intersection
-			  this.e = entry; // is an entry?
-			  this.v = false; // visited
-			  this.n = this.p = null; // next & previous
-			}
-
-			// A generalized polygon clipping algorithm: given a polygon that has been cut
-			// into its visible line segments, and rejoins the segments by interpolating
-			// along the clip edge.
-			var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
-			  var subject = [],
-				  clip = [],
-				  i,
-				  n;
-
-			  segments.forEach(function(segment) {
-				if ((n = segment.length - 1) <= 0) return;
-				var n, p0 = segment[0], p1 = segment[n], x;
-
-				// If the first and last points of a segment are coincident, then treat as a
-				// closed ring. TODO if all rings are closed, then the winding order of the
-				// exterior ring should be checked.
-				if (pointEqual(p0, p1)) {
-				  stream.lineStart();
-				  for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
-				  stream.lineEnd();
-				  return;
-				}
-
-				subject.push(x = new Intersection(p0, segment, null, true));
-				clip.push(x.o = new Intersection(p0, null, x, false));
-				subject.push(x = new Intersection(p1, segment, null, false));
-				clip.push(x.o = new Intersection(p1, null, x, true));
-			  });
-
-			  if (!subject.length) return;
-
-			  clip.sort(compareIntersection);
-			  link$1(subject);
-			  link$1(clip);
-
-			  for (i = 0, n = clip.length; i < n; ++i) {
-				clip[i].e = startInside = !startInside;
-			  }
-
-			  var start = subject[0],
-				  points,
-				  point;
-
-			  while (1) {
-				// Find first unvisited intersection.
-				var current = start,
-					isSubject = true;
-				while (current.v) if ((current = current.n) === start) return;
-				points = current.z;
-				stream.lineStart();
-				do {
-				  current.v = current.o.v = true;
-				  if (current.e) {
-					if (isSubject) {
-					  for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
-					} else {
-					  interpolate(current.x, current.n.x, 1, stream);
-					}
-					current = current.n;
-				  } else {
-					if (isSubject) {
-					  points = current.p.z;
-					  for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
-					} else {
-					  interpolate(current.x, current.p.x, -1, stream);
-					}
-					current = current.p;
-				  }
-				  current = current.o;
-				  points = current.z;
-				  isSubject = !isSubject;
-				} while (!current.v);
-				stream.lineEnd();
-			  }
-			};
-
-			function link$1(array) {
-			  if (!(n = array.length)) return;
-			  var n,
-				  i = 0,
-				  a = array[0],
-				  b;
-			  while (++i < n) {
-				a.n = b = array[i];
-				b.p = a;
-				a = b;
-			  }
-			  a.n = b = array[0];
-			  b.p = a;
-			}
-
-			var clipMax = 1e9;
-			var clipMin = -clipMax;
-
-			// TODO Use d3-polygon’s polygonContains here for the ring check?
-			// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
-
-			function clipExtent(x0, y0, x1, y1) {
-
-			  function visible(x, y) {
-				return x0 <= x && x <= x1 && y0 <= y && y <= y1;
-			  }
-
-			  function interpolate(from, to, direction, stream) {
-				var a = 0, a1 = 0;
-				if (from == null
-					|| (a = corner(from, direction)) !== (a1 = corner(to, direction))
-					|| comparePoint(from, to) < 0 ^ direction > 0) {
-				  do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
-				  while ((a = (a + direction + 4) % 4) !== a1);
-				} else {
-				  stream.point(to[0], to[1]);
-				}
-			  }
-
-			  function corner(p, direction) {
-				return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3
-					: abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1
-					: abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0
-					: direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
-			  }
-
-			  function compareIntersection(a, b) {
-				return comparePoint(a.x, b.x);
-			  }
-
-			  function comparePoint(a, b) {
-				var ca = corner(a, 1),
-					cb = corner(b, 1);
-				return ca !== cb ? ca - cb
-					: ca === 0 ? b[1] - a[1]
-					: ca === 1 ? a[0] - b[0]
-					: ca === 2 ? a[1] - b[1]
-					: b[0] - a[0];
-			  }
-
-			  return function(stream) {
-				var activeStream = stream,
-					bufferStream = clipBuffer(),
-					segments,
-					polygon,
-					ring,
-					x__, y__, v__, // first point
-					x_, y_, v_, // previous point
-					first,
-					clean;
-
-				var clipStream = {
-				  point: point,
-				  lineStart: lineStart,
-				  lineEnd: lineEnd,
-				  polygonStart: polygonStart,
-				  polygonEnd: polygonEnd
-				};
-
-				function point(x, y) {
-				  if (visible(x, y)) activeStream.point(x, y);
-				}
-
-				function polygonInside() {
-				  var winding = 0;
-
-				  for (var i = 0, n = polygon.length; i < n; ++i) {
-					for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
-					  a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
-					  if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
-					  else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
-					}
-				  }
-
-				  return winding;
-				}
-
-				// Buffer geometry within a polygon and then clip it en masse.
-				function polygonStart() {
-				  activeStream = bufferStream, segments = [], polygon = [], clean = true;
-				}
-
-				function polygonEnd() {
-				  var startInside = polygonInside(),
-					  cleanInside = clean && startInside,
-					  visible = (segments = merge(segments)).length;
-				  if (cleanInside || visible) {
-					stream.polygonStart();
-					if (cleanInside) {
-					  stream.lineStart();
-					  interpolate(null, null, 1, stream);
-					  stream.lineEnd();
-					}
-					if (visible) {
-					  clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
-					}
-					stream.polygonEnd();
-				  }
-				  activeStream = stream, segments = polygon = ring = null;
-				}
-
-				function lineStart() {
-				  clipStream.point = linePoint;
-				  if (polygon) polygon.push(ring = []);
-				  first = true;
-				  v_ = false;
-				  x_ = y_ = NaN;
-				}
-
-				// TODO rather than special-case polygons, simply handle them separately.
-				// Ideally, coincident intersection points should be jittered to avoid
-				// clipping issues.
-				function lineEnd() {
-				  if (segments) {
-					linePoint(x__, y__);
-					if (v__ && v_) bufferStream.rejoin();
-					segments.push(bufferStream.result());
-				  }
-				  clipStream.point = point;
-				  if (v_) activeStream.lineEnd();
-				}
-
-				function linePoint(x, y) {
-				  var v = visible(x, y);
-				  if (polygon) ring.push([x, y]);
-				  if (first) {
-					x__ = x, y__ = y, v__ = v;
-					first = false;
-					if (v) {
-					  activeStream.lineStart();
-					  activeStream.point(x, y);
-					}
-				  } else {
-					if (v && v_) activeStream.point(x, y);
-					else {
-					  var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
-						  b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
-					  if (clipLine(a, b, x0, y0, x1, y1)) {
-						if (!v_) {
-						  activeStream.lineStart();
-						  activeStream.point(a[0], a[1]);
-						}
-						activeStream.point(b[0], b[1]);
-						if (!v) activeStream.lineEnd();
-						clean = false;
-					  } else if (v) {
-						activeStream.lineStart();
-						activeStream.point(x, y);
-						clean = false;
-					  }
-					}
-				  }
-				  x_ = x, y_ = y, v_ = v;
-				}
-
-				return clipStream;
-			  };
-			}
-
-			var extent$1 = function() {
-			  var x0 = 0,
-				  y0 = 0,
-				  x1 = 960,
-				  y1 = 500,
-				  cache,
-				  cacheStream,
-				  clip;
-
-			  return clip = {
-				stream: function(stream) {
-				  return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
-				},
-				extent: function(_) {
-				  return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
-				}
-			  };
-			};
-
-			var lengthSum = adder();
-			var lambda0$2;
-			var sinPhi0$1;
-			var cosPhi0$1;
-
-			var lengthStream = {
-			  sphere: noop$2,
-			  point: noop$2,
-			  lineStart: lengthLineStart,
-			  lineEnd: noop$2,
-			  polygonStart: noop$2,
-			  polygonEnd: noop$2
-			};
-
-			function lengthLineStart() {
-			  lengthStream.point = lengthPointFirst;
-			  lengthStream.lineEnd = lengthLineEnd;
-			}
-
-			function lengthLineEnd() {
-			  lengthStream.point = lengthStream.lineEnd = noop$2;
-			}
-
-			function lengthPointFirst(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
-			  lengthStream.point = lengthPoint;
-			}
-
-			function lengthPoint(lambda, phi) {
-			  lambda *= radians, phi *= radians;
-			  var sinPhi = sin$1(phi),
-				  cosPhi = cos$1(phi),
-				  delta = abs(lambda - lambda0$2),
-				  cosDelta = cos$1(delta),
-				  sinDelta = sin$1(delta),
-				  x = cosPhi * sinDelta,
-				  y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
-				  z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
-			  lengthSum.add(atan2(sqrt$1(x * x + y * y), z));
-			  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
-			}
-
-			var length$2 = function(object) {
-			  lengthSum.reset();
-			  geoStream(object, lengthStream);
-			  return +lengthSum;
-			};
-
-			var coordinates = [null, null];
-			var object$1 = {type: "LineString", coordinates: coordinates};
-
-			var distance = function(a, b) {
-			  coordinates[0] = a;
-			  coordinates[1] = b;
-			  return length$2(object$1);
-			};
-
-			function graticuleX(y0, y1, dy) {
-			  var y = range(y0, y1 - epsilon$4, dy).concat(y1);
-			  return function(x) { return y.map(function(y) { return [x, y]; }); };
-			}
-
-			function graticuleY(x0, x1, dx) {
-			  var x = range(x0, x1 - epsilon$4, dx).concat(x1);
-			  return function(y) { return x.map(function(x) { return [x, y]; }); };
-			}
-
-			function graticule() {
-			  var x1, x0, X1, X0,
-				  y1, y0, Y1, Y0,
-				  dx = 10, dy = dx, DX = 90, DY = 360,
-				  x, y, X, Y,
-				  precision = 2.5;
-
-			  function graticule() {
-				return {type: "MultiLineString", coordinates: lines()};
-			  }
-
-			  function lines() {
-				return range(ceil(X0 / DX) * DX, X1, DX).map(X)
-					.concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
-					.concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))
-					.concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).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 graticule.extentMinor();
-				return graticule.extentMajor(_).extentMinor(_);
-			  };
-
-			  graticule.extentMajor = 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.extentMinor = 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 graticule.stepMinor();
-				return graticule.stepMajor(_).stepMinor(_);
-			  };
-
-			  graticule.stepMajor = function(_) {
-				if (!arguments.length) return [DX, DY];
-				DX = +_[0], DY = +_[1];
-				return graticule;
-			  };
-
-			  graticule.stepMinor = function(_) {
-				if (!arguments.length) return [dx, dy];
-				dx = +_[0], dy = +_[1];
-				return graticule;
-			  };
-
-			  graticule.precision = function(_) {
-				if (!arguments.length) return precision;
-				precision = +_;
-				x = graticuleX(y0, y1, 90);
-				y = graticuleY(x0, x1, precision);
-				X = graticuleX(Y0, Y1, 90);
-				Y = graticuleY(X0, X1, precision);
-				return graticule;
-			  };
-
-			  return graticule
-				  .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])
-				  .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);
-			}
-
-			function graticule10() {
-			  return graticule()();
-			}
-
-			var interpolate$2 = function(a, b) {
-			  var x0 = a[0] * radians,
-				  y0 = a[1] * radians,
-				  x1 = b[0] * radians,
-				  y1 = b[1] * radians,
-				  cy0 = cos$1(y0),
-				  sy0 = sin$1(y0),
-				  cy1 = cos$1(y1),
-				  sy1 = sin$1(y1),
-				  kx0 = cy0 * cos$1(x0),
-				  ky0 = cy0 * sin$1(x0),
-				  kx1 = cy1 * cos$1(x1),
-				  ky1 = cy1 * sin$1(x1),
-				  d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
-				  k = sin$1(d);
-
-			  var interpolate = d ? function(t) {
-				var B = sin$1(t *= d) / k,
-					A = sin$1(d - t) / k,
-					x = A * kx0 + B * kx1,
-					y = A * ky0 + B * ky1,
-					z = A * sy0 + B * sy1;
-				return [
-				  atan2(y, x) * degrees$1,
-				  atan2(z, sqrt$1(x * x + y * y)) * degrees$1
-				];
-			  } : function() {
-				return [x0 * degrees$1, y0 * degrees$1];
-			  };
-
-			  interpolate.distance = d;
-
-			  return interpolate;
-			};
-
-			var identity$7 = function(x) {
-			  return x;
-			};
-
-			var areaSum$1 = adder();
-			var areaRingSum$1 = adder();
-			var x00;
-			var y00;
-			var x0$1;
-			var y0$1;
-
-			var areaStream$1 = {
-			  point: noop$2,
-			  lineStart: noop$2,
-			  lineEnd: noop$2,
-			  polygonStart: function() {
-				areaStream$1.lineStart = areaRingStart$1;
-				areaStream$1.lineEnd = areaRingEnd$1;
-			  },
-			  polygonEnd: function() {
-				areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;
-				areaSum$1.add(abs(areaRingSum$1));
-				areaRingSum$1.reset();
-			  },
-			  result: function() {
-				var area = areaSum$1 / 2;
-				areaSum$1.reset();
-				return area;
-			  }
-			};
-
-			function areaRingStart$1() {
-			  areaStream$1.point = areaPointFirst$1;
-			}
-
-			function areaPointFirst$1(x, y) {
-			  areaStream$1.point = areaPoint$1;
-			  x00 = x0$1 = x, y00 = y0$1 = y;
-			}
-
-			function areaPoint$1(x, y) {
-			  areaRingSum$1.add(y0$1 * x - x0$1 * y);
-			  x0$1 = x, y0$1 = y;
-			}
-
-			function areaRingEnd$1() {
-			  areaPoint$1(x00, y00);
-			}
-
-			var x0$2 = Infinity;
-			var y0$2 = x0$2;
-			var x1 = -x0$2;
-			var y1 = x1;
-
-			var boundsStream$1 = {
-			  point: boundsPoint$1,
-			  lineStart: noop$2,
-			  lineEnd: noop$2,
-			  polygonStart: noop$2,
-			  polygonEnd: noop$2,
-			  result: function() {
-				var bounds = [[x0$2, y0$2], [x1, y1]];
-				x1 = y1 = -(y0$2 = x0$2 = Infinity);
-				return bounds;
-			  }
-			};
-
-			function boundsPoint$1(x, y) {
-			  if (x < x0$2) x0$2 = x;
-			  if (x > x1) x1 = x;
-			  if (y < y0$2) y0$2 = y;
-			  if (y > y1) y1 = y;
-			}
-
-			// TODO Enforce positive area for exterior, negative area for interior?
-
-			var X0$1 = 0;
-			var Y0$1 = 0;
-			var Z0$1 = 0;
-			var X1$1 = 0;
-			var Y1$1 = 0;
-			var Z1$1 = 0;
-			var X2$1 = 0;
-			var Y2$1 = 0;
-			var Z2$1 = 0;
-			var x00$1;
-			var y00$1;
-			var x0$3;
-			var y0$3;
-
-			var centroidStream$1 = {
-			  point: centroidPoint$1,
-			  lineStart: centroidLineStart$1,
-			  lineEnd: centroidLineEnd$1,
-			  polygonStart: function() {
-				centroidStream$1.lineStart = centroidRingStart$1;
-				centroidStream$1.lineEnd = centroidRingEnd$1;
-			  },
-			  polygonEnd: function() {
-				centroidStream$1.point = centroidPoint$1;
-				centroidStream$1.lineStart = centroidLineStart$1;
-				centroidStream$1.lineEnd = centroidLineEnd$1;
-			  },
-			  result: function() {
-				var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
-					: Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
-					: Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
-					: [NaN, NaN];
-				X0$1 = Y0$1 = Z0$1 =
-				X1$1 = Y1$1 = Z1$1 =
-				X2$1 = Y2$1 = Z2$1 = 0;
-				return centroid;
-			  }
-			};
-
-			function centroidPoint$1(x, y) {
-			  X0$1 += x;
-			  Y0$1 += y;
-			  ++Z0$1;
-			}
-
-			function centroidLineStart$1() {
-			  centroidStream$1.point = centroidPointFirstLine;
-			}
-
-			function centroidPointFirstLine(x, y) {
-			  centroidStream$1.point = centroidPointLine;
-			  centroidPoint$1(x0$3 = x, y0$3 = y);
-			}
-
-			function centroidPointLine(x, y) {
-			  var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);
-			  X1$1 += z * (x0$3 + x) / 2;
-			  Y1$1 += z * (y0$3 + y) / 2;
-			  Z1$1 += z;
-			  centroidPoint$1(x0$3 = x, y0$3 = y);
-			}
-
-			function centroidLineEnd$1() {
-			  centroidStream$1.point = centroidPoint$1;
-			}
-
-			function centroidRingStart$1() {
-			  centroidStream$1.point = centroidPointFirstRing;
-			}
-
-			function centroidRingEnd$1() {
-			  centroidPointRing(x00$1, y00$1);
-			}
-
-			function centroidPointFirstRing(x, y) {
-			  centroidStream$1.point = centroidPointRing;
-			  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
-			}
-
-			function centroidPointRing(x, y) {
-			  var dx = x - x0$3,
-				  dy = y - y0$3,
-				  z = sqrt$1(dx * dx + dy * dy);
-
-			  X1$1 += z * (x0$3 + x) / 2;
-			  Y1$1 += z * (y0$3 + y) / 2;
-			  Z1$1 += z;
-
-			  z = y0$3 * x - x0$3 * y;
-			  X2$1 += z * (x0$3 + x);
-			  Y2$1 += z * (y0$3 + y);
-			  Z2$1 += z * 3;
-			  centroidPoint$1(x0$3 = x, y0$3 = y);
-			}
-
-			function PathContext(context) {
-			  this._context = context;
-			}
-
-			PathContext.prototype = {
-			  _radius: 4.5,
-			  pointRadius: function(_) {
-				return this._radius = _, this;
-			  },
-			  polygonStart: function() {
-				this._line = 0;
-			  },
-			  polygonEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line === 0) this._context.closePath();
-				this._point = NaN;
-			  },
-			  point: function(x, y) {
-				switch (this._point) {
-				  case 0: {
-					this._context.moveTo(x, y);
-					this._point = 1;
-					break;
-				  }
-				  case 1: {
-					this._context.lineTo(x, y);
-					break;
-				  }
-				  default: {
-					this._context.moveTo(x + this._radius, y);
-					this._context.arc(x, y, this._radius, 0, tau$4);
-					break;
-				  }
-				}
-			  },
-			  result: noop$2
-			};
-
-			function PathString() {
-			  this._string = [];
-			}
-
-			PathString.prototype = {
-			  _circle: circle$2(4.5),
-			  pointRadius: function(_) {
-				return this._circle = circle$2(_), this;
-			  },
-			  polygonStart: function() {
-				this._line = 0;
-			  },
-			  polygonEnd: function() {
-				this._line = NaN;
-			  },
-			  lineStart: function() {
-				this._point = 0;
-			  },
-			  lineEnd: function() {
-				if (this._line === 0) this._string.push("Z");
-				this._point = NaN;
-			  },
-			  point: function(x, y) {
-				switch (this._point) {
-				  case 0: {
-					this._string.push("M", x, ",", y);
-					this._point = 1;
-					break;
-				  }
-				  case 1: {
-					this._string.push("L", x, ",", y);
-					break;
-				  }
-				  default: {
-					this._string.push("M", x, ",", y, this._circle);
-					break;
-				  }
-				}
-			  },
-			  result: function() {
-				if (this._string.length) {
-				  var result = this._string.join("");
-				  this._string = [];
-				  return result;
-				}
-			  }
-			};
-
-			function circle$2(radius) {
-			  return "m0," + radius
-				  + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
-				  + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
-				  + "z";
-			}
-
-			var index$3 = function(projection, context) {
-			  var pointRadius = 4.5,
-				  projectionStream,
-				  contextStream;
-
-			  function path(object) {
-				if (object) {
-				  if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
-				  geoStream(object, projectionStream(contextStream));
-				}
-				return contextStream.result();
-			  }
-
-			  path.area = function(object) {
-				geoStream(object, projectionStream(areaStream$1));
-				return areaStream$1.result();
-			  };
-
-			  path.bounds = function(object) {
-				geoStream(object, projectionStream(boundsStream$1));
-				return boundsStream$1.result();
-			  };
-
-			  path.centroid = function(object) {
-				geoStream(object, projectionStream(centroidStream$1));
-				return centroidStream$1.result();
-			  };
-
-			  path.projection = function(_) {
-				return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;
-			  };
-
-			  path.context = function(_) {
-				if (!arguments.length) return context;
-				contextStream = (context = _) == null ? new PathString : new PathContext(_);
-				if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
-				return path;
-			  };
-
-			  path.pointRadius = function(_) {
-				if (!arguments.length) return pointRadius;
-				pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
-				return path;
-			  };
-
-			  return path.projection(projection).context(context);
-			};
-
-			var sum$2 = adder();
-
-			var polygonContains = function(polygon, point) {
-			  var lambda = point[0],
-				  phi = point[1],
-				  normal = [sin$1(lambda), -cos$1(lambda), 0],
-				  angle = 0,
-				  winding = 0;
-
-			  sum$2.reset();
-
-			  for (var i = 0, n = polygon.length; i < n; ++i) {
-				if (!(m = (ring = polygon[i]).length)) continue;
-				var ring,
-					m,
-					point0 = ring[m - 1],
-					lambda0 = point0[0],
-					phi0 = point0[1] / 2 + quarterPi,
-					sinPhi0 = sin$1(phi0),
-					cosPhi0 = cos$1(phi0);
-
-				for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
-				  var point1 = ring[j],
-					  lambda1 = point1[0],
-					  phi1 = point1[1] / 2 + quarterPi,
-					  sinPhi1 = sin$1(phi1),
-					  cosPhi1 = cos$1(phi1),
-					  delta = lambda1 - lambda0,
-					  sign$$1 = delta >= 0 ? 1 : -1,
-					  absDelta = sign$$1 * delta,
-					  antimeridian = absDelta > pi$4,
-					  k = sinPhi0 * sinPhi1;
-
-				  sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
-				  angle += antimeridian ? delta + sign$$1 * tau$4 : delta;
-
-				  // Are the longitudes either side of the point’s meridian (lambda),
-				  // and are the latitudes smaller than the parallel (phi)?
-				  if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
-					var arc = cartesianCross(cartesian(point0), cartesian(point1));
-					cartesianNormalizeInPlace(arc);
-					var intersection = cartesianCross(normal, arc);
-					cartesianNormalizeInPlace(intersection);
-					var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);
-					if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
-					  winding += antimeridian ^ delta >= 0 ? 1 : -1;
-					}
-				  }
-				}
-			  }
-
-			  // First, determine whether the South pole is inside or outside:
-			  //
-			  // It is inside if:
-			  // * the polygon winds around it in a clockwise direction.
-			  // * the polygon does not (cumulatively) wind around it, but has a negative
-			  //   (counter-clockwise) area.
-			  //
-			  // Second, count the (signed) number of times a segment crosses a lambda
-			  // from the point to the South pole.  If it is zero, then the point is the
-			  // same side as the South pole.
-
-			  return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);
-			};
-
-			var clip = function(pointVisible, clipLine, interpolate, start) {
-			  return function(rotate, sink) {
-				var line = clipLine(sink),
-					rotatedStart = rotate.invert(start[0], start[1]),
-					ringBuffer = clipBuffer(),
-					ringSink = clipLine(ringBuffer),
-					polygonStarted = false,
-					polygon,
-					segments,
-					ring;
-
-				var clip = {
-				  point: point,
-				  lineStart: lineStart,
-				  lineEnd: lineEnd,
-				  polygonStart: function() {
-					clip.point = pointRing;
-					clip.lineStart = ringStart;
-					clip.lineEnd = ringEnd;
-					segments = [];
-					polygon = [];
-				  },
-				  polygonEnd: function() {
-					clip.point = point;
-					clip.lineStart = lineStart;
-					clip.lineEnd = lineEnd;
-					segments = merge(segments);
-					var startInside = polygonContains(polygon, rotatedStart);
-					if (segments.length) {
-					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-					  clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
-					} else if (startInside) {
-					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-					  sink.lineStart();
-					  interpolate(null, null, 1, sink);
-					  sink.lineEnd();
-					}
-					if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
-					segments = polygon = null;
-				  },
-				  sphere: function() {
-					sink.polygonStart();
-					sink.lineStart();
-					interpolate(null, null, 1, sink);
-					sink.lineEnd();
-					sink.polygonEnd();
-				  }
-				};
-
-				function point(lambda, phi) {
-				  var point = rotate(lambda, phi);
-				  if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
-				}
-
-				function pointLine(lambda, phi) {
-				  var point = rotate(lambda, phi);
-				  line.point(point[0], point[1]);
-				}
-
-				function lineStart() {
-				  clip.point = pointLine;
-				  line.lineStart();
-				}
-
-				function lineEnd() {
-				  clip.point = point;
-				  line.lineEnd();
-				}
-
-				function pointRing(lambda, phi) {
-				  ring.push([lambda, phi]);
-				  var point = rotate(lambda, phi);
-				  ringSink.point(point[0], point[1]);
-				}
-
-				function ringStart() {
-				  ringSink.lineStart();
-				  ring = [];
-				}
-
-				function ringEnd() {
-				  pointRing(ring[0][0], ring[0][1]);
-				  ringSink.lineEnd();
-
-				  var clean = ringSink.clean(),
-					  ringSegments = ringBuffer.result(),
-					  i, n = ringSegments.length, m,
-					  segment,
-					  point;
-
-				  ring.pop();
-				  polygon.push(ring);
-				  ring = null;
-
-				  if (!n) return;
-
-				  // No intersections.
-				  if (clean & 1) {
-					segment = ringSegments[0];
-					if ((m = segment.length - 1) > 0) {
-					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-					  sink.lineStart();
-					  for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
-					  sink.lineEnd();
-					}
-					return;
-				  }
-
-				  // Rejoin connected segments.
-				  // TODO reuse ringBuffer.rejoin()?
-				  if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
-
-				  segments.push(ringSegments.filter(validSegment));
-				}
-
-				return clip;
-			  };
-			};
-
-			function validSegment(segment) {
-			  return segment.length > 1;
-			}
-
-			// Intersections are sorted along the clip edge. For both antimeridian cutting
-			// and circle clipping, the same comparison is used.
-			function compareIntersection(a, b) {
-			  return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])
-				   - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);
-			}
-
-			var clipAntimeridian = clip(
-			  function() { return true; },
-			  clipAntimeridianLine,
-			  clipAntimeridianInterpolate,
-			  [-pi$4, -halfPi$3]
-			);
-
-			// Takes a line and cuts into visible segments. Return values: 0 - there were
-			// intersections or the line was empty; 1 - no intersections; 2 - there were
-			// intersections, and the first and last segments should be rejoined.
-			function clipAntimeridianLine(stream) {
-			  var lambda0 = NaN,
-				  phi0 = NaN,
-				  sign0 = NaN,
-				  clean; // no intersections
-
-			  return {
-				lineStart: function() {
-				  stream.lineStart();
-				  clean = 1;
-				},
-				point: function(lambda1, phi1) {
-				  var sign1 = lambda1 > 0 ? pi$4 : -pi$4,
-					  delta = abs(lambda1 - lambda0);
-				  if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole
-					stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);
-					stream.point(sign0, phi0);
-					stream.lineEnd();
-					stream.lineStart();
-					stream.point(sign1, phi0);
-					stream.point(lambda1, phi0);
-					clean = 0;
-				  } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian
-					if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies
-					if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;
-					phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
-					stream.point(sign0, phi0);
-					stream.lineEnd();
-					stream.lineStart();
-					stream.point(sign1, phi0);
-					clean = 0;
-				  }
-				  stream.point(lambda0 = lambda1, phi0 = phi1);
-				  sign0 = sign1;
-				},
-				lineEnd: function() {
-				  stream.lineEnd();
-				  lambda0 = phi0 = NaN;
-				},
-				clean: function() {
-				  return 2 - clean; // if intersections, rejoin first and last segments
-				}
-			  };
-			}
-
-			function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
-			  var cosPhi0,
-				  cosPhi1,
-				  sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
-			  return abs(sinLambda0Lambda1) > epsilon$4
-				  ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
-					  - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
-					  / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
-				  : (phi0 + phi1) / 2;
-			}
-
-			function clipAntimeridianInterpolate(from, to, direction, stream) {
-			  var phi;
-			  if (from == null) {
-				phi = direction * halfPi$3;
-				stream.point(-pi$4, phi);
-				stream.point(0, phi);
-				stream.point(pi$4, phi);
-				stream.point(pi$4, 0);
-				stream.point(pi$4, -phi);
-				stream.point(0, -phi);
-				stream.point(-pi$4, -phi);
-				stream.point(-pi$4, 0);
-				stream.point(-pi$4, phi);
-			  } else if (abs(from[0] - to[0]) > epsilon$4) {
-				var lambda = from[0] < to[0] ? pi$4 : -pi$4;
-				phi = direction * lambda / 2;
-				stream.point(-lambda, phi);
-				stream.point(0, phi);
-				stream.point(lambda, phi);
-			  } else {
-				stream.point(to[0], to[1]);
-			  }
-			}
-
-			var clipCircle = function(radius, delta) {
-			  var cr = cos$1(radius),
-				  smallRadius = cr > 0,
-				  notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case
-
-			  function interpolate(from, to, direction, stream) {
-				circleStream(stream, radius, delta, direction, from, to);
-			  }
-
-			  function visible(lambda, phi) {
-				return cos$1(lambda) * cos$1(phi) > cr;
-			  }
-
-			  // Takes a line and cuts into visible segments. Return values used for polygon
-			  // clipping: 0 - there were intersections or the line was empty; 1 - no
-			  // intersections 2 - there were intersections, and the first and last segments
-			  // should be rejoined.
-			  function clipLine(stream) {
-				var point0, // previous point
-					c0, // code for previous point
-					v0, // visibility of previous point
-					v00, // visibility of first point
-					clean; // no intersections
-				return {
-				  lineStart: function() {
-					v00 = v0 = false;
-					clean = 1;
-				  },
-				  point: function(lambda, phi) {
-					var point1 = [lambda, phi],
-						point2,
-						v = visible(lambda, phi),
-						c = smallRadius
-						  ? v ? 0 : code(lambda, phi)
-						  : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;
-					if (!point0 && (v00 = v0 = v)) stream.lineStart();
-					// Handle degeneracies.
-					// TODO ignore if not clipping polygons.
-					if (v !== v0) {
-					  point2 = intersect(point0, point1);
-					  if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
-						point1[0] += epsilon$4;
-						point1[1] += epsilon$4;
-						v = visible(point1[0], point1[1]);
-					  }
-					}
-					if (v !== v0) {
-					  clean = 0;
-					  if (v) {
-						// outside going in
-						stream.lineStart();
-						point2 = intersect(point1, point0);
-						stream.point(point2[0], point2[1]);
-					  } else {
-						// inside going out
-						point2 = intersect(point0, point1);
-						stream.point(point2[0], point2[1]);
-						stream.lineEnd();
-					  }
-					  point0 = point2;
-					} else if (notHemisphere && point0 && smallRadius ^ v) {
-					  var t;
-					  // If the codes for two points are different, or are both zero,
-					  // and there this segment intersects with the small circle.
-					  if (!(c & c0) && (t = intersect(point1, point0, true))) {
-						clean = 0;
-						if (smallRadius) {
-						  stream.lineStart();
-						  stream.point(t[0][0], t[0][1]);
-						  stream.point(t[1][0], t[1][1]);
-						  stream.lineEnd();
-						} else {
-						  stream.point(t[1][0], t[1][1]);
-						  stream.lineEnd();
-						  stream.lineStart();
-						  stream.point(t[0][0], t[0][1]);
-						}
-					  }
-					}
-					if (v && (!point0 || !pointEqual(point0, point1))) {
-					  stream.point(point1[0], point1[1]);
-					}
-					point0 = point1, v0 = v, c0 = c;
-				  },
-				  lineEnd: function() {
-					if (v0) stream.lineEnd();
-					point0 = null;
-				  },
-				  // Rejoin first and last segments if there were intersections and the first
-				  // and last points were visible.
-				  clean: function() {
-					return clean | ((v00 && v0) << 1);
-				  }
-				};
-			  }
-
-			  // Intersects the great circle between a and b with the clip circle.
-			  function intersect(a, b, two) {
-				var pa = cartesian(a),
-					pb = cartesian(b);
-
-				// We have two planes, n1.p = d1 and n2.p = d2.
-				// Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
-				var n1 = [1, 0, 0], // normal
-					n2 = cartesianCross(pa, pb),
-					n2n2 = cartesianDot(n2, n2),
-					n1n2 = n2[0], // cartesianDot(n1, n2),
-					determinant = n2n2 - n1n2 * n1n2;
-
-				// Two polar points.
-				if (!determinant) return !two && a;
-
-				var c1 =  cr * n2n2 / determinant,
-					c2 = -cr * n1n2 / determinant,
-					n1xn2 = cartesianCross(n1, n2),
-					A = cartesianScale(n1, c1),
-					B = cartesianScale(n2, c2);
-				cartesianAddInPlace(A, B);
-
-				// Solve |p(t)|^2 = 1.
-				var u = n1xn2,
-					w = cartesianDot(A, u),
-					uu = cartesianDot(u, u),
-					t2 = w * w - uu * (cartesianDot(A, A) - 1);
-
-				if (t2 < 0) return;
-
-				var t = sqrt$1(t2),
-					q = cartesianScale(u, (-w - t) / uu);
-				cartesianAddInPlace(q, A);
-				q = spherical(q);
-
-				if (!two) return q;
-
-				// Two intersection points.
-				var lambda0 = a[0],
-					lambda1 = b[0],
-					phi0 = a[1],
-					phi1 = b[1],
-					z;
-
-				if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
-
-				var delta = lambda1 - lambda0,
-					polar = abs(delta - pi$4) < epsilon$4,
-					meridian = polar || delta < epsilon$4;
-
-				if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
-
-				// Check that the first point is between a and b.
-				if (meridian
-					? polar
-					  ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)
-					  : phi0 <= q[1] && q[1] <= phi1
-					: delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
-				  var q1 = cartesianScale(u, (-w + t) / uu);
-				  cartesianAddInPlace(q1, A);
-				  return [q, spherical(q1)];
-				}
-			  }
-
-			  // Generates a 4-bit vector representing the location of a point relative to
-			  // the small circle's bounding box.
-			  function code(lambda, phi) {
-				var r = smallRadius ? radius : pi$4 - radius,
-					code = 0;
-				if (lambda < -r) code |= 1; // left
-				else if (lambda > r) code |= 2; // right
-				if (phi < -r) code |= 4; // below
-				else if (phi > r) code |= 8; // above
-				return code;
-			  }
-
-			  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);
-			};
-
-			var transform$1 = function(methods) {
-			  return {
-				stream: transformer(methods)
-			  };
-			};
-
-			function transformer(methods) {
-			  return function(stream) {
-				var s = new TransformStream;
-				for (var key in methods) s[key] = methods[key];
-				s.stream = stream;
-				return s;
-			  };
-			}
-
-			function TransformStream() {}
-
-			TransformStream.prototype = {
-			  constructor: TransformStream,
-			  point: function(x, y) { this.stream.point(x, y); },
-			  sphere: function() { this.stream.sphere(); },
-			  lineStart: function() { this.stream.lineStart(); },
-			  lineEnd: function() { this.stream.lineEnd(); },
-			  polygonStart: function() { this.stream.polygonStart(); },
-			  polygonEnd: function() { this.stream.polygonEnd(); }
-			};
-
-			function fitExtent(projection, extent, object) {
-			  var w = extent[1][0] - extent[0][0],
-				  h = extent[1][1] - extent[0][1],
-				  clip = projection.clipExtent && projection.clipExtent();
-
-			  projection
-				  .scale(150)
-				  .translate([0, 0]);
-
-			  if (clip != null) projection.clipExtent(null);
-
-			  geoStream(object, projection.stream(boundsStream$1));
-
-			  var b = boundsStream$1.result(),
-				  k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
-				  x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
-				  y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
-
-			  if (clip != null) projection.clipExtent(clip);
-
-			  return projection
-				  .scale(k * 150)
-				  .translate([x, y]);
-			}
-
-			function fitSize(projection, size, object) {
-			  return fitExtent(projection, [[0, 0], size], object);
-			}
-
-			var maxDepth = 16;
-			var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
-
-			var resample = function(project, delta2) {
-			  return +delta2 ? resample$1(project, delta2) : resampleNone(project);
-			};
-
-			function resampleNone(project) {
-			  return transformer({
-				point: function(x, y) {
-				  x = project(x, y);
-				  this.stream.point(x[0], x[1]);
-				}
-			  });
-			}
-
-			function resample$1(project, delta2) {
-
-			  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
-				var dx = x1 - x0,
-					dy = y1 - y0,
-					d2 = dx * dx + dy * dy;
-				if (d2 > 4 * delta2 && depth--) {
-				  var a = a0 + a1,
-					  b = b0 + b1,
-					  c = c0 + c1,
-					  m = sqrt$1(a * a + b * b + c * c),
-					  phi2 = asin$1(c /= m),
-					  lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),
-					  p = project(lambda2, phi2),
-					  x2 = p[0],
-					  y2 = p[1],
-					  dx2 = x2 - x0,
-					  dy2 = y2 - y0,
-					  dz = dy * dx2 - dx * dy2;
-				  if (dz * dz / d2 > delta2 // perpendicular projected distance
-					  || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
-					  || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
-					resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
-					stream.point(x2, y2);
-					resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
-				  }
-				}
-			  }
-			  return function(stream) {
-				var lambda00, x00, y00, a00, b00, c00, // first point
-					lambda0, x0, y0, a0, b0, c0; // previous point
-
-				var resampleStream = {
-				  point: point,
-				  lineStart: lineStart,
-				  lineEnd: lineEnd,
-				  polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
-				  polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
-				};
-
-				function point(x, y) {
-				  x = project(x, y);
-				  stream.point(x[0], x[1]);
-				}
-
-				function lineStart() {
-				  x0 = NaN;
-				  resampleStream.point = linePoint;
-				  stream.lineStart();
-				}
-
-				function linePoint(lambda, phi) {
-				  var c = cartesian([lambda, phi]), p = project(lambda, phi);
-				  resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
-				  stream.point(x0, y0);
-				}
-
-				function lineEnd() {
-				  resampleStream.point = point;
-				  stream.lineEnd();
-				}
-
-				function ringStart() {
-				  lineStart();
-				  resampleStream.point = ringPoint;
-				  resampleStream.lineEnd = ringEnd;
-				}
-
-				function ringPoint(lambda, phi) {
-				  linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
-				  resampleStream.point = linePoint;
-				}
-
-				function ringEnd() {
-				  resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
-				  resampleStream.lineEnd = lineEnd;
-				  lineEnd();
-				}
-
-				return resampleStream;
-			  };
-			}
-
-			var transformRadians = transformer({
-			  point: function(x, y) {
-				this.stream.point(x * radians, y * radians);
-			  }
-			});
-
-			function projection(project) {
-			  return projectionMutator(function() { return project; })();
-			}
-
-			function projectionMutator(projectAt) {
-			  var project,
-				  k = 150, // scale
-				  x = 480, y = 250, // translate
-				  dx, dy, lambda = 0, phi = 0, // center
-				  deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
-				  theta = null, preclip = clipAntimeridian, // clip angle
-				  x0 = null, y0, x1, y1, postclip = identity$7, // clip extent
-				  delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
-				  cache,
-				  cacheStream;
-
-			  function projection(point) {
-				point = projectRotate(point[0] * radians, point[1] * radians);
-				return [point[0] * k + dx, dy - point[1] * k];
-			  }
-
-			  function invert(point) {
-				point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
-				return point && [point[0] * degrees$1, point[1] * degrees$1];
-			  }
-
-			  function projectTransform(x, y) {
-				return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
-			  }
-
-			  projection.stream = function(stream) {
-				return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
-			  };
-
-			  projection.clipAngle = function(_) {
-				return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
-			  };
-
-			  projection.clipExtent = function(_) {
-				return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
-			  };
-
-			  projection.scale = function(_) {
-				return arguments.length ? (k = +_, recenter()) : k;
-			  };
-
-			  projection.translate = function(_) {
-				return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
-			  };
-
-			  projection.center = function(_) {
-				return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
-			  };
-
-			  projection.rotate = function(_) {
-				return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
-			  };
-
-			  projection.precision = function(_) {
-				return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);
-			  };
-
-			  projection.fitExtent = function(extent, object) {
-				return fitExtent(projection, extent, object);
-			  };
-
-			  projection.fitSize = function(size, object) {
-				return fitSize(projection, size, object);
-			  };
-
-			  function recenter() {
-				projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
-				var center = project(lambda, phi);
-				dx = x - center[0] * k;
-				dy = y + center[1] * k;
-				return reset();
-			  }
-
-			  function reset() {
-				cache = cacheStream = null;
-				return projection;
-			  }
-
-			  return function() {
-				project = projectAt.apply(this, arguments);
-				projection.invert = project.invert && invert;
-				return recenter();
-			  };
-			}
-
-			function conicProjection(projectAt) {
-			  var phi0 = 0,
-				  phi1 = pi$4 / 3,
-				  m = projectionMutator(projectAt),
-				  p = m(phi0, phi1);
-
-			  p.parallels = function(_) {
-				return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
-			  };
-
-			  return p;
-			}
-
-			function cylindricalEqualAreaRaw(phi0) {
-			  var cosPhi0 = cos$1(phi0);
-
-			  function forward(lambda, phi) {
-				return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
-			  }
-
-			  forward.invert = function(x, y) {
-				return [x / cosPhi0, asin$1(y * cosPhi0)];
-			  };
-
-			  return forward;
-			}
-
-			function conicEqualAreaRaw(y0, y1) {
-			  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
-
-			  // Are the parallels symmetrical around the Equator?
-			  if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0);
-
-			  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n;
-
-			  function project(x, y) {
-				var r = sqrt$1(c - 2 * n * sin$1(y)) / n;
-				return [r * sin$1(x *= n), r0 - r * cos$1(x)];
-			  }
-
-			  project.invert = function(x, y) {
-				var r0y = r0 - y;
-				return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
-			  };
-
-			  return project;
-			}
-
-			var conicEqualArea = function() {
-			  return conicProjection(conicEqualAreaRaw)
-				  .scale(155.424)
-				  .center([0, 33.6442]);
-			};
-
-			var albers = function() {
-			  return conicEqualArea()
-				  .parallels([29.5, 45.5])
-				  .scale(1070)
-				  .translate([480, 250])
-				  .rotate([96, 0])
-				  .center([-0.6, 38.7]);
-			};
-
-			// The projections must have mutually exclusive clip regions on the sphere,
-			// as this will avoid emitting interleaving lines and polygons.
-			function multiplex(streams) {
-			  var n = streams.length;
-			  return {
-				point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
-				sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
-				lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
-				lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
-				polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
-				polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
-			  };
-			}
-
-			// A composite projection for the United States, configured by default for
-			// 960×500. The projection also works quite well at 960×600 if you change the
-			// scale to 1285 and adjust the translate accordingly. The set of standard
-			// parallels for each region comes from USGS, which is published here:
-			// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
-			var albersUsa = function() {
-			  var cache,
-				  cacheStream,
-				  lower48 = albers(), lower48Point,
-				  alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
-				  hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
-				  point, pointStream = {point: function(x, y) { point = [x, y]; }};
-
-			  function albersUsa(coordinates) {
-				var x = coordinates[0], y = coordinates[1];
-				return point = null,
-					(lower48Point.point(x, y), point)
-					|| (alaskaPoint.point(x, y), point)
-					|| (hawaiiPoint.point(x, y), point);
-			  }
-
-			  albersUsa.invert = function(coordinates) {
-				var k = lower48.scale(),
-					t = lower48.translate(),
-					x = (coordinates[0] - t[0]) / k,
-					y = (coordinates[1] - t[1]) / k;
-				return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
-					: y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
-					: lower48).invert(coordinates);
-			  };
-
-			  albersUsa.stream = function(stream) {
-				return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
-			  };
-
-			  albersUsa.precision = function(_) {
-				if (!arguments.length) return lower48.precision();
-				lower48.precision(_), alaska.precision(_), hawaii.precision(_);
-				return reset();
-			  };
-
-			  albersUsa.scale = function(_) {
-				if (!arguments.length) return lower48.scale();
-				lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
-				return albersUsa.translate(lower48.translate());
-			  };
-
-			  albersUsa.translate = function(_) {
-				if (!arguments.length) return lower48.translate();
-				var k = lower48.scale(), x = +_[0], y = +_[1];
-
-				lower48Point = lower48
-					.translate(_)
-					.clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
-					.stream(pointStream);
-
-				alaskaPoint = alaska
-					.translate([x - 0.307 * k, y + 0.201 * k])
-					.clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
-					.stream(pointStream);
-
-				hawaiiPoint = hawaii
-					.translate([x - 0.205 * k, y + 0.212 * k])
-					.clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
-					.stream(pointStream);
-
-				return reset();
-			  };
-
-			  albersUsa.fitExtent = function(extent, object) {
-				return fitExtent(albersUsa, extent, object);
-			  };
-
-			  albersUsa.fitSize = function(size, object) {
-				return fitSize(albersUsa, size, object);
-			  };
-
-			  function reset() {
-				cache = cacheStream = null;
-				return albersUsa;
-			  }
-
-			  return albersUsa.scale(1070);
-			};
-
-			function azimuthalRaw(scale) {
-			  return function(x, y) {
-				var cx = cos$1(x),
-					cy = cos$1(y),
-					k = scale(cx * cy);
-				return [
-				  k * cy * sin$1(x),
-				  k * sin$1(y)
-				];
-			  }
-			}
-
-			function azimuthalInvert(angle) {
-			  return function(x, y) {
-				var z = sqrt$1(x * x + y * y),
-					c = angle(z),
-					sc = sin$1(c),
-					cc = cos$1(c);
-				return [
-				  atan2(x * sc, z * cc),
-				  asin$1(z && y * sc / z)
-				];
-			  }
-			}
-
-			var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
-			  return sqrt$1(2 / (1 + cxcy));
-			});
-
-			azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
-			  return 2 * asin$1(z / 2);
-			});
-
-			var azimuthalEqualArea = function() {
-			  return projection(azimuthalEqualAreaRaw)
-				  .scale(124.75)
-				  .clipAngle(180 - 1e-3);
-			};
-
-			var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
-			  return (c = acos(c)) && c / sin$1(c);
-			});
-
-			azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
-			  return z;
-			});
-
-			var azimuthalEquidistant = function() {
-			  return projection(azimuthalEquidistantRaw)
-				  .scale(79.4188)
-				  .clipAngle(180 - 1e-3);
-			};
-
-			function mercatorRaw(lambda, phi) {
-			  return [lambda, log$1(tan((halfPi$3 + phi) / 2))];
-			}
-
-			mercatorRaw.invert = function(x, y) {
-			  return [x, 2 * atan(exp(y)) - halfPi$3];
-			};
-
-			var mercator = function() {
-			  return mercatorProjection(mercatorRaw)
-				  .scale(961 / tau$4);
-			};
-
-			function mercatorProjection(project) {
-			  var m = projection(project),
-				  scale = m.scale,
-				  translate = m.translate,
-				  clipExtent = m.clipExtent,
-				  clipAuto;
-
-			  m.scale = function(_) {
-				return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();
-			  };
-
-			  m.translate = function(_) {
-				return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();
-			  };
-
-			  m.clipExtent = function(_) {
-				if (!arguments.length) return clipAuto ? null : clipExtent();
-				if (clipAuto = _ == null) {
-				  var k = pi$4 * scale(),
-					  t = translate();
-				  _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
-				}
-				clipExtent(_);
-				return m;
-			  };
-
-			  return m.clipExtent(null);
-			}
-
-			function tany(y) {
-			  return tan((halfPi$3 + y) / 2);
-			}
-
-			function conicConformalRaw(y0, y1) {
-			  var cy0 = cos$1(y0),
-				  n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),
-				  f = cy0 * pow$1(tany(y0), n) / n;
-
-			  if (!n) return mercatorRaw;
-
-			  function project(x, y) {
-				if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }
-				else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }
-				var r = f / pow$1(tany(y), n);
-				return [r * sin$1(n * x), f - r * cos$1(n * x)];
-			  }
-
-			  project.invert = function(x, y) {
-				var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);
-				return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];
-			  };
-
-			  return project;
-			}
-
-			var conicConformal = function() {
-			  return conicProjection(conicConformalRaw)
-				  .scale(109.5)
-				  .parallels([30, 30]);
-			};
-
-			function equirectangularRaw(lambda, phi) {
-			  return [lambda, phi];
-			}
-
-			equirectangularRaw.invert = equirectangularRaw;
-
-			var equirectangular = function() {
-			  return projection(equirectangularRaw)
-				  .scale(152.63);
-			};
-
-			function conicEquidistantRaw(y0, y1) {
-			  var cy0 = cos$1(y0),
-				  n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
-				  g = cy0 / n + y0;
-
-			  if (abs(n) < epsilon$4) return equirectangularRaw;
-
-			  function project(x, y) {
-				var gy = g - y, nx = n * x;
-				return [gy * sin$1(nx), g - gy * cos$1(nx)];
-			  }
-
-			  project.invert = function(x, y) {
-				var gy = g - y;
-				return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)];
-			  };
-
-			  return project;
-			}
-
-			var conicEquidistant = function() {
-			  return conicProjection(conicEquidistantRaw)
-				  .scale(131.154)
-				  .center([0, 13.9389]);
-			};
-
-			function gnomonicRaw(x, y) {
-			  var cy = cos$1(y), k = cos$1(x) * cy;
-			  return [cy * sin$1(x) / k, sin$1(y) / k];
-			}
-
-			gnomonicRaw.invert = azimuthalInvert(atan);
-
-			var gnomonic = function() {
-			  return projection(gnomonicRaw)
-				  .scale(144.049)
-				  .clipAngle(60);
-			};
-
-			function scaleTranslate(k, tx, ty) {
-			  return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({
-				point: function(x, y) {
-				  this.stream.point(x * k + tx, y * k + ty);
-				}
-			  });
-			}
-
-			var identity$8 = function() {
-			  var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate
-				  x0 = null, y0, x1, y1, clip = identity$7, // clip extent
-				  cache,
-				  cacheStream,
-				  projection;
-
-			  function reset() {
-				cache = cacheStream = null;
-				return projection;
-			  }
-
-			  return projection = {
-				stream: function(stream) {
-				  return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
-				},
-				clipExtent: function(_) {
-				  return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
-				},
-				scale: function(_) {
-				  return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k;
-				},
-				translate: function(_) {
-				  return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
-				},
-				fitExtent: function(extent, object) {
-				  return fitExtent(projection, extent, object);
-				},
-				fitSize: function(size, object) {
-				  return fitSize(projection, size, object);
-				}
-			  };
-			};
-
-			function orthographicRaw(x, y) {
-			  return [cos$1(y) * sin$1(x), sin$1(y)];
-			}
-
-			orthographicRaw.invert = azimuthalInvert(asin$1);
-
-			var orthographic = function() {
-			  return projection(orthographicRaw)
-				  .scale(249.5)
-				  .clipAngle(90 + epsilon$4);
-			};
-
-			function stereographicRaw(x, y) {
-			  var cy = cos$1(y), k = 1 + cos$1(x) * cy;
-			  return [cy * sin$1(x) / k, sin$1(y) / k];
-			}
-
-			stereographicRaw.invert = azimuthalInvert(function(z) {
-			  return 2 * atan(z);
-			});
-
-			var stereographic = function() {
-			  return projection(stereographicRaw)
-				  .scale(250)
-				  .clipAngle(142);
-			};
-
-			function transverseMercatorRaw(lambda, phi) {
-			  return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];
-			}
-
-			transverseMercatorRaw.invert = function(x, y) {
-			  return [-y, 2 * atan(exp(x)) - halfPi$3];
-			};
-
-			var transverseMercator = function() {
-			  var m = mercatorProjection(transverseMercatorRaw),
-				  center = m.center,
-				  rotate = m.rotate;
-
-			  m.center = function(_) {
-				return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
-			  };
-
-			  m.rotate = function(_) {
-				return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
-			  };
-
-			  return rotate([0, 0, 90])
-				  .scale(159.155);
-			};
-
-			exports.version = version;
-			exports.bisect = bisectRight;
-			exports.bisectRight = bisectRight;
-			exports.bisectLeft = bisectLeft;
-			exports.ascending = ascending;
-			exports.bisector = bisector;
-			exports.descending = descending;
-			exports.deviation = deviation;
-			exports.extent = extent;
-			exports.histogram = histogram;
-			exports.thresholdFreedmanDiaconis = freedmanDiaconis;
-			exports.thresholdScott = scott;
-			exports.thresholdSturges = sturges;
-			exports.max = max;
-			exports.mean = mean;
-			exports.median = median;
-			exports.merge = merge;
-			exports.min = min;
-			exports.pairs = pairs;
-			exports.permute = permute;
-			exports.quantile = threshold;
-			exports.range = range;
-			exports.scan = scan;
-			exports.shuffle = shuffle;
-			exports.sum = sum;
-			exports.ticks = ticks;
-			exports.tickStep = tickStep;
-			exports.transpose = transpose;
-			exports.variance = variance;
-			exports.zip = zip;
-			exports.entries = entries;
-			exports.keys = keys;
-			exports.values = values;
-			exports.map = map$1;
-			exports.set = set;
-			exports.nest = nest;
-			exports.randomUniform = uniform;
-			exports.randomNormal = normal;
-			exports.randomLogNormal = logNormal;
-			exports.randomBates = bates;
-			exports.randomIrwinHall = irwinHall;
-			exports.randomExponential = exponential;
-			exports.easeLinear = linear;
-			exports.easeQuad = quadInOut;
-			exports.easeQuadIn = quadIn;
-			exports.easeQuadOut = quadOut;
-			exports.easeQuadInOut = quadInOut;
-			exports.easeCubic = cubicInOut;
-			exports.easeCubicIn = cubicIn;
-			exports.easeCubicOut = cubicOut;
-			exports.easeCubicInOut = cubicInOut;
-			exports.easePoly = polyInOut;
-			exports.easePolyIn = polyIn;
-			exports.easePolyOut = polyOut;
-			exports.easePolyInOut = polyInOut;
-			exports.easeSin = sinInOut;
-			exports.easeSinIn = sinIn;
-			exports.easeSinOut = sinOut;
-			exports.easeSinInOut = sinInOut;
-			exports.easeExp = expInOut;
-			exports.easeExpIn = expIn;
-			exports.easeExpOut = expOut;
-			exports.easeExpInOut = expInOut;
-			exports.easeCircle = circleInOut;
-			exports.easeCircleIn = circleIn;
-			exports.easeCircleOut = circleOut;
-			exports.easeCircleInOut = circleInOut;
-			exports.easeBounce = bounceOut;
-			exports.easeBounceIn = bounceIn;
-			exports.easeBounceOut = bounceOut;
-			exports.easeBounceInOut = bounceInOut;
-			exports.easeBack = backInOut;
-			exports.easeBackIn = backIn;
-			exports.easeBackOut = backOut;
-			exports.easeBackInOut = backInOut;
-			exports.easeElastic = elasticOut;
-			exports.easeElasticIn = elasticIn;
-			exports.easeElasticOut = elasticOut;
-			exports.easeElasticInOut = elasticInOut;
-			exports.polygonArea = area;
-			exports.polygonCentroid = centroid;
-			exports.polygonHull = hull;
-			exports.polygonContains = contains;
-			exports.polygonLength = length$1;
-			exports.path = path;
-			exports.quadtree = quadtree;
-			exports.queue = queue;
-			exports.arc = arc;
-			exports.area = area$1;
-			exports.line = line;
-			exports.pie = pie;
-			exports.radialArea = radialArea;
-			exports.radialLine = radialLine$1;
-			exports.symbol = symbol;
-			exports.symbols = symbols;
-			exports.symbolCircle = circle;
-			exports.symbolCross = cross$1;
-			exports.symbolDiamond = diamond;
-			exports.symbolSquare = square;
-			exports.symbolStar = star;
-			exports.symbolTriangle = triangle;
-			exports.symbolWye = wye;
-			exports.curveBasisClosed = basisClosed;
-			exports.curveBasisOpen = basisOpen;
-			exports.curveBasis = basis;
-			exports.curveBundle = bundle;
-			exports.curveCardinalClosed = cardinalClosed;
-			exports.curveCardinalOpen = cardinalOpen;
-			exports.curveCardinal = cardinal;
-			exports.curveCatmullRomClosed = catmullRomClosed;
-			exports.curveCatmullRomOpen = catmullRomOpen;
-			exports.curveCatmullRom = catmullRom;
-			exports.curveLinearClosed = linearClosed;
-			exports.curveLinear = curveLinear;
-			exports.curveMonotoneX = monotoneX;
-			exports.curveMonotoneY = monotoneY;
-			exports.curveNatural = natural;
-			exports.curveStep = step;
-			exports.curveStepAfter = stepAfter;
-			exports.curveStepBefore = stepBefore;
-			exports.stack = stack;
-			exports.stackOffsetExpand = expand;
-			exports.stackOffsetNone = none;
-			exports.stackOffsetSilhouette = silhouette;
-			exports.stackOffsetWiggle = wiggle;
-			exports.stackOrderAscending = ascending$1;
-			exports.stackOrderDescending = descending$2;
-			exports.stackOrderInsideOut = insideOut;
-			exports.stackOrderNone = none$1;
-			exports.stackOrderReverse = reverse;
-			exports.color = color;
-			exports.rgb = rgb;
-			exports.hsl = hsl;
-			exports.lab = lab;
-			exports.hcl = hcl;
-			exports.cubehelix = cubehelix;
-			exports.interpolate = interpolate;
-			exports.interpolateArray = array$1;
-			exports.interpolateDate = date;
-			exports.interpolateNumber = interpolateNumber;
-			exports.interpolateObject = object;
-			exports.interpolateRound = interpolateRound;
-			exports.interpolateString = interpolateString;
-			exports.interpolateTransformCss = interpolateTransformCss;
-			exports.interpolateTransformSvg = interpolateTransformSvg;
-			exports.interpolateZoom = interpolateZoom;
-			exports.interpolateRgb = interpolateRgb;
-			exports.interpolateRgbBasis = rgbBasis;
-			exports.interpolateRgbBasisClosed = rgbBasisClosed;
-			exports.interpolateHsl = hsl$2;
-			exports.interpolateHslLong = hslLong;
-			exports.interpolateLab = lab$1;
-			exports.interpolateHcl = hcl$2;
-			exports.interpolateHclLong = hclLong;
-			exports.interpolateCubehelix = cubehelix$2;
-			exports.interpolateCubehelixLong = cubehelixLong;
-			exports.interpolateBasis = basis$2;
-			exports.interpolateBasisClosed = basisClosed$1;
-			exports.quantize = quantize;
-			exports.dispatch = dispatch;
-			exports.dsvFormat = dsv;
-			exports.csvParse = csvParse;
-			exports.csvParseRows = csvParseRows;
-			exports.csvFormat = csvFormat;
-			exports.csvFormatRows = csvFormatRows;
-			exports.tsvParse = tsvParse;
-			exports.tsvParseRows = tsvParseRows;
-			exports.tsvFormat = tsvFormat;
-			exports.tsvFormatRows = tsvFormatRows;
-			exports.request = request;
-			exports.html = html;
-			exports.json = json;
-			exports.text = text;
-			exports.xml = xml;
-			exports.csv = csv$1;
-			exports.tsv = tsv$1;
-			exports.now = now;
-			exports.timer = timer;
-			exports.timerFlush = timerFlush;
-			exports.timeout = timeout$1;
-			exports.interval = interval$1;
-			exports.timeInterval = newInterval;
-			exports.timeMillisecond = millisecond;
-			exports.timeMilliseconds = milliseconds;
-			exports.timeSecond = second;
-			exports.timeSeconds = seconds;
-			exports.timeMinute = minute;
-			exports.timeMinutes = minutes;
-			exports.timeHour = hour;
-			exports.timeHours = hours;
-			exports.timeDay = day;
-			exports.timeDays = days;
-			exports.timeWeek = sunday;
-			exports.timeWeeks = sundays;
-			exports.timeSunday = sunday;
-			exports.timeSundays = sundays;
-			exports.timeMonday = monday;
-			exports.timeMondays = mondays;
-			exports.timeTuesday = tuesday;
-			exports.timeTuesdays = tuesdays;
-			exports.timeWednesday = wednesday;
-			exports.timeWednesdays = wednesdays;
-			exports.timeThursday = thursday;
-			exports.timeThursdays = thursdays;
-			exports.timeFriday = friday;
-			exports.timeFridays = fridays;
-			exports.timeSaturday = saturday;
-			exports.timeSaturdays = saturdays;
-			exports.timeMonth = month;
-			exports.timeMonths = months;
-			exports.timeYear = year;
-			exports.timeYears = years;
-			exports.utcMillisecond = millisecond;
-			exports.utcMilliseconds = milliseconds;
-			exports.utcSecond = second;
-			exports.utcSeconds = seconds;
-			exports.utcMinute = utcMinute;
-			exports.utcMinutes = utcMinutes;
-			exports.utcHour = utcHour;
-			exports.utcHours = utcHours;
-			exports.utcDay = utcDay;
-			exports.utcDays = utcDays;
-			exports.utcWeek = utcSunday;
-			exports.utcWeeks = utcSundays;
-			exports.utcSunday = utcSunday;
-			exports.utcSundays = utcSundays;
-			exports.utcMonday = utcMonday;
-			exports.utcMondays = utcMondays;
-			exports.utcTuesday = utcTuesday;
-			exports.utcTuesdays = utcTuesdays;
-			exports.utcWednesday = utcWednesday;
-			exports.utcWednesdays = utcWednesdays;
-			exports.utcThursday = utcThursday;
-			exports.utcThursdays = utcThursdays;
-			exports.utcFriday = utcFriday;
-			exports.utcFridays = utcFridays;
-			exports.utcSaturday = utcSaturday;
-			exports.utcSaturdays = utcSaturdays;
-			exports.utcMonth = utcMonth;
-			exports.utcMonths = utcMonths;
-			exports.utcYear = utcYear;
-			exports.utcYears = utcYears;
-			exports.formatLocale = formatLocale;
-			exports.formatDefaultLocale = defaultLocale;
-			exports.formatSpecifier = formatSpecifier;
-			exports.precisionFixed = precisionFixed;
-			exports.precisionPrefix = precisionPrefix;
-			exports.precisionRound = precisionRound;
-			exports.isoFormat = formatIso;
-			exports.isoParse = parseIso;
-			exports.timeFormatLocale = formatLocale$1;
-			exports.timeFormatDefaultLocale = defaultLocale$1;
-			exports.scaleBand = band;
-			exports.scalePoint = point$4;
-			exports.scaleIdentity = identity$4;
-			exports.scaleLinear = linear$2;
-			exports.scaleLog = log;
-			exports.scaleOrdinal = ordinal;
-			exports.scaleImplicit = implicit;
-			exports.scalePow = pow;
-			exports.scaleSqrt = sqrt;
-			exports.scaleQuantile = quantile$$1;
-			exports.scaleQuantize = quantize$1;
-			exports.scaleThreshold = threshold$1;
-			exports.scaleTime = time;
-			exports.scaleUtc = utcTime;
-			exports.schemeCategory10 = category10;
-			exports.schemeCategory20b = category20b;
-			exports.schemeCategory20c = category20c;
-			exports.schemeCategory20 = category20;
-			exports.scaleSequential = sequential;
-			exports.interpolateCubehelixDefault = cubehelix$3;
-			exports.interpolateRainbow = rainbow$1;
-			exports.interpolateWarm = warm;
-			exports.interpolateCool = cool;
-			exports.interpolateViridis = viridis;
-			exports.interpolateMagma = magma;
-			exports.interpolateInferno = inferno;
-			exports.interpolatePlasma = plasma;
-			exports.creator = creator;
-			exports.customEvent = customEvent;
-			exports.local = local;
-			exports.matcher = matcher$1;
-			exports.mouse = mouse;
-			exports.namespace = namespace;
-			exports.namespaces = namespaces;
-			exports.select = select;
-			exports.selectAll = selectAll;
-			exports.selection = selection;
-			exports.selector = selector;
-			exports.selectorAll = selectorAll;
-			exports.touch = touch;
-			exports.touches = touches;
-			exports.window = window;
-			exports.active = active;
-			exports.interrupt = interrupt;
-			exports.transition = transition;
-			exports.axisTop = axisTop;
-			exports.axisRight = axisRight;
-			exports.axisBottom = axisBottom;
-			exports.axisLeft = axisLeft;
-			exports.cluster = cluster;
-			exports.hierarchy = hierarchy;
-			exports.pack = index;
-			exports.packSiblings = siblings;
-			exports.packEnclose = enclose;
-			exports.partition = partition;
-			exports.stratify = stratify;
-			exports.tree = tree;
-			exports.treemap = index$1;
-			exports.treemapBinary = binary;
-			exports.treemapDice = treemapDice;
-			exports.treemapSlice = treemapSlice;
-			exports.treemapSliceDice = sliceDice;
-			exports.treemapSquarify = squarify;
-			exports.treemapResquarify = resquarify;
-			exports.forceCenter = center$1;
-			exports.forceCollide = collide;
-			exports.forceLink = link;
-			exports.forceManyBody = manyBody;
-			exports.forceSimulation = simulation;
-			exports.forceX = x$3;
-			exports.forceY = y$3;
-			exports.drag = drag;
-			exports.dragDisable = dragDisable;
-			exports.dragEnable = yesdrag;
-			exports.voronoi = voronoi;
-			exports.zoom = zoom;
-			exports.zoomIdentity = identity$6;
-			exports.zoomTransform = transform;
-			exports.brush = brush;
-			exports.brushX = brushX;
-			exports.brushY = brushY;
-			exports.brushSelection = brushSelection;
-			exports.chord = chord;
-			exports.ribbon = ribbon;
-			exports.geoAlbers = albers;
-			exports.geoAlbersUsa = albersUsa;
-			exports.geoArea = area$2;
-			exports.geoAzimuthalEqualArea = azimuthalEqualArea;
-			exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
-			exports.geoAzimuthalEquidistant = azimuthalEquidistant;
-			exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
-			exports.geoBounds = bounds;
-			exports.geoCentroid = centroid$1;
-			exports.geoCircle = circle$1;
-			exports.geoClipExtent = extent$1;
-			exports.geoConicConformal = conicConformal;
-			exports.geoConicConformalRaw = conicConformalRaw;
-			exports.geoConicEqualArea = conicEqualArea;
-			exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
-			exports.geoConicEquidistant = conicEquidistant;
-			exports.geoConicEquidistantRaw = conicEquidistantRaw;
-			exports.geoDistance = distance;
-			exports.geoEquirectangular = equirectangular;
-			exports.geoEquirectangularRaw = equirectangularRaw;
-			exports.geoGnomonic = gnomonic;
-			exports.geoGnomonicRaw = gnomonicRaw;
-			exports.geoGraticule = graticule;
-			exports.geoGraticule10 = graticule10;
-			exports.geoIdentity = identity$8;
-			exports.geoInterpolate = interpolate$2;
-			exports.geoLength = length$2;
-			exports.geoMercator = mercator;
-			exports.geoMercatorRaw = mercatorRaw;
-			exports.geoOrthographic = orthographic;
-			exports.geoOrthographicRaw = orthographicRaw;
-			exports.geoPath = index$3;
-			exports.geoProjection = projection;
-			exports.geoProjectionMutator = projectionMutator;
-			exports.geoRotation = rotation;
-			exports.geoStereographic = stereographic;
-			exports.geoStereographicRaw = stereographicRaw;
-			exports.geoStream = geoStream;
-			exports.geoTransform = transform$1;
-			exports.geoTransverseMercator = transverseMercator;
-			exports.geoTransverseMercatorRaw = transverseMercatorRaw;
-
-			Object.defineProperty(exports, '__esModule', { value: true });
-
-			})));
-
-
-			//aigner: HERE IS WHERE IT ALL STARTS!!!
-			},{}],2:[function(require,module,exports){
-				
-
-
-				
-			var d3 = require('d3');
-
-			var PULSE_DURATION = 700;
-			var SUB_ANIM_DELAY = 200;
-			var ACTIVE_COLOR = d3.rgb("seagreen");
-
-			function Animation(xdsms, rootId, delay) {
-			  this.rootId = rootId;
-			  if (typeof (rootId) === 'undefined') {
-				this.rootId = 'root';
-			  }
-			  this.root = xdsms[this.rootId];
-			  this.xdsms = xdsms;
-			  this.duration = PULSE_DURATION;
-			  this.initialDelay = delay || 0;
-			}
-
-			Animation.prototype._pulse = function(delay, toBeSelected, option) {
-			  var sel = d3.select("svg." + this.rootId)
-						  .selectAll(toBeSelected)
-						  .transition().delay(delay);
-			  if (option !== "out") {
-				sel = sel.transition().duration(200)
-						.style('stroke-width', '8px')
-						.style('stroke', ACTIVE_COLOR)
-						.style('fill', function(d) {
-						  if (d.id) {
-							return ACTIVE_COLOR.brighter();
-						  }});
-			  }
-			  if (option !== "in") {
-				sel.transition().duration(3 * PULSE_DURATION)
-						.style('stroke-width', null)
-						.style('stroke', null)
-						.style('fill', null);
-			  }
-			};
-
-			Animation.prototype._animate = function() {
-			  var self = this;
-			  var delay = this.initialDelay;
-			  var animDelay = SUB_ANIM_DELAY;
-			  var graph = self.xdsms[self.rootId].graph;
-			  
-			  var title = d3.select("svg." + self.rootId).select("g.title");
-			  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
-			  d3.select("svg." + self.rootId).select("rect.border")
-				.transition().delay(delay)
-				  .style("stroke-width", '5px').duration(200)
-				.transition().duration(1000)
-				  .style("stroke", 'black').style("stroke-width", '0px');
-
-			  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
-				var offsets = [];
-				nodesAtStep.forEach(function(nodeId) {
-				  var elapsed = delay + n * PULSE_DURATION;
-				  if (n > 0) {
-					nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
-					  var from = graph.idxOf(prevNodeId);
-					  var to = graph.idxOf(nodeId);
-					  self._pulse(elapsed,"polyline.link_" + from + "_" + to);
-					});
-				  }
-				  //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
-				  var gnode = "g." + nodeId;
-				  var nodeSel = d3.select("svg." + self.rootId).select(gnode);
-				  var scnId = graph.getNode(nodeId).getScenarioId();
-				  if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
-				  {
-					  self._pulse(elapsed, gnode + " > rect", "in");
-					  var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
-					  var offset = anim._animate();
-					  offsets.push(offset);
-					  self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
-				  } 
-				  else 
-				  {
-					  self._pulse(elapsed, gnode + " > rect");
-				  }
-				}, this);
-
-				if (offsets.length > 0) {
-				  delay += Math.max.apply(null, offsets);
-				}
-				delay += animDelay;
-			  }, this);
-				
-			  title.select("text").transition()
-				.delay(graph.nodesByStep.length * PULSE_DURATION + delay)
-				.style("fill", null);
-
-			  return graph.nodesByStep.length * PULSE_DURATION;
-			};
-
-			Animation.prototype.run = function() {
-			  this._animate();
-			};
-
-			module.exports = Animation;
-
-			},{"d3":1}],3:[function(require,module,exports){
-			var UID = "_U_";
-			var MULTI_TYPE = "_multi";
-
-			//aigner: Node() constructor additionally gets the "xdsm"
-			function Node(xdsm, id, name, type, metadata) {
-				
-			  var splitUndef = name.split("undefined: ")
-			  if (splitUndef.length>1) {name=splitUndef[1]}
-			  else {name=splitUndef[0]}
-			  
-			  if (typeof (name) === 'undefined') {
-				name = id;
-			  }
-			  if (typeof (type) === 'undefined') {
-				type = 'analysis';
-			  }
-			  this.xdsm = xdsm;
-			  this.id = id;
-			  this.name = name;
-			  this.metadata = metadata;
-			  this.isMulti = (type.search(/_multi$/) >= 0);
-			  this.type = this.isMulti ?
-				type.substr(0, type.length - MULTI_TYPE.length) : type;
-			}
-
-			Node.prototype.isMdo = function() {
-			  return this.type === "mdo";
-			};
-
-			Node.prototype.getScenarioId = function() {
-			  if (this.isMdo()) {
-				var idxscn = this.name.indexOf("_scn-");
-				if (idxscn === -1) {
-				  console.log("Warning: MDO Scenario not found. " +
-							  "Bad type or name for node: " + JSON.stringify(this));
-				  return null;
-				}
-				return this.name.substr(idxscn + 1);
-			  }
-			  return null;
-			};
-
-			function Edge(from, to, name, row, col, isMulti) {
-			  this.id = "link_" + from + "_" + to;
-			  this.name = name;
-			  this.row = row;
-			  this.col = col;
-			  this.iotype = row < col ? "in" : "out";
-			  this.io = {
-				fromU: (from === UID),
-				toU: (to === UID)
-			  };
-			  this.from = from;
-			  this.to = to;
-			  this.isMulti = isMulti;
-			}
-
-			Edge.prototype.isIO = function() {
-			  return this.io.fromU || this.io.toU;
-			};
-
-			//aigner: Function creates the xdsm graph
-			function Graph(mdo, refname) {
-			  this.nodes = [new Node(UID, UID, UID, "user",[])];
-			  this.edges = [];
-			  this.chains = [];
-			  this.refname = refname || "";
-			  
-			  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
-			  var numbering = Graph.new_number(mdo.workflow);
-			  //var numbering = Graph.number(mdo.workflow);
-			  var numPrefixes = numbering.toNum;
-			  this.nodesByStep = numbering.toNode;
-
-			  mdo.nodes.forEach(function(item) {
-				name = document.createElement("TEXTAREA");
-				name = numPrefixes[item.id] + ": " + item.name;
-				this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
-			  }, this);
-
-			  this.ids = this.nodes.map(function(elt) {
-				return elt.id;
-			  });
-			  
-			  mdo.edges.forEach(function(item) {
-				var idA = this.idxOf(item.from);
-				var idB = this.idxOf(item.to);
-				
-				var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
-				this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
-			  }, this);
-
-			  
-			  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
-			  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
-			  // var echain = Graph.expand(mdo.workflow); 
-			  // echain.forEach(function(leafChain) {
-				// if (leafChain.length < 2) {
-				  // throw new Error("Bad process chain (" + leafChain.length + "elt)");
-				// } else {
-				  // this.chains.push([]);
-				  // var ids = this.nodes.map(function(elt) {
-					// return elt.id;
-				  // });
-				  // leafChain.forEach(function(item, j) {
-					// if (j !== 0) {
-					  // var idA = ids.indexOf(leafChain[j - 1]);
-					  // if (idA < 0) {
-						// throw new Error("Process chain element (" +
-										// leafChain[j - 1] + ") not found");
-					  // }
-					  // var idB = ids.indexOf(leafChain[j]);
-					  // if (idB < 0) {
-						// throw new Error("Process chain element (" +
-										// leafChain[j] + ") not found");
-					  // }
-					  // if (idA !== idB) {
-						// this.chains[this.chains.length - 1].push([idA, idB]);
-					  // }
-					// }
-				  // }, this);
-				// }
-			  // }, this);
-			  
-			  
-			}
-
-			Graph.prototype.idxOf = function(nodeId) {
-			  return this.ids.indexOf(nodeId);
-			};
-			Graph.prototype.getNode = function(nodeId) {
-			  return this.nodes[this.ids.indexOf(nodeId)];
-			};
-
-			function _expand(workflow) {
-			  var ret = [];
-			  var prev;
-			  workflow.forEach(function(item) {
-				if (item instanceof Array) {
-				  if (item[0].hasOwnProperty('parallel')) {
-					if (prev) {
-					  ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
-						  function(elt) {
-							return [prev].concat(_expand([elt]), prev);
-						  }));
-					} else {
-					  throw new Error("Bad workflow structure : " +
-						  "cannot parallel loop without previous starting point.");
-					}
-				  } else if (prev) {
-					ret = ret.concat(_expand(item), prev);
-				  } else {
-					ret = ret.concat(_expand(item));
-				  }
-				  prev = ret[ret.length - 1];
-				} else if (item.hasOwnProperty('parallel')) {
-				  if (prev) {
-					ret = ret.slice(0, ret.length - 1).concat(
-						item.parallel.map(function(elt) {
-						  return [prev].concat(_expand([elt]));
-						}));
-				  } else {
-					ret = ret.concat(item.parallel.map(
-						function(elt) {
-						  return _expand([elt]);
-						}));
-				  }
-				  prev = undefined;
-				} else {
-				  var i = ret.length - 1;
-				  var flagParallel = false;
-				  while (i >= 0 && (ret[i] instanceof Array)) {
-					ret[i] = ret[i].concat(item);
-					i -= 1;
-					flagParallel = true;
-				  }
-				  if (!flagParallel) {
-					ret.push(item);
-				  }
-				  prev = item;
-				}
-			  }, this);
-			  return ret;
-			}
-
-			Graph.expand = function(item) {
-			  var expanded = _expand(item);
-			  var result = [];
-			  var current = [];
-			  expanded.forEach(function(elt) {
-				if (elt instanceof Array) {
-				  if (current.length > 0) {
-					current.push(elt[0]);
-					result.push(current);
-					current = [];
-				  }
-				  result.push(elt);
-				} else {
-				  if (result.length > 0 && current.length === 0) {
-					var lastChain = result[result.length - 1];
-					var lastElt = lastChain[lastChain.length - 1];
-					current.push(lastElt);
-				  }
-				  current.push(elt);
-				}
-			  }, this);
-			  if (current.length > 0) {
-				result.push(current);
-			  }
-			  return result;
-			};
-
-			Graph.new_expand = function(workflow,nodes) {
-				var ids = nodes.map(function(elt) {
-					return elt.id;
-				});
-				var result_tmp = [];
-				for (var i=0; i < workflow.length; i++)
-				{
-					var stepNumber = workflow[i].step_number
-					var edges = workflow[i].edges;
-					for (var j=0; j < edges.length; j++)
-					{
-						var fromNode = edges[j][0];
-						var toNode = edges[j][1];			
-						var fromId = ids.indexOf(fromNode)+1;
-						var toId = ids.indexOf(toNode)+1;
-						result_tmp.push([fromId,toId]);
-					}
-				}
-				var result = [];
-				result.push(result_tmp)
-				return result;
-			};
-
-			Graph.number = function(workflow, num) {
-			  num = (typeof num === 'undefined') ? 0 : num;
-			  var toNum = {};
-			  var toNode = [];
-
-			  function setStep(step, nodeId) {
-				if (step in toNode) {
-				  toNode[step].push(nodeId);
-				} else {
-				  toNode[step] = [nodeId];
-				}
-			  }
-
-			  function setNum(nodeId, beg, end) {
-				if (end === undefined) {
-				  num = String(beg);
-				  setStep(beg, nodeId);
-				} else {
-				  num = end + "-" + beg;
-				  setStep(end, nodeId);
-				}
-				if (nodeId in toNum) {
-				  toNum[nodeId] += "," + num;
-				} else {
-				  toNum[nodeId] = num;
-				}
-			  }
-
-			  function _number(wks, num) {
-				var ret = 0;
-				if (wks instanceof Array) {
-				  if (wks.length === 0) {
-					ret = num;
-				  } else if (wks.length === 1) {
-					ret = _number(wks[0], num);
-				  } else {
-					var head = wks[0];
-					var tail = wks.slice(1);
-					var beg = _number(head, num);
-					if (tail[0] instanceof Array) {
-					  var end = _number(tail[0], beg);
-					  setNum(head, beg, end);
-					  beg = end + 1;
-					  tail.shift();
-					}
-					ret = _number(tail, beg);
-				  }
-				} else if ((wks instanceof Object) && 'parallel' in wks) {
-				  var nums = wks.parallel.map(function(branch) {
-					return _number(branch, num);
-				  });
-				  ret = Math.max.apply(null, nums);
-				} else {
-				  setNum(wks, num);
-				  ret = num + 1;
-				}
-				return ret;
-			  }
-
-			  _number(workflow, num);
-			  // console.log('toNodes=', JSON.stringify(toNode));
-			  // console.log('toNum=',JSON.stringify(toNum));
-			  return {toNum: toNum, toNode: toNode};
-			};
-
-			//aigner: New numbering for the workflow nodes
-			Graph.new_number = function(workflow, num) {
-				num = (typeof num === 'undefined') ? 0 : num;
-				var toNum = {};
-				var toNode = [];
-				
-				for (var i=0; i < workflow.length; i++)
-				{
-					//aigner: Number the nodes with respect to the defined process steps
-					//--> toNum
-					//##########################################
-					for (var j=0; j < workflow[i].process_step_blocks.length; j++)
-					{
-						var proc_id_to = workflow[i].process_step_blocks[j];
-						if (proc_id_to)
-						{
-
-							if (!toNum[proc_id_to])
-							{
-								toNum[proc_id_to] = workflow[i].step_number;
-							}
-							else
-							{
-								toNum[proc_id_to] += "," + workflow[i].step_number;
-							}
-						}
-					}
-					for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
-					{
-						var conv_id_to = workflow[i].converger_step_blocks[j];
-						if (conv_id_to)
-						{
-							toNum[conv_id_to] += "," + workflow[i].step_number;
-							var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
-							//aigner: CAUTION --> hard coded exception for coordinator
-							if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
-						}
-					}
-					//##########################################		
-					//--> toNode
-					//##########################################
-					var stepNumber = workflow[i].step_number
-					var nodeId;
-					if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
-					else
-					{
-						var nodeIds = [];
-						for (var j=0; j<workflow[i].edges.length ;j++)
-						{
-							nodeIds.push(workflow[i].edges[j][1]);
-						}
-						nodeId = nodeIds;
-					}
-					toNode[stepNumber] = nodeId;
-					//##########################################
-				}	
-				return {toNum: toNum, toNode: toNode};
-			};
-
-			module.exports = Graph;
-
-			},{}],4:[function(require,module,exports){
-			function Labelizer() {}
-
-			Labelizer.strParse = function(str) {
-			  if (str === "") {
-				return [{base: '', sub: undefined, sup: undefined}];
-			  }
-
-			  //console.log("STR-->")
-			  //console.log(str);
-			  //aigner: Space sign added
-			  var lstr = str.split(',');
-			  var underscores = /_/g;
-			  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
-
-			  var res = lstr.map(function(s) {
-				var base;
-				var sub;
-				var sup;
-				
-				//aigner: Modification. xpath is split after each "/"
-				var s_split = s.split("/");
-				s = s_split[s_split.length-1];
-
-				if ((s.match(underscores) || []).length > 1) {
-				  var mu = s.match(/(.+)^(.+)/);
-				  if (mu) {
-					return {base: mu[1], sub: undefined, sup: mu[2]};
-				  }
-				  return {base: s, sub: undefined, sup: undefined};
-				}
-				var m = s.match(rg);
-				if (m) {
-				  base = (m[1] ? m[1] : "") + m[2];
-				  if (m[3]) {
-					sub = m[3].substring(1);
-				  }
-				  if (m[4]) {
-					sup = m[4].substring(1);
-				  }
-				} else {
-				  throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
-				}
-				return {base: base, sub: sub, sup: sup};
-			  }, this);
-			 
-			  return res;
-			};
-
-			Labelizer.labelize = function() {
-			  var ellipsis = 0;
-
-			  //aigner: createLabel modified. Hide variable names if too long.
-			  function createLabel(selection) 
-			  {
-				selection.each(function(d) {
-					//console.log("Labelize-->");
-					//console.log(d);
-				  var tokens = Labelizer.strParse(d.name);
-				  var text = selection.append("text");
-
-				  var className = selection._groups[0][0].getAttribute("class");
-
-				  if (className.includes("node"))
-				  {
-					tokens.every(function(token, i, ary)
-					{
-						var offsetSub = 0;
-						var offsetSup = 0;
-						//aigner: If the node is too big, it will not be shown at first, only when hovering
-						if (ellipsis < 1 || i < 15) 
-						{
-							text.append("tspan").text(token.base);
-							if (token.sub) 
-							{
-							offsetSub = 10;
-							text.append("tspan")
-							  .attr("class", "sub")
-							  .attr("dy", offsetSub)
-							  .text(token.sub);
-							}
-							if (token.sup) {
-								offsetSup = -10;
-								text.append("tspan")
-								  .attr("class", "sup")
-								  .attr("dx", -5)
-								  .attr("dy", -offsetSub + offsetSup)
-								  .text(token.sup);
-								offsetSub = 0;
-							}
-						} else 
-						{
-							text.append("tspan")
-								.attr("dy", -offsetSub - offsetSup)
-								.text("...");
-							selection.classed("ellipsized", true);
-							return false;
-						}
-						if (i < ary.length - 1) 
-						{
-							  text.append("tspan")
-								.attr("dy", -offsetSub - offsetSup)
-								.text(", ");
-						}
-						return true;
-					}, this);
-				  }
-				  else if(className.includes("edge"))
-				  {	  
-						var offsetSub = 0;
-						var offsetSup = 0;
-						//aigner: If there are more than 5 variables in an edge, they are not shown!
-						tokens.every(function(token, i, ary)
-						{           			
-							if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
-							else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
-							else{text_tmp = "conn."}
-							//if (ary.length>1){text_tmp = text_tmp+"s"};
-							text.append("tspan")
-							.attr("dy", -offsetSub - offsetSup)
-							.text(ary.length + " " + text_tmp);                    
-							
-							selection.classed("ellipsized", true);
-							return false;
-						}, this);
-				  }
-				});
-			  }
-
-			  createLabel.ellipsis = function(value) {  
-				if (!arguments.length) {
-				  return ellipsis;
-				}
-				ellipsis = value;
-				return createLabel;
-			  };
-
-			  return createLabel;
-			};
-
-			Labelizer.tooltipize = function() {
-			  var text = "";
-
-			  function createTooltip(selection) {
-				var tokens = Labelizer.strParse(text);
-				var html = [];
-				tokens.forEach(function(token) {
-				  var item = token.base;
-				  if (token.sub) {
-					item += "<sub>" + token.sub + "</sub>";
-				  }
-				  if (token.sup) {
-					item += "<sup>" + token.sup + "</sup>";
-				  }
-				  html.push(item);
-				}, this);
-				selection.html(html.join(", "));
-			  }
-
-			  createTooltip.text = function(value) {
-				if (!arguments.length) {
-				  return text;
-				}
-				text = value;
-				return createTooltip;
-			  };
-
-			  return createTooltip;
-			};
-
-			module.exports = Labelizer;
-
-			},{}],5:[function(require,module,exports){
-			var d3 = require('d3');
-			var Labelizer = require('./labelizer.js');
-
-			var WIDTH = 1000;
-			var HEIGHT = 500;
-			var X_ORIG = 70;
-			var Y_ORIG = 20;
-			var PADDING = 20;
-			var CELL_W = 250;
-			var CELL_H = 75;
-			var MULTI_OFFSET = 3;
-
-			function Cell(x, y, width, height) {
-			  this.x = x;
-			  this.y = y;
-			  this.width = width;
-			  this.height = height;
-			}
-
-			function Xdsm(graph, svgid, tooltip) {
-			  this.graph = graph;
-			  this.tooltip = tooltip;
-			  this.svg = d3.select(".xdsm")
-						   .append("svg")
-						 .attr("width", WIDTH)
-						 .attr("height", HEIGHT)
-						 .attr("class", svgid);
-
-			  this.grid = [];
-			  this.nodes = [];
-			  this.edges = [];
-			}
-
-			Xdsm.prototype.draw = function(graphName) {
-			  var self = this;
-
-			  if (self.graph.refname) {
-				var ref = self.svg.append('g').classed('title', true);
-
-				var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
-					
-				//ref.append("text").text(graphName);
-				var bbox = ref.nodes()[0].getBBox();
-				ref.insert("rect", "text")
-					.attr('x', bbox.x)
-					.attr('y', bbox.y)
-					.attr('width', bbox.width)
-					.attr('height', bbox.height);
-
-				ref.attr('transform',
-						 'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
-			  }
-
-			  self.nodes = self._createTextGroup("node");
-			  self.edges = self._createTextGroup("edge");
-
-			  // Workflow
-			  self._createWorkflow();
-
-			  // Layout texts
-			  self._layoutText(self.nodes);
-			  self._layoutText(self.edges);
-
-			  // Rectangles for nodes
-			  self.nodes.each(function(d, i) {
-				var that = d3.select(this);
-				that.call(self._customRect.bind(self), d, i, 0);
-				if (d.isMulti) {
-				  that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
-				  that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
-				}
-			  });
-
-			  // Trapezium for edges
-			  self.edges.each(function(d, i) {
-				var that = d3.select(this);
-				that.call(self._customTrapz.bind(self), d, i, 0);
-				if (d.isMulti) {
-				  that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
-				  that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
-				}
-			  });
-
-			  // Dataflow
-			  self._createDataflow(self.edges);
-				
-			  //aigner: set svg size
-			  var w = CELL_W * (self.graph.nodes.length + 1);
-			  var h = CELL_H * (self.graph.nodes.length + 1);
-			  self.svg.attr("width", w).attr("height", h);
-
-			  var bordercolor = 'black';
-			  self.svg.append("rect")
-						.classed("border", true)
-						.attr("x", 4)
-						.attr("y", 4)
-						.attr("height", h - 4)
-						.attr("width", w - 4)
-						.style("stroke", bordercolor)
-						.style("fill", "none")
-						.style("stroke-width", 0);
-						
-			  //aigner: PlayButton for animation
-			  var playButton = self.svg.append("g").attr("class", "playButton")
-				  .attr("transform", "translate("+ 10 +","+ 10 +")")
-				  
-			  playButton
-				.append("rect")
-				  .attr("class", "playButton_rect")
-				  .attr("width", 50)
-				  .attr("height", 50)
-				  .attr("rx", 4)
-				  .style("fill", "#555555");
-				  
-			  playButton
-				.append("path")
-				  .attr("class", "playButton_triangle")
-				  .attr("d", "M15 10 L15 40 L35 25 Z")
-				  .style("fill", "white");
-				  
-			  playButton.append("text")
-				  .attr("y",20)
-				  .attr("x",60)
-				  .text("Play Workflow")
-
-			  //aigner: Hide playbutton if there is no workflow process
-			  if(self.graph.nodesByStep.length<1)
-			  {
-				  playButton.attr("visibility","hidden")
-			  }
-			  playButton.append("svg:title").text("Click to play workflow");
-			};
-
-			Xdsm.prototype._createTextGroup = function(kind) {
-			  var self = this;
-
-			  var group = self.svg.append('g').attr("class", kind + "s");
-
-			  var textGroups =
-				group.selectAll("." + kind)
-				  .data(this.graph[kind + "s"])
-				.enter()
-				  .append("g").attr("class", function(d) {
-					var klass = kind === "node" ? d.type : "dataInter";
-					if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
-					  klass = "dataIO";
-					}
-					return d.id + " " + kind + " " + klass;
-				  }).each(function() {
-					var labelize = Labelizer.labelize().ellipsis(5);
-					d3.select(this).call(labelize);
-				  });
-
-			  d3.selectAll(".ellipsized")
-				.on("mouseover", function(d) {
-					d3.select(this).style("cursor", "pointer")
-					self.tooltip.transition().duration(200).style("opacity", 0.9);
-					var pipeData = d.name.split(",");
-					var pipeVariables=[];
-					for (var i=0; i<pipeData.length; i++)
-					{
-						if (pipeData[i].includes("/"))
-						{
-							var splitPipeData = pipeData[i].split("/");
-							pipeVariables.push(splitPipeData[splitPipeData.length-1]);
-						}
-					}
-					
-
-					var pruned_pipeVars = {};
-					var tooltipText="";
-					pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
-					for(var keyName in pruned_pipeVars) {
-						var textTmp;
-						var value = pruned_pipeVars[keyName]
-						if (value>1){textTmp = String(keyName+"("+value+")")}
-						else{textTmp=String(keyName)}
-						if (tooltipText==""){tooltipText+=textTmp}
-						else{tooltipText+=","+textTmp}
-					}
-					
-					var tooltipize = Labelizer.tooltipize().text(tooltipText);
-					self.tooltip.call(tooltipize)
-					  .style("width", "200px")
-					  .style("left", (d3.event.pageX) + "px")
-					  .style("top", (d3.event.pageY - 28) + "px");
-				})
-				.on("mouseout", function() {
-					self.tooltip.transition().duration(500).style("opacity", 0);
-				});
-
-			  return textGroups;
-			};
-
-			Xdsm.prototype._createWorkflow = function() {
-			  //  console.log(JSON.stringify(this.graph.chains));
-			  var workflow = this.svg.insert("g", ":first-child")
-								.attr("class", "workflow");
-			  workflow.selectAll("g")
-				.data(this.graph.chains)
-			  .enter()
-				.insert('g').attr("class", "workflow-chain")
-				.selectAll('polyline')
-				  .data(function(d) { return d; })  // eslint-disable-line brace-style
-				.enter()
-				  .append("polyline")
-					.attr("class", function(d) {
-					  return "link_" + d[0] + "_" + d[1];
-					})
-					.attr("points", function(d) {
-					  var w = CELL_W * Math.abs(d[0] - d[1]);
-					  var h = CELL_H * Math.abs(d[0] - d[1]);
-					  var points = [];
-					  if (d[0] < d[1]) {
-						if (d[0] !== 0) {
-						  points.push((-w) + ",0");
-						}
-						points.push("0,0");
-						if (d[1] !== 0) {
-						  points.push("0," + h);
-						}
-					  } else {
-						if (d[0] !== 0) {
-						  points.push(w + ",0");
-						}
-						points.push("0,0");
-						if (d[1] !== 0) {
-						  points.push("0," + (-h));
-						}
-					  }
-					  return points.join(" ");
-					})
-				  .attr("transform", function(d) {
-					var max = Math.max(d[0], d[1]);
-					var min = Math.min(d[0], d[1]);
-					var w;
-					var h;
-					if (d[0] < d[1]) {
-					  w = CELL_W * max + X_ORIG;
-					  h = CELL_H * min + Y_ORIG;
-					} else {
-					  w = CELL_W * min + X_ORIG;
-					  h = CELL_H * max + Y_ORIG;
-					}
-					return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-				  });
-			};
-
-			Xdsm.prototype._createDataflow = function(edges) {
-			  var dataflow = this.svg.insert("g", ":first-child")
-							   .attr("class", "dataflow");
-
-			  edges.each(function(d, i) {
-				dataflow.insert("polyline", ":first-child")
-				  .attr("points", function() {
-					var w = CELL_W * Math.abs(d.col - d.row);
-					var h = CELL_H * Math.abs(d.col - d.row);
-					var points = [];
-					if (d.iotype === "in") {
-					  if (!d.io.fromU) {
-						points.push((-w) + ",0");
-					  }
-					  points.push("0,0");
-					  if (!d.io.toU) {
-						points.push("0," + h);
-					  }
-					} else {
-					  if (!d.io.fromU) {
-						points.push(w + ",0");
-					  }
-					  points.push("0,0");
-					  if (!d.io.toU) {
-						points.push("0," + (-h));
-					  }
-					}
-					return points.join(" ");
-				  }).attr("transform", function() {
-					var m = (d.col === undefined) ? i : d.col;
-					var n = (d.row === undefined) ? i : d.row;
-					var w = CELL_W * m + X_ORIG;
-					var h = CELL_H * n + Y_ORIG;
-					return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-				  });
-			  });
-			};
-
-			Xdsm.prototype._layoutText = function(items) {
-			  var grid = this.grid;
-			  items.each(function(d, i) {
-				var item = d3.select(this);
-				if (grid[i] === undefined) {
-				  grid[i] = new Array(items.length);
-				}
-				item.select("text").each(function(d, j) {
-				  var that = d3.select(this);
-				  var data = item.data()[0];
-				  var m = (data.row === undefined) ? i : data.row;
-				  var n = (data.col === undefined) ? i : data.col;
-				  var bbox = that.nodes()[j].getBBox();
-				  grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
-				  that.attr("x", function() {
-					return grid[m][n].x;
-				  }).attr("y", function() {
-					return grid[m][n].y;
-				  }).attr("width", function() {
-					return grid[m][n].width;
-				  }).attr("height", function() {
-					return grid[m][n].height;
-				  });
-				});
-			  });
-
-			  items.attr("transform", function(d, i) {
-				var m = (d.col === undefined) ? i : d.col;
-				var n = (d.row === undefined) ? i : d.row;
-				var w = CELL_W * m + X_ORIG;
-				var h = CELL_H * n + Y_ORIG;
-				return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-			  });
-			};
-
-			Xdsm.prototype._customRect = function(node, d, i, offset) {
-			  var grid = this.grid;
-			  node.insert("rect", ":first-child").attr("x", function() {
-				return grid[i][i].x + offset - PADDING;
-			  }).attr("y", function() {
-				return -grid[i][i].height * 2 / 3 - PADDING - offset;
-			  }).attr("width", function() {
-				return grid[i][i].width + (PADDING * 2);
-			  }).attr("height", function() {
-				return grid[i][i].height + (PADDING * 2);
-			  }).attr("rx", function() {
-				var rounded = d.type === 'optimization' ||
-							  d.type === 'mda' ||
-							  d.type === 'doe' ||
-							  d.type === 'converger';
-				return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
-			  }).attr("ry", function() {
-				var rounded = d.type === 'optimization' ||
-							  d.type === 'mda' ||
-							  d.type === 'doe' ||
-							  d.type === 'converger';
-				return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
-			  });
-			};
-
-			Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
-			  var grid = this.grid;
-			  edge.insert("polygon", ":first-child").attr("points", function(d) {
-				var pad = 5;
-				var w = grid[d.row][d.col].width;
-				var h = grid[d.row][d.col].height;
-				var topleft = (-pad - w / 2 + offset) + ", " +
-							  (-pad - h * 2 / 3 - offset);
-				var topright = (w / 2 + pad + offset + 5) + ", " +
-							   (-pad - h * 2 / 3 - offset);
-				var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
-							   (pad + h / 3 - offset);
-				var botleft = (-pad - w / 2 + offset - 5) + ", " +
-							  (pad + h / 3 - offset);
-				var tpz = [topleft, topright, botright, botleft].join(" ");
-				return tpz;
-			  });
-			};
-
-			module.exports = Xdsm;
-
-			},{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
-			/*
-			 * XDSMjs
-			 * Copyright 2016 Rémi Lafage
-			 */
-			"use strict";
-
-
-
-
-			var d3 = require('d3');
-			var Graph = require('./src/graph');
-			var Xdsm = require('./src/xdsm');
-			var Animation = require('./src/animation');
-
-
-			//aigner: NEW!
-			//#####################################################################//
-			//aigner: functions for drawing expand- and collapse-symbols
-			function drawExpandSymbol(aCircle, line1, line2)
-			{        
-				 aCircle = aCircle
-					.attr("r", 10)
-					.style("stroke", "black")
-					.style("stroke-width", 2)
-					.style("fill", "#99CC00")
-					.style("fill-opacity", .6)
-				line1 = line1
-					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
-					.attr("y1", parseFloat(aCircle.attr("cy")))
-					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
-					.attr("y2", parseFloat(aCircle.attr("cy")))
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-				line2 = line2
-					.attr("x1", parseFloat(aCircle.attr("cx")))
-					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
-					.attr("x2", parseFloat(aCircle.attr("cx")))
-					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-			}
-			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
-			{        
-				 var xOffset=150;
-				 var yOffset=12;
-				 aCircle = aCircle
-					.attr("cx", anXdsm.svg.attr("width")-xOffset)
-					.attr("cy", yOffset)
-					.attr("r", 10)
-					.classed("remCircle",true)
-				aMinus = aMinus
-					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
-					.attr("y1", yOffset)
-					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
-					.attr("y2", yOffset)
-					.classed("remMinus",true)
-			}
-			function drawTreeRemoveSymbol(aRemoveSymbol)
-			{
-				aRemoveSymbol = aRemoveSymbol
-					.attr("class", "treeRemoveSymbol")
-					.attr("transform", "translate(38,12)")
-				var circle = aRemoveSymbol.append("circle");
-				var minus = aRemoveSymbol.append("line");
-				var cx = -20;
-				var cy = 12;
-				circle = circle
-					.attr("cx", cx+5)
-					.attr("cy", cy)
-					.attr("r", 10)
-					.classed("remCircle",true)
-				minus = minus
-					.attr("x1", cx)
-					.attr("y1", cy)
-					.attr("x2", cx+10)
-					.attr("y2", cy)
-					.classed("remMinus",true)
-				aRemoveSymbol
-					.on("mouseover", function(){
-						d3.select(this).style("cursor", "pointer")
-						circle.style("fill", "red").style("fill-opacity", .8);
-						})
-					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-			}
-
-			//aigner: Update of the sub workflows
-			function update_subXdsm(xdsms, refName)
-			{
-				var playButton = d3.select(".xdsm").select("."+refName).select(".playButton");
-				var rect = playButton.select(".playButton_rect");
-				playButton.on("mouseover",function(){
-						d3.select(this).style("cursor", "pointer")
-						rect.style("fill","#3399FF");
-					})
-					.on("mousedown", function()
-					{
-						rect.style("fill","#3399FF");
-						var anim = new Animation(xdsms, refName);
-						anim.run();
-					})
-					.on("mouseup", function(){rect.style("fill","#4B4B4B");})
-					.on("mouseout", function(){rect.style("fill","#555555");})
-			}
-			//d3-context-menu for right-click-option
-			d3.contextMenu = function (menu, openCallback) {
-
-				// create the div element that will hold the context menu
-				d3.selectAll('.d3-context-menu').data([1])
-					.enter()
-					.append('div')
-					.attr('class', 'd3-context-menu');
-
-				// close menu
-				d3.select('body').on('click.d3-context-menu', function() {
-					d3.select('.d3-context-menu').style('display', 'none');
-				});
-
-				// this gets executed when a contextmenu event occurs
-				return function(data, index) {	
-					var elm = this;
-
-					d3.selectAll('.d3-context-menu').html('');
-					var list = d3.selectAll('.d3-context-menu').append('ul');
-						list.selectAll('li').data(menu).enter()
-						.append('li')
-						.html(function(d) {
-							return d.title;
-						})
-						.on('mousedown', function(d, i) {
-							d.onMouseDown(elm, data, index);
-						})
-						.on('mouseup', function(d, i) {
-							d.onMouseUp(elm, data, index);
-							d3.select('.d3-context-menu').style('display', 'none');
-						})
-						.on('mouseenter',function(d,i){
-							d.onMouseOver(elm,data,index);
-							if(d.childrenItems.length>0 )
-								 {
-								  d3.select(this).selectAll("ul").remove(); 
-								  d3.select(this)
-									.append("ul")
-									.selectAll("li")
-									   .data(d.childrenItems)
-										.enter().append("li")
-										  .text(function(d) { return d.title; })
-									 .on("mouseenter", function(d,i){
-											d.onMouseOver(elm,data,index);
-										})
-									 .on('click',  function(d, i) {
-											d.onMouseClick(elm, d, index);
-										})
-									 .on('mouseleave',function(d,i){
-										
-										});
-								 }
-							 else
-								 return false;
-						})
-						.on('mouseleave',function(d,i){
-							d3.select(this).selectAll("ul").style('display', 'none')                  
-						});
-					
-					  
-
-					// the openCallback allows an action to fire before the menu is displayed
-					// an example usage would be closing a tooltip
-					if (openCallback) openCallback(data, index);
-
-					// display context menu
-					d3.select('.d3-context-menu')
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style('display', 'block');
-
-					d3.event.preventDefault();
-				};
-			};
-			//aigner: Move to front function
-			d3.selection.prototype.moveToFront = function() {  
-			  return this.each(function(){
-				this.parentNode.appendChild(this);
-			  });
-			};
-			//aigner: Include function
-			function include(arr,obj) {
-					return (arr.indexOf(obj) != -1);
-			}
-
-			//aigner: Function creates a table
-			function tabulate(aTable,data,columns) {
-				var thead = aTable.append('thead');
-				var	tbody = aTable.append('tbody');  
-
-				// create a row for each object in the data
-				var rows = tbody.selectAll('tr')
-				  .data(data)
-				  .enter()
-				  .append('tr');
-
-				// create a cell in each row for each column
-				var cells = rows.selectAll('td')
-				  .data(function (row) {
-					return columns.map(function (column) {
-					  return {column: column, value: row[column]};
-					});
-				  })
-				  .enter()
-				  .append('td')
-					.html(function (d) { return d.value; });
-
-				return aTable;
-			}
-
-			function loader(config) {
-			  return function() {
-				var radius = Math.min(config.width, config.height) / 2;
-				var tau = 2 * Math.PI;
-
-				var arc = d3.svg.arc()
-						.innerRadius(radius*0.5)
-						.outerRadius(radius*0.9)
-						.startAngle(0);
-
-				var svg = d3.select(config.container).append("svg")
-					.attr("id", config.id)
-					.attr("width", config.width)
-					.attr("height", config.height)
-				  .append("g")
-					.attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")")
-
-				var background = svg.append("path")
-						.datum({endAngle: 0.33*tau})
-						.style("fill", "#4D4D4D")
-						.attr("d", arc)
-						.call(spin, 1500)
-
-				function spin(selection, duration) {
-					selection.transition()
-						.ease("linear")
-						.duration(duration)
-						.attrTween("transform", function() {
-							return d3.interpolateString("rotate(0)", "rotate(360)");
-						});
-
-					setTimeout(function() { spin(selection, duration); }, duration);
-				}
-
-				function transitionFunction(path) {
-					path.transition()
-						.duration(7500)
-						.attrTween("stroke-dasharray", tweenDash)
-						.each("end", function() { d3.select(this).call(transition); });
-				}
-
-			  };
-			}
-
-
-			var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
-			
-			//aigner: NEW!
-			//aigner: Here, the data is read and the XDSM is created
-			//#####################################################################//
-			function startXDSM(data, graphID) 
-			{				
-				var graphs, currentGraph, varCategories, entireData;
-				
-				entireData = data;
-				graphs =  entireData.graphs;
-				for (var i=0;i<graphs.length;i++)
-				{
-					if (graphs[i].id==graphID)
-					{
-						currentGraph = graphs[i]
-					}
-				}
-				
-				varCategories =  entireData.categories;
-				
-				//aigner: Get xdsm data
-				var mdo = currentGraph.xdsm;
-				
-				d3.select("body").append("div").attr("class","xdsmDiv")	
-				//################################################################################################//	
-				var headerDiv = d3.select(".xdsmDiv").append("div").attr("class","panel panel-primary")
-				headerDiv.append("div").attr("class","panel-heading text-center")
-					.append("h3")
-					.attr("class","panel-title")
-					.style("font-family","Arial")
-					.style("font-size","20pt")
-					.text("XDSM View")
-				var name_tmp="";
-				if (currentGraph.name){name_tmp=currentGraph.name}
-				else{name_tmp="Graph " + currentGraph.id}
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph name: " + name_tmp)
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph description: " + currentGraph.description)
-				//################################################################################################//	
-				
-				
-				//aigner: Data Model Expand Button
-				//##########################################################
-				var dataModelDiv = d3.select(".xdsmDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
-				var ul = dataModelDiv.append("ul")
-				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
-				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
-					.attr("align","left")
-					.style("margin-left","6px")
-					.style("margin-right","-10px")
-					.style("margin-top","10px")
-					.style("margin-bottom","0px")
-					.attr("height","20")
-					.attr("width","20")
-				dropdown1.append("a").text("Data Model")
-				var links = dropdown1.append("ul");
-				for (var j=0; j< varCategories.length; j++)
-				{
-					//console.log(varCategories[j])
-					var linkLi = links.append("li");
-					var linkA = linkLi.append("a")
-						.attr("id",j)
-						.text(varCategories[j].description)
-						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-						.on("click", function()
-						{		
-							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
-						})
-				}
-				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
-				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
-				//##########################################################
-				
-				//aigner: Tree option menu to select which kind of tree view the user wants to see
-				//#####################################################################//
-				var emptyArray;
-				function showFullTree(aCategory,categoryDescr)
-				{
-					//expandSymbolDiv.remove();
-					var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv")
-													.style("left",(d3.event.pageX) + "px")
-													.style("top",(d3.event.pageY - 28) + "px")
-													.style("position", "absolute")
-					var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-					var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-					var name = "Full data model tree view " + "; Categorization: " + categoryDescr;
-					maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aCategory);
-					//Remove Symbol is created
-					var removeSymbol = treeLayout.append("g");
-					drawTreeRemoveSymbol(removeSymbol);
-					removeSymbol.on("mousedown", function(d)
-					{
-						treeLayoutdiv.remove();
-					})
-				}
-				
-				var childrenItems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					childrenItems.push({title: 'according to ' + varCategories[j].description,
-								   varCategory: varCategories[j].name,
-								   description: varCategories[j].description,
-								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
-								   onMouseOver: function(elm,d,i){}})
-				}
-				var treeOptionMenu = [
-				{
-					title: 'Show variable tree...',
-					onMouseDown: function(elm, d, i) {
-					},
-					onMouseUp: function(elm, d, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: childrenItems
-				}
-				]
-				//#####################################################################//
-				
-
-				//create the xdsm div
-				d3.select(".xdsmDiv").append("div").attr("class","xdsm");
-				//create tooltip
-				var tooltip = d3.select(".xdsmDiv").selectAll(".tooltip").data(['tooltip'])
-							  .enter().append("div")
-							.attr("class", "tooltip")
-							.style("opacity", 0);
-
-				var scenarioKeys = Object.keys(mdo).sort();
-				var xdsms = {};
-				
-				//If there is only one MDO and it is not named root, then it is created
-				if (scenarioKeys.indexOf('root') === -1) 
-				{
-					var scenarioKeys_tmp = [];
-					scenarioKeys_tmp.push('root');
-					scenarioKeys = scenarioKeys_tmp;
-					var mdo_tmp={};
-					mdo_tmp['root']=mdo;
-					mdo = mdo_tmp;
-				} 		
-				// new format managing several XDSM
-				var index = scenarioKeys.indexOf('root');
-				if (index > -1) 
-				{
-					scenarioKeys.splice(index, 1);
-				}
-				scenarioKeys.unshift('root');
-
-				var xdsm;
-				scenarioKeys.forEach(function(k) 
-				{
-					if (mdo.hasOwnProperty(k) && k =="root") 
-					{
-						//aigner: Here the graphs are created
-						var graph = new Graph(mdo[k], k);
-						//aigner: Here the xdsms are drawn
-						xdsms[k] = new Xdsm(graph, k, tooltip);
-						xdsms[k].draw(currentGraph.name);
-						xdsm = xdsms[k];
-						update_subXdsm(xdsms, k);
-						prepareTreeLayout(xdsms, k);
-					}
-				}, this)
-				
-					
-				xdsm.svg.selectAll(".node")
-				.each(function(d) 
-				{		
-					var gNode = this;
-					var d3gNode = d3.select(gNode);
-					
-					//aigner: Creation of input/output tree
-					//############################################################
-					function showIOTree(aCategory, categoryDescr, k, io)
-					{
-						var edges = d3.selectAll(".edge");
-						var array="";
-						var name;
-						edges.each(function(d)
-						{			
-							if (io=="in")
-							{
-								name = "Input tree view: " + k.id + "; Categorization: " + categoryDescr;
-								if (d.to == k.id)
-								{
-									array = array + ", " + d.name;
-								}
-							}
-							else if (io=="out")
-							{
-								name = "Output tree view:" + k.id + "; Categorization: " + categoryDescr;
-								if (d.from == k.id)
-								{
-									array = array + ", " + d.name;
-								}
-							}
-						})
-						var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_input_"+k.id)
-														.style("left",(d3.event.pageX) + "px")
-														.style("top",(d3.event.pageY - 28) + "px")
-														.style("position", "absolute")
-						var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-						var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-						maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aCategory);
-						//Remove Symbol is created
-						var removeSymbol = treeLayout.append("g");
-						drawTreeRemoveSymbol(removeSymbol);
-						removeSymbol.on("mousedown", function(d)
-						{
-							treeLayoutdiv.remove();
-						})
-					}
-					//############################################################
-					
-					var inputChildrenitems = [];
-					var outputChildrenitems = [];
-					for (var j=0; j< varCategories.length; j++)
-					{
-						inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,d,"in")},
-												 onMouseOver: function(elm,data,i){}});
-						outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,d,"out")},
-												 onMouseOver: function(elm,data,i){}});
-					}
-					
-					
-					function showToolTable(aTool)
-					{						
-						var toolTableDiv = d3.select(".xdsmDiv").append("div").attr("class","toolTableDiv")
-							.style('left', (d3.event.pageX - 2) + 'px')
-							.style('top', (d3.event.pageY - 2) + 'px')
-							.style("position", "absolute")
-							.on("mouseover", function(){d3.select(this).style("cursor", "grab")})
-						var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
-						
-						//Drag Function for variable table
-						var xPos_init = d3.event.pageX - 2;
-						var yPos_init = d3.event.pageY - 2;
-						var xOffset_tmp;
-						var yOffset_tmp;
-						var drag = toolTableDiv.call(d3.drag()
-							.on("start", dragstarted)
-							.on("drag", dragged)
-							.on("end", dragended));
-						function dragstarted() {
-						  d3.select(this).style("cursor", "grabbing")
-						  d3.select(this).raise().classed("active", true);
-						  xOffset_tmp = xPos_init-d3.event.x;
-						  yOffset_tmp = yPos_init-d3.event.y;
-						}
-						function dragged() {
-							 d3.select(this).classed("active", false)
-								.style("left",(d3.event.x+xOffset_tmp) + "px")
-								.style("top",(d3.event.y+yOffset_tmp) + "px")
-						}
-						function dragended() {
-						  d3.select(this).style("cursor", "grab")
-						  d3.select(this).classed("active", false);
-						  xPos_init = d3.event.x+xOffset_tmp;
-						  yPos_init = d3.event.y+yOffset_tmp;
-						}
-						
-						var aToolNameSplit = aTool.name.split(': ')			
-						var headLine;
-						if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
-						else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
-
-						var tabRemoveSVG = toolTableGroup.append("svg")
-							.attr("width",800)
-							.attr("height",26)
-						var tabRemoveRect = tabRemoveSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var tabRemoveSymbol = tabRemoveSVG.append("g");
-						tabRemoveSymbol = tabRemoveSymbol
-							.attr("class", "tabRemoveSymbol")
-							.attr("transform", "translate(26,0)")
-						var circle = tabRemoveSymbol.append("circle")
-							.classed("remCircle",true)
-						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-						var cx = -20;
-						var cy = 12;
-						circle = circle
-							.attr("cx", cx+5)
-							.attr("cy", cy)
-							.attr("r", 10)
-						minus = minus
-							.attr("x1", cx)
-							.attr("y1", cy)
-							.attr("x2", cx+10)
-							.attr("y2", cy)
-							
-						tabRemoveSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(headLine);
-						
-						tabRemoveSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")
-								circle.style("fill", "red").style("fill-opacity", .8);
-								})
-							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-							.on("mousedown", function(d)
-							{
-								toolTableDiv.remove();
-							})
-						
-					
-						var data = [];
-						// render the table(s)
-						if (aTool.metadata.length==0)
-						{
-							data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
-						}
-						function findSubMetaData(aMetaData)
-						{
-							for(var key in aMetaData)
-							{
-								if (typeof aMetaData[key] === 'object')
-								{
-									data.push({ "name" : key, "value" : ''}) ;
-									findSubMetaData(aMetaData[key]);
-								}
-								else
-								{
-									data.push({ "name" : key, "value" : aMetaData[key] })
-								}
-							}
-						}
-						for (var j=0; j < aTool.metadata.length;j++)
-						{
-							var metaData = aTool.metadata[j];
-							findSubMetaData(metaData);						
-						}
-						var table = toolTableGroup.append('table');
-						tabulate(table,data,['name', 'value']); // 2 column table
-					}
-					
-					//menu --> functions for right click options
-					var toolMenu = [
-					{
-						title: 'Show competence info',
-						onMouseDown: function(elm, k, i) {
-							showToolTable(k);
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Show input variable tree...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: inputChildrenitems
-					},
-					{
-						title: 'Show output variable tree...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: outputChildrenitems
-					}
-					]
-					
-					scenarioKeys.forEach(function(k)
-					{
-						if (k == d.xdsm)
-						{
-							var cx, cy;
-							for (var j=0; j < gNode.childNodes.length; j++)
-							{
-								if(gNode.childNodes[j].nodeName != "text")
-								{
-									cx = gNode.childNodes[j].getAttribute("width")/2-13;
-									cy = -gNode.childNodes[j].getAttribute("height")/2+8;
-								}
-							}
-							//Expand Symbol is created
-							var expandSymbol = d3.select(gNode).append("g").attr("class", "expandSymbol");
-							var circle = expandSymbol.append("circle")
-								.attr("cx", cx)
-								.attr("cy", cy);
-							var line1 = expandSymbol.append("line");
-							var line2 = expandSymbol.append("line");
-							drawExpandSymbol( circle, line1,line2);
-							expandSymbol = expandSymbol
-							.on("mouseover", function(){circle.style("fill-opacity", .8);})
-							.on("mouseout", function(){circle.style("fill-opacity", .6)})
-							
-							//TODO - aigner: on mouseover there should be a text box telling the options
-							d3gNode = d3gNode
-							.on("click", function()
-							{
-								//On mousedown, additional sub-workflows will be visualized
-								var createNew = true;
-								if(xdsms[k]){createNew=false;}                    
-								if (createNew == true)
-								{
-									var graph = new Graph(mdo[k], k);
-									xdsms[k] = new Xdsm(graph, k, tooltip);
-									xdsms[k].draw(currentGraph.name);
-									update_subXdsm(xdsms, k);
-									prepareTreeLayout(xdsms, k);
-									//Remove Symbol is created
-									var removeSymbol = xdsms[k].svg.append("g")
-										.attr("class", "removeSymbol");
-									var circle = removeSymbol.append("circle");
-									var minus = removeSymbol.append("line");
-									drawRemoveSymbol(xdsms[k], circle, minus);
-									//Clicking on remove symbol will remove sub-workflow
-									removeSymbol.append("svg:title").text("Click right to inspect");
-									removeSymbol = removeSymbol
-									.on("mouseover", function(){
-										circle.style("fill", "red").style("fill-opacity", .8);})
-									.on("mouseout", function(){
-										circle.style("fill", "red").style("fill-opacity", .6)})
-									.on("mousedown", function(){circle.style("fill", "darkred").style("fill-opacity",1);})
-									.on("mouseup", function(d)
-									{
-										xdsms[k].svg.remove();
-										d3.select(".treeDiv"+k).remove();
-										delete xdsms[k];
-									})
-									
-									xdsms[k].svg.selectAll(".node")
-										.each(function(d) 
-										{		
-											var gNode = this;
-											d3.select(gNode).on('contextmenu', d3.contextMenu(toolMenu));
-										})
-								}
-							})
-						}
-					})
-					d3gNode.append("svg:title").text("Click right to inspect");
-					d3gNode = d3gNode.on('mouseover', function(){d3.select(this).style("cursor", "pointer")})
-					d3gNode = d3gNode.on('contextmenu', d3.contextMenu(toolMenu))
-				})	
-				
-				
-				function prune_tree(parentXPath, objArray, xPathList) 
-				{ 
-					var firstElement = "/"+xPathList.split("/")[1]+"/";
-					for (var i = 0; i < objArray.length; ++i) 
-					{
-						var obj = objArray[i];
-						var objXPath;
-						
-						//aigner: If object has children append a "/" as xPath separator
-						//else append comma as indicator for last element in the xPath
-						if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-						else{objXPath =  parentXPath+objArray[i].name;}
-						var objXPathFromFirst = objXPath.split(firstElement);
-						
-						// console.log("Current node ->")
-						// console.log(firstElement+objXPathFromFirst[1])
-						// console.log(xPathList)
-												
-						var delete_it = true;
-						if(objXPathFromFirst[1]==undefined)
-						{
-							delete_it = false;
-						}
-						else
-						{
-							if (include(xPathList, firstElement+objXPathFromFirst[1]))
-							{
-								delete_it = false;
-							}
-						}
-						if (delete_it==true)
-						{
-							// console.log("delete ->")
-							// console.log( objXPathFromFirst[1])
-							// console.log(xPathList)
-							
-							objArray.splice(i, 1);
-							i--;
-						}
-						else
-						{
-							// console.log("do not delete ->")
-							// console.log(objXPath);
-							if (obj.children)
-							{
-								if (obj.children.length==0)
-								{
-									objArray.splice(i, 1);
-									i--;
-									prune_tree(parentXPath, objArray, xPathList)
-								}
-								else{prune_tree(objXPath, obj.children, xPathList);}
-								
-							}
-						}
-					}
-				}
-				function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
-				{ 
-					var firstElement = "/"+xPathList.split("/")[1]+"/";
-					for (var i = 0; i < objArray.length; ++i) 
-					{
-						var obj = objArray[i];
-						var objXPath;
-						
-						//aigner: If object has children append a "/" as xPath separator
-						//else append comma as indicator for last element in the xPath
-						if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-						else{objXPath =  parentXPath+objArray[i].name;}
-						var objXPathFromFirst = objXPath.split(firstElement);
-						
-						// console.log("Current node ->")
-						// console.log(firstElement+objXPathFromFirst[1])
-						// console.log(xPathList)
-												
-						var delete_it = true;
-						if(objXPathFromFirst[1]==undefined)
-						{
-							delete_it = false;
-						}
-						else
-						{
-							if (include(xPathList, firstElement+objXPathFromFirst[1]))
-							{
-								delete_it = false;
-							}
-						}
-						if (delete_it==true)
-						{
-							// console.log("delete ->")
-							// console.log( objXPathFromFirst[1])
-							// console.log(xPathList)
-							
-							objArray.splice(i, 1);
-							i--;
-						}
-						else
-						{
-							// console.log("do not delete ->")
-							// console.log(objXPath);
-							if (obj.children)
-							{
-								if (obj.children.length==0)
-								{
-									objArray.splice(i, 1);
-									i--;
-									getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
-								}
-								else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
-							}
-							else 
-							{
-								obj.xPath = objXPath;
-								leafNodes.push(obj);
-							};
-						}
-					}
-				}
-				function clean_tree(objArray)
-				{
-					for (var i = 0; i < objArray.length; ++i) 
-					{
-						var obj = objArray[i];
-						if (obj.children)
-						{
-							if (obj.children.length==0)
-							{
-								objArray.splice(i, 1);
-								i--;
-							}
-							clean_tree(obj.children);
-						}
-					}
-				}
-				function countElements(node, counter) 
-				{
-					counter ++;
-					if (node.children)
-					{
-						if (node.children.length !== 0)
-						{
-							node.children.forEach(function(n)
-							{
-								counter = countElements(n, counter);
-							});
-						}
-					}
-					return counter;
-				}
-				
-				function prepareTreeLayout(xdsms, refName)
-				{			
-					function showEdgeTree(data,aVarCategory,categoryDescr)
-					{
-						//aigner:Split the pipeLineData at the comma separator
-						var array = data.name.split(',')
-						//aigner:Append a comma to all xPath to indicate the end of the xPath
-						for(var i=0;i<array.length;i++){
-							array[i]=array[i]+",";
-						}
-						var treeLayout;
-						var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_"+data.from+"_"+data.to)
-												.style("left",(d3.event.pageX) + "px")
-												.style("top",(d3.event.pageY - 28) + "px")
-												.style("position", "absolute")
-						var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-							
-						treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-						var name = "Tree view: " + data.from + "  →  " + data.to + "; Categorization: " + categoryDescr;
-						//aigner: tree layout is done	
-						maketreeLayout(data.name, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aVarCategory);
-						//Remove Symbol is created
-						var removeSymbol = treeLayout.append("g");
-						drawTreeRemoveSymbol(removeSymbol);
-						removeSymbol.on("mousedown", function(d)
-						{
-							treeLayoutdiv.remove();
-						})		
-						
-					}
-					
-					function showEdgeTable(anEdge)
-					{						
-						var edgeTableDiv = d3.select(".xdsmDiv").append("div").attr("class","edgeTableDiv")
-							.style('left', (d3.event.pageX - 2) + 'px')
-							.style('top', (d3.event.pageY - 2) + 'px')
-							.style("position", "absolute")
-							.on("mouseover", function(){d3.select(this).style("cursor", "grab")})
-						var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
-						
-						//Drag Function for edge table
-						var xPos_init = d3.event.pageX - 2;
-						var yPos_init = d3.event.pageY - 2;
-						var xOffset_tmp;
-						var yOffset_tmp;
-						var drag = edgeTableDiv.call(d3.drag()
-							.on("start", dragstarted)
-							.on("drag", dragged)
-							.on("end", dragended));
-						function dragstarted() {
-						  d3.select(this).style("cursor", "grabbing")
-						  d3.select(this).raise().classed("active", true);
-						  xOffset_tmp = xPos_init-d3.event.x;
-						  yOffset_tmp = yPos_init-d3.event.y;
-						}
-						function dragged() {
-							 d3.select(this).classed("active", false)
-								.style("left",(d3.event.x+xOffset_tmp) + "px")
-								.style("top",(d3.event.y+yOffset_tmp) + "px")
-						}
-						function dragended() {
-						  d3.select(this).style("cursor", "grab")
-						  d3.select(this).classed("active", false);
-						  xPos_init = d3.event.x+xOffset_tmp;
-						  yPos_init = d3.event.y+yOffset_tmp;
-						}
-						
-						var headLine = "Edge Information (" + anEdge.from + " - " + anEdge.to + ")";
-
-						var tabRemoveSVG = edgeTableGroup.append("svg")
-							.attr("width",String(headLine.length*12+"pt"))
-							.attr("height",26)
-						tabRemoveSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var tabRemoveSymbol = tabRemoveSVG.append("g");
-						tabRemoveSymbol = tabRemoveSymbol
-							.attr("class", "tabRemoveSymbol")
-							.attr("transform", "translate(26,0)")
-						var circle = tabRemoveSymbol.append("circle")
-							.classed("remCircle",true)
-						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-						var cx = -20;
-						var cy = 12;
-						circle = circle
-							.attr("cx", cx+5)
-							.attr("cy", cy)
-							.attr("r", 10)
-						minus = minus
-							.attr("x1", cx)
-							.attr("y1", cy)
-							.attr("x2", cx+10)
-							.attr("y2", cy)
-							
-						tabRemoveSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(headLine);
-						
-						tabRemoveSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")
-								circle.style("fill", "red").style("fill-opacity", .8);
-								})
-							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-						tabRemoveSymbol.on("mousedown", function(d)
-						{
-							edgeTableDiv.remove();
-						})
-									
-						var anEdgeNameSplit = anEdge.name.split(',')
-						var numberOfconnections = anEdgeNameSplit.length;
-						var theLeafNodes = [];
-						var dimension=0;
-						var nullDim=false;
-						var undefinedLeafs;
-						var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);						
-						var pipeData = anEdge.name;
-						getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
-						var undefLeafsNumber=0;
-						var defLeafsNumber=0;
-						for (var k=0;k<theLeafNodes.length;k++)
-						{
-							if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
-							else{nullDim=true}
-							if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
-							{
-								if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
-								else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
-								undefLeafsNumber ++;
-							}
-							else
-							{
-								defLeafsNumber++;
-							}
-						}
-						
-						//Render data for table
-						var data = [];
-						data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
-						data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
-						data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
-						if (undefinedLeafs)
-						{
-							data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
-						}
-						var table = edgeTableGroup.append('table');
-						tabulate(table,data,['name', 'value']); // 2 column table
-						if (undefinedLeafs)
-						{
-							var undefLeafTreeSVG = edgeTableGroup.append("svg")
-								.attr("transform", "translate(0,20)")
-								.attr("width",String(headLine.length*9.5+"pt"))
-								.attr("height",50)
-							undefLeafTreeSVG.append("rect")
-								.attr("width", "100%")
-								.attr("height", "100%")
-								.attr("fill", "white");
-							var expandSymbol = undefLeafTreeSVG.append("g")
-								.attr("class", "newExpandSymbol")
-								.attr("transform", "translate(38,12)");
-							var expandRect = expandSymbol.append("rect")
-								.attr("x",-28)
-								.attr("height", 50)
-								.attr("fill", "#555555")
-								.attr("stroke", "none")
-								.attr("stroke-width", 2)
-								.attr("fill-opacity", 1)
-							var expCircle = expandSymbol.append("circle")
-								.attr("cx", -26)
-								.attr("cy", 0);
-							var expLine1 = expandSymbol.append("line");
-							var expLine2 = expandSymbol.append("line");
-							drawExpandSymbol(expCircle,expLine1,expLine2);
-								expCircle = expCircle.attr("fill", "white");
-							expandSymbol
-								.on("mouseover", function(){
-									d3.select(this).style("cursor", "pointer")			
-									expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
-								})
-								.on("mouseout", function(){
-									expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
-								})
-							undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
-								.attr("transform", "translate(26,20)")
-								.attr("fill", "black")
-								.style("font-family", "Arial")
-								.style("font-size", "16pt")
-								.style("font-weight", "bold")
-								.text("Show unreferenced connections as tree");
-							expandSymbol.on("mousedown", function(){
-								var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_"+anEdge.from+"_"+anEdge.to)
-											.style("left",(d3.event.pageX) + "px")
-											.style("top",(d3.event.pageY + 50) + "px")
-											.style("position", "absolute")
-								var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-
-								var pipeData = anEdge.name;
-								var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-								var name = "Unref. connections tree view: " + anEdge.from + "  to  " + anEdge.to + "; Categorization: " + varCategories[0].name;
-								//aigner: tree layout is done	
-								maketreeLayout(undefinedLeafs, treeLayout, treeLayoutSVG, treeLayoutdiv, name, varCategories[0].name);
-								//Remove Symbol is created
-								var removeSymbol = treeLayout.append("g");
-								drawTreeRemoveSymbol(removeSymbol);
-								removeSymbol.on("mousedown", function(d)
-								{
-									treeLayoutdiv.remove();
-								})
-							})
-						}
-						
-					}
-					
-					xdsms[refName].svg.selectAll(".edge")
-					.each(function(d) 
-					{
-						//edgeMenu --> functions for right click options
-						var edgeChildrenItems = [];
-						for (var j=0; j< varCategories.length; j++)
-						{
-							edgeChildrenItems.push({title: 'according to ' + varCategories[j].description,
-													varCategory: varCategories[j].name,
-													description: varCategories[j].description,
-													onMouseClick: function(elm, data, i) {showEdgeTree(d,data.varCategory,data.description)},
-													onMouseOver: function(elm,data,i){}});
-						}
-						var theEdge = this;
-						var edgeMenu = [
-						{
-							title: 'Show edge info',
-							onMouseDown: function(elm, k, i) {
-								showEdgeTable(d)
-							},
-							onMouseUp: function(elm, k, i) {
-							},
-							onMouseOver: function(elm, d, i) {
-							},
-							childrenItems: []
-						},
-						{
-							title: 'Show variable tree...',
-							onMouseDown: function(elm, k, i) {
-							},
-							onMouseUp: function(elm, k, i) {
-							},
-							onMouseOver: function(elm, d, i) {
-							},
-							childrenItems: edgeChildrenItems
-						}
-						]
-						
-						var thisEdge = d3.select(this);
-						thisEdge.append("svg:title").text("Click right to inspect");
-						thisEdge.on('contextmenu', d3.contextMenu(edgeMenu))
-					})
-				}
-				
-				function maketreeLayout(pipeData, layout, svg, div, aName, aVarCategory)
-				{			
-					//aigner: here the tree layout begins
-					//Drag Function for treeLayout
-					var xPos_init = d3.event.pageX - 2;
-					var yPos_init = d3.event.pageY - 2;
-					var xOffset_tmp;
-					var yOffset_tmp;
-					var drag = div.call(d3.drag()
-						.on("start", dragstarted)
-						.on("drag", dragged)
-						.on("end", dragended));
-					function dragstarted() {
-					  d3.select(this).style("cursor", "grabbing")
-					  d3.select(this).raise().classed("active", true);
-					  xOffset_tmp = xPos_init-d3.event.x;
-					  yOffset_tmp = yPos_init-d3.event.y;
-					}
-					function dragged() {
-						 d3.select(this).classed("active", false)
-							.style("left",(d3.event.x+xOffset_tmp) + "px")
-							.style("top",(d3.event.y+yOffset_tmp) + "px")
-					}
-					function dragended() {
-					  d3.select(this).style("cursor", "grab")
-					  d3.select(this).classed("active", false);
-					  xPos_init = d3.event.x+xOffset_tmp;
-					  yPos_init = d3.event.y+yOffset_tmp;
-					}
-					createTree()
-					
-					function createTree()
-					{
-						var schema = currentGraph.variableSchemes[aVarCategory];
-						var treeData = (JSON.parse(JSON.stringify(schema)));				
-						//aigner: Here, the minimalized tree is created!
-						//Transferred variables: 
-						//1) parentXPath --> xPath until current nodes
-						//2) objArray --> Array of current nodes
-						//3) xPathList --> Array of actually used pipeLine data
-						
-						if (pipeData)
-						{
-							prune_tree("/"+treeData.name+"/", treeData.children, pipeData);
-							//aigner: count all descendants of a node
-							var firstEl = pipeData.split("/")[1];
-							if(firstEl != treeData.name)
-							{
-								var cleanOperations = countElements(treeData,0)
-								for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
-							}
-						}
-						
-						// Set the dimensions and margins of the diagram
-						var margin = {top: 20, right: 90, bottom: 20, left: 90},
-							width = 960 - margin.left - margin.right,
-							height = 500 - margin.top - margin.bottom;
-
-						// append the svg object to the body of the page
-						// appends a 'group' element to 'svg'
-						// moves the 'group' element to the top left margin
-						var offset_tmp = 60;
-						svg = svg.attr("width", width + margin.right + margin.left+offset_tmp)
-								 .attr("height", height + margin.top + margin.bottom+offset_tmp);
-						div = div.attr("width", width + margin.right + margin.left+offset_tmp)
-								 .attr("height", height + margin.top + margin.bottom+offset_tmp);
-						layout = layout
-							.attr("width", width + margin.right + margin.left)
-							.attr("height", height + margin.top + margin.bottom);
-						var name;
-						var rect = layout.append("rect")
-								.attr("class","treeFrame")
-								.attr("width", 0)
-								.attr("height", 70)
-								.attr("transform", "translate("
-								  + String(10) + "," + String(10) + ")")
-								.attr("fill", "white")
-								.attr("stroke", "darkgrey")
-								.attr("stroke-width", 0)
-								.attr("fill-opacity", 0.8)
-						//aigner: Put remove button on top of the rect
-						d3.selectAll(".treeRemoveSymbol").moveToFront();
-						
-						//aigner: Exit, if no tree data is available!
-						if (!treeData.children || treeData.children.length==0)
-						{
-							var newText = layout.append('text')
-							.attr("dx", 40)
-							.attr("dy", 55)
-							.style("font-family", "Arial")
-							.style("font-size", "32pt")
-							.style("font-weight", "bold")
-							.html(function (d) {
-								return 'No tree view available! &#8594; Please check data for consistency!';
-							});
-							
-							var newWidth;
-							rect.attr("width",  function(d) {
-								newWidth = this.parentNode.getBBox().width+20;
-								return newWidth;}) 
-							div = div.attr("width", newWidth+30)
-							svg = svg.attr("width", newWidth+30)
-							return;
-						}
-						
-						var newText = layout.append('text')
-							.attr("dx", 40)
-							.attr("dy", 30)
-							.style("font-family", "Arial")
-							.style("font-size", "12pt")
-							.style("font-weight", "bold")
-							.text(aName);
-						
-						// Calculate total nodes, max label length
-						var totalNodes = 0;
-						var maxLabelLength = 0;
-						
-						var i = 0,
-							duration = 500,
-							root;
-
-						// declares a tree layout and assigns the size
-						var treemap = d3.tree().size([height, width]);
-
-						// Assigns parent, children, height, depth
-						root = d3.hierarchy(treeData, function(d) { return d.children; });
-						root.x0 = height / 2;
-						root.y0 = 0;
-						
-						// Append a group which holds all nodes and which the zoom Listener can act upon.
-						var svgGroup_xOff = root.data.name.length*10
-						var svgGroup = layout.append("g")
-							.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
-						
-							
-						// Collapse root initially
-						collapse(root);
-						update(root);
-
-						// Collapse the node and all it's children
-						function collapse(d) {
-						  if(d.children) {
-							d._children = d.children
-							d._children.forEach(collapse)
-							d.children = null
-						  }
-						}
-						// Collapse the node and all it's children
-						function expand(d) {
-						  if(d._children) {
-							d.children = d._children
-							d.children.forEach(expand)
-							d._children = null
-						  }
-						}
-						// Toggle children on click.
-						function click(d) 
-						{
-							if (d.children) {
-								d._children = d.children;
-								d.children = null;
-							} else 
-							{
-								d.children = d._children;
-								d._children = null;
-							}
-							update(d);
-						}
-						// Collapse/expand entire tree on double-click
-						function dblclick(d) 
-						{
-							if(d.children) 
-							{
-								collapse(d);
-							}
-							else if(d._children)
-							{
-								expand(d);
-							}
-							update(d);
-						}	
-						
-						function update(source) 
-						{
-							var levelWidth = [1];
-							var getLevelWidth = function(level, n) 
-							{
-								if (n.children && n.children.length > 0) {
-									if (levelWidth.length <= level + 1) levelWidth.push(0);
-									
-									//establish maxLabelLength
-									maxLabelLength = Math.max(n.data.name.length, maxLabelLength);
-									
-									levelWidth[level + 1] += n.children.length;
-									n.children.forEach(function(d) {
-										getLevelWidth(level + 1, d);
-									});
-								}
-							};
-							getLevelWidth(0, root);
-							var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
-							//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour 
-							
-							layout = layout.attr("height", newHeight + margin.top + margin.bottom)
-							svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom)
-							treemap = treemap.size([newHeight, width]);
-							
-							
-							// Assigns the x and y position for the nodes
-							var treeData = treemap(root);
-
-							// Compute the new tree layout.
-							var nodes = treeData.descendants(),
-								links = treeData.descendants().slice(1);
-							
-							//aigner: count all descendants of a node
-							function countDescendants(node, counter) 
-							{
-								if (node._children)
-								{
-									node._children.forEach(function(n)
-									{
-										counter = countDescendants(n, counter);
-									});
-								}
-								else if (node.children)
-								{
-									node.children.forEach(function(n)
-									{
-										counter = countDescendants(n, counter);
-									});
-								}
-								else
-								{
-									counter ++;
-								}
-								return counter;
-							}
-							
-							
-							var depth_tmp = 0;
-							var labelLength = [];
-							labelLength.push(0);
-							nodes.forEach(function(d) 
-							{				
-								//aigner: If node is collapsed show number of ancestors
-								if (d._children)
-								{
-									d._childrenNum = countDescendants(d, 0);
-									d.data.text = d.data.name + " (" + d._childrenNum + ")";
-								}
-								else 
-								{
-									d.data.text = d.data.name
-								}
-								
-								//aigner: Find maximum labelLength for each level
-								if (d.depth>depth_tmp)
-								{
-									depth_tmp = d.depth;
-									labelLength.push(d.data.text.length);
-								}
-								else
-								{
-									if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);}
-								}
-							});
-							// Set widths between levels based on labelLength of each level.
-							var y_tmp = 100;		
-							var depth_tmp = 0;							
-							nodes.forEach(function(d) 
-							{
-								if (d.depth>depth_tmp)
-								{
-									depth_tmp = d.depth;
-									d.y = y_tmp+(labelLength[depth_tmp])*12+50;
-								}
-								else
-								{
-									d.y = y_tmp;
-								}
-								newWidth=d.y;
-								y_tmp = d.y;
-							});
-							
-							
-							function getTextWidth(text, font) 
-							{
-								// re-use canvas object for better performance
-								var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
-								var context = canvas.getContext("2d");
-								context.font = font;
-								var metrics = context.measureText(text);
-								return metrics.width;
-							}					
-							newWidth=Math.max(newWidth,getTextWidth(aName,"Arial 12pt"));
-							
-							//aigner: Adjust height and width of the frame
-							div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-							div = div.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
-								.on("mousedown", function(d) {
-									//d3.select(this).moveToFront();
-								})
-							svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-							svg = svg.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
-							rect = rect.attr("height", newHeight + margin.top + margin.bottom)
-							rect = rect.attr("width", newWidth + margin.top + margin.bottom+400+maxLabelLength*15)
-							
-							
-							// ****************** Nodes section ***************************
-							// Update the nodes...
-							var node = svgGroup.selectAll('g.treeNode')
-							  .data(nodes, function(d) {return d.id || (d.id = ++i); });
-							
-							var dblclick_timer = false;
-							// Enter any new modes at the parent's previous position.
-							var nodeEnter = node.enter().append('g')
-							  .attr('class', 'treeNode')
-							  .attr("transform", function(d) {
-								return "translate(" + source.y0 + "," + source.x0 + ")";
-							})
-							.on("mousedown", function(d) {
-								//prevent tree from expanding on right click!
-								if (d3.event.which != 3)
-								{
-									// if double click timer is active, this click is the double click
-									if ( dblclick_timer )
-									{
-										clearTimeout(dblclick_timer)
-										dblclick_timer = false
-										// double click code code comes here
-										//console.log("DOUBLE CLICK")
-										dblclick(d);
-									}
-									// otherwise, what to do after single click (double click has timed out)
-									else dblclick_timer = setTimeout( function(){
-										dblclick_timer = false
-										// single click code code comes here
-										//console.log("SINGLE CLICK")
-										click(d);
-									}, 250)
-								}
-								
-							})
-							
-							// Add Circle for the nodes
-							nodeEnter.append('circle')
-							  .attr('class', 'treeNode')
-							  .attr('r', 4.5)
-							  .style("fill", function(d) {
-									if (d._children)
-									{
-										if(aName.includes("Input")){return '#ea9999'}
-										else if(aName.includes("Output")){return '#d6ea99'}
-										else {return "lightsteelblue"}
-									}
-									else {return "#fff"}
-							  })
-							  .style("stroke", function(d) {
-									if(aName.includes("Input")){
-										//console.log(d);
-										return '#CC0000'}
-									else if(aName.includes("Output")){
-										//console.log(d);
-										return '#99CC00'}
-							  });
-
-							// Add labels for the nodes
-							nodeEnter.append('text')
-							  .attr('class', 'nodeText')
-							  .attr("dy", ".35em")
-							  .attr("x", function(d) {
-								  return d.children || d._children ? -13 : 13;
-							  })
-							  .attr("text-anchor", function(d) {
-								  return d.children || d._children ? "end" : "start";
-							  })
-							  //.text(function(d) { return d.data.text; });
-							  
-							  
-							// Function to download data to a file
-							function download(filename, text) {
-								var element = document.createElement('a');
-								element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
-								element.setAttribute('download', filename);
-
-								element.style.display = 'none';
-								document.body.appendChild(element);
-
-								element.click();
-
-								document.body.removeChild(element);
-							}
-							
-							//Highlight function, that shows usage of a node in the XDSM
-							function highlight(data,aText)
-							{
-								aText = "/"+data.data.name+aText;
-								if (data.parent){highlight(data.parent,aText)}
-								else
-								{
-									scenarioKeys.forEach(function(k)
-									{
-										var xdsm_tmp;
-										xdsm_tmp = xdsms[k];
-										if (xdsm_tmp)
-										{
-											xdsm_tmp.svg.selectAll(".edge").each(function(p) 
-											{
-												var firstElement_tmp = p.name.split("/")[1]
-												var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-												if (include(p.name,text_fromFirst))
-												{
-													var highlightEdge = d3.select(this).select("polygon");
-													highlightEdge
-														.style("stroke-width",5.)
-														.style("stroke","#CC0000")
-													d3.selectAll(".treeFrame")
-														.attr("fill-opacity", 0.5)
-														.attr("stroke-opacity", 0.5);
-													d3.selectAll(".nodeText").style("fill-opacity",0.5);
-												}
-											})
-										}
-									})
-								}
-							}
-							
-							//Unhighlight function again
-							function unhighlight(data,aText)
-							{
-								aText = "/"+data.data.name+aText;
-								if (data.parent){unhighlight(data.parent,aText)}
-								else
-								{
-									scenarioKeys.forEach(function(k)
-									{
-										var xdsm_tmp;
-										xdsm_tmp = xdsms[k];
-										if (xdsm_tmp)
-										{
-											xdsm_tmp.svg.selectAll(".edge").each(function(p) 
-											{
-												var firstElement_tmp = p.name.split("/")[1]
-												var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-												if (include(p.name,text_fromFirst))
-												{
-													var highlightEdge = d3.select(this).select("polygon");
-													highlightEdge
-														.style("stroke-width",1.)
-														.style("stroke","black");
-													d3.selectAll(".treeFrame")
-														.attr("fill-opacity", 0.8)
-														.attr("stroke-opacity", 0.8);
-													d3.selectAll(".nodeText").style("fill-opacity",1);
-												}
-											})
-										}
-									})
-								}
-							}							
-							  
-							
-							function showVariableTable(aVariable)
-							{						
-								var varTableDiv = d3.select(".xdsmDiv").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name)
-									.style('left', (d3.event.pageX - 2) + 'px')
-									.style('top', (d3.event.pageY - 2) + 'px')
-									.style("position", "absolute")
-									.on("mousedown", function(d) {
-										d3.select(this).moveToFront();
-									})
-								var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
-								
-								//Drag Function for variable table
-								var xPos_init = d3.event.pageX - 2;
-								var yPos_init = d3.event.pageY - 2;
-								var xOffset_tmp;
-								var yOffset_tmp;
-								var drag = varTableDiv.call(d3.drag()
-									.on("start", dragstarted)
-									.on("drag", dragged)
-									.on("end", dragended));
-								function dragstarted() {
-								  d3.select(this).raise().classed("active", true);
-								  xOffset_tmp = xPos_init-d3.event.x;
-								  yOffset_tmp = yPos_init-d3.event.y;
-								}
-								function dragged() {
-									 d3.select(this).classed("active", false)
-										.style("left",(d3.event.x+xOffset_tmp) + "px")
-										.style("top",(d3.event.y+yOffset_tmp) + "px")
-								}
-								function dragended() {
-								  d3.select(this).classed("active", false);
-								  xPos_init = d3.event.x+xOffset_tmp;
-								  yPos_init = d3.event.y+yOffset_tmp;
-								}
-								
-								var headLine = "Node Information (" + aName + ")";
-								var tabRemoveSVG = varTableGroup.append("svg")
-									.attr("width",String(headLine.length*9.5+"pt"))
-									.attr("height",26)
-								tabRemoveSVG.append("rect")
-									.attr("width", "100%")
-									.attr("height", "100%")
-									.attr("fill", "white");
-								var tabRemoveSymbol = tabRemoveSVG.append("g");
-								tabRemoveSymbol = tabRemoveSymbol
-									.attr("class", "tabRemoveSymbol")
-									.attr("transform", "translate(26,0)")
-								var circle = tabRemoveSymbol.append("circle")
-									.classed("remCircle",true)
-								var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-								var cx = -20;
-								var cy = 12;
-								circle = circle
-									.attr("cx", cx+5)
-									.attr("cy", cy)
-									.attr("r", 10)
-								minus = minus
-									.attr("x1", cx)
-									.attr("y1", cy)
-									.attr("x2", cx+10)
-									.attr("y2", cy)
-									
-								
-								tabRemoveSVG.append("text").attr("class","tabRemoveText")
-									.attr("transform", "translate(26,20)")
-									.attr("fill", "black")
-									.style("font-family", "Arial")
-									.style("font-size", "16pt")
-									.style("font-weight", "bold")
-									.text(headLine);
-								
-								
-								tabRemoveSymbol
-									.on("mouseover", function(){
-										d3.select(this).style("cursor", "pointer")
-										circle.style("fill", "red").style("fill-opacity", .8);
-										})
-									.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-								tabRemoveSymbol.on("mousedown", function(d)
-								{
-									varTableDiv.remove();
-								})
-								
-								
-								
-								var data = [];
-								// render the table(s)
-								data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" })
-								
-								function getNodeXPath(strWrapper,aNode) 
-								{
-								  strWrapper.val = "/"+aNode.data.name+strWrapper.val;
-								  if (!aNode.parent) 
-								  {
-									return strWrapper;
-								  }
-								  else 
-								  {
-									
-									return getNodeXPath(strWrapper, aNode.parent);
-								  }
-								}
-								var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
-								data.push({ "name" : "xPath", "value" : xPath_tmp })
-								if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })}
-								if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })}
-								if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })}
-								if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })}
-								else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
-								if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })}
-								var table = varTableGroup.append('table');
-								tabulate(table,data,['name', 'value']); // 2 column table
-							}
-							
-						   
-							//menu --> functions for right click options
-							var nodeMenu = [
-							{
-								title: 'Show node information',
-								onMouseDown: function(elm, d, i) {
-									showVariableTable(d);
-								},
-								onMouseUp: function(elm, d, i) {},
-								onMouseOver: function(elm, d, i) {},
-								childrenItems: []
-							},
-							{
-								title: 'Show usage of node in XDSM',
-								onMouseDown: function(elm, d, i) {
-									var theText="";
-									highlight(d,theText);
-								},
-								onMouseUp: function(elm, d, i) {
-									var theText="";
-									unhighlight(d,theText);
-								},
-								onMouseOver: function(elm, d, i) {
-								},
-								childrenItems: []
-							},
-							{
-								title: 'Copy x-path to clipboard',
-								onMouseDown: function(elm, d, i) {
-									function copyToClipboard(text) 
-									{
-										window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
-									}
-									function copyXPathToClipboard(data,aText)
-									{
-										aText = "/"+data.data.name+aText;
-										if (data.parent){copyXPathToClipboard(data.parent,aText)}
-										else{copyToClipboard(aText);}
-									}
-									var copyText="";
-									copyXPathToClipboard(d,copyText);
-									d3.select('.d3-context-menu').style('display', 'none');
-								},
-								onMouseUp: function(elm, d, i) {
-								},
-								onMouseOver: function(elm, d, i) {
-								},
-								childrenItems: []
-							},
-							{
-								title: 'Download full tree as XML-file',
-								onMouseDown: function(elm, d, i) {
-									//Begin xml structure with the first element
-									var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">";
-									//Create a new xml document
-									var parser = new DOMParser();
-									var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-									//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
-									var initialXPath = "/"+nodes[0].data.name;								
-									writeTreeToXML(nodes[0],xmlDocument,initialXPath);
-									//remove all attributes dummyID
-									removeAttributeInAllElements(xmlDocument,'dummyID');
-									//Make the xml document a string
-									var serializer = new XMLSerializer();
-									var xmlString = serializer.serializeToString(xmlDocument);
-									xmlString = vkbeautify.xml(xmlString);														
-									//Download a document with the xml-schema
-									download(aName+'_full.xml',xmlString);						
-								},
-								onMouseUp: function(elm, d, i) {
-								},
-								onMouseOver: function(elm, d, i) {
-								},
-								childrenItems: []
-							},
-							{
-								title: 'Download tree as XML-file from current node',
-								onMouseDown: function(elm, d, i) {
-									var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
-									var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
-									//Create a new xml document
-									var parser = new DOMParser();
-									var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-									//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
-									writeTreeToXML(d,xmlDocument,initialXPath);
-									//remove all attributes dummyID
-									removeAttributeInAllElements(xmlDocument,'dummyID');
-									//Make the xml document a string
-									var serializer = new XMLSerializer();
-									xmlString = serializer.serializeToString(xmlDocument);
-									xmlString = vkbeautify.xml(xmlString);														
-									//Download a document with the xml-schema
-									download(aName+"_"+d.data.name+'.xml',xmlString);						
-								},
-								onMouseUp: function(elm, d, i) {
-								},
-								onMouseOver: function(elm, d, i) {
-								},
-								childrenItems: []
-							}
-							]
-							
-							//Function writeTreeToXML goes through tree nodes and puts the into an xml document
-							function writeTreeToXML(aNode,anXMLDoc,anXPath)
-							{
-								//Variable "children" 
-								//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
-								var children;
-								if (aNode._children){children = aNode._children;}
-								else if (aNode.children){children = aNode.children;}
-								
-								//Get current xml element with its xPath
-								var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
-								if (element != null) {element.value = '...';}
-								
-								//If a node has children (collapsed or expanded), loop through them
-								if (children)
-								{
-									for (var i=0; i < children.length;i++)
-									{
-										//Name of the new XML element --> childName
-										var child = children[i];
-										var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
-										var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
-										var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
-										
-										//The children are appended to the xPath --> newXPath
-										var newXPath = anXPath+"/"+cleanChildName[0];
-										
-										//If childName contains a uID, make the uID an attribute
-										if (childName[1])
-										{
-											if (parseInt(childName[1]))
-											{
-												var dummyID = childName[1];
-												newNode.setAttribute("dummyID", dummyID)
-												newXPath = newXPath+"[@dummyID='"+dummyID+"']";
-											}
-											else
-											{
-												var uID = childName[1];
-												newNode.setAttribute("uID", uID)
-												newXPath = newXPath+"[@uID='"+uID+"']";
-											}
-										}
-										if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
-										
-										//Append the newNode to the xml structure
-										element.appendChild(newNode);
-										
-										
-										
-										////aigner: Sorting of XML elements according to "uID"
-										// var items = element.children;
-										// var itemsArr = [];
-										// for (var j in items) {
-											// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
-												// itemsArr.push(items[j]);
-											// }
-										// }
-										// itemsArr.sort(function(a,b){
-											// if (a.getAttribute("uID") < b.getAttribute("uID"))
-												// return -1;
-											// if (a.getAttribute("uID") > b.getAttribute("uID"))
-												// return 1;
-											// return 0;
-											// });
-
-										// for (j = 0; j < itemsArr.length; ++j) {
-										  // element.appendChild(itemsArr[j]);
-										// }
-										
-										//call function writeTreeToXML recursively for all children
-										writeTreeToXML(child,anXMLDoc,newXPath)
-									}
-								}
-								else
-								{
-									if (aNode.data.value){element.innerHTML = String(aNode.data.value);}
-									else{element.innerHTML = " ";}
-								}
-								//return the xml document
-								return anXMLDoc;
-							}
-							
-							function removeAttributeInAllElements(aDocument,attribute)
-							{
-							  var matchingElements = [];
-							  var allElements = aDocument.getElementsByTagName('*');
-							  for (var i = 0, n = allElements.length; i < n; i++)
-							  {
-								if (allElements[i].getAttribute(attribute) !== null)
-								{
-									allElements[i].removeAttribute(attribute);
-								}
-							  }
-							  return matchingElements;
-							}
-							
-							function putAncestorsInXMLString(strWrapper, aNode)
-							{
-								//Name of the new XML element
-								var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-								var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-								//If nodeName contains a uID, make the uID an attribute
-								if (nodeName[1])
-								{
-									var uID = nodeName[1];
-									strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-								}
-								else
-								{
-									strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-								}
-								var aParent = aNode.parent;
-								if (aParent)
-								{
-									return putAncestorsInXMLString(strWrapper, aParent);
-								}
-								else 
-								{
-									return strWrapper;
-								}
-							}
-							
-							function putAncestorsInXPath(strWrapper, aNode)
-							{
-								//Name of the new XML element
-								var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-								var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-								//If nodeName contains a uID, make the uID an attribute
-								if (nodeName[1])
-								{
-									var uID = nodeName[1];
-									strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
-								}
-								else
-								{
-									strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
-								}
-								var aParent = aNode.parent;
-								if (aParent)
-								{
-									return putAncestorsInXPath(strWrapper, aParent);
-								}
-								else 
-								{
-									return strWrapper;
-								}
-							}
-							  
-							nodeEnter = nodeEnter
-							.on('contextmenu', d3.contextMenu(nodeMenu));
-							
-							nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
-							
-							
-
-							// UPDATE
-							var nodeUpdate = nodeEnter.merge(node);
-
-							// Transition to the proper position for the node
-							nodeUpdate.transition()
-							.duration(duration)
-							.attr("transform", function(d) { 
-								return "translate(" + d.y + "," + d.x + ")";
-							 });
-
-							// Update the node attributes and style
-							nodeUpdate.select('circle.treeNode')
-							.attr('r', 4.5)
-							.style("fill", function(d) {
-									if (d._children)
-									{
-										if(aName.includes("Input")){return '#ea9999'}
-										else if(aName.includes("Output")){return '#d6ea99'}
-										else {return "lightsteelblue"}
-									}
-									else {return "#fff"}
-							  })
-							.attr('cursor', 'pointer');
-							
-							nodeUpdate.select('text')
-							.text(function(d) { return d.data.text; });
-
-
-							// Remove any exiting nodes
-							var nodeExit = node.exit().transition()
-							  .duration(duration)
-							  .attr("transform", function(d) {
-								  return "translate(" + source.y + "," + source.x + ")";
-							  })
-							  .remove();
-
-							// ****************** links section ***************************
-
-							// Update the links...
-							var link = svgGroup.selectAll('path.treeLink')
-							  .data(links, function(d) { return d.id; });
-
-							// Enter any new links at the parent's previous position.
-							var linkEnter = link.enter().insert('path', "g")
-							  .attr("class", "treeLink")
-							  .attr('d', function(d){
-								var o = {x: source.x0, y: source.y0}
-								return diagonal(o, o)
-							  });
-
-							// UPDATE
-							var linkUpdate = linkEnter.merge(link);
-
-							// Transition back to the parent element position
-							linkUpdate.transition()
-							  .duration(duration)
-							  .attr('d', function(d){ return diagonal(d, d.parent) });
-
-							// Remove any exiting links
-							var linkExit = link.exit().transition()
-							  .duration(duration)
-							  .attr('d', function(d) {
-								var o = {x: source.x, y: source.y}
-								return diagonal(o, o)
-							  })
-							  .remove();
-
-							// Store the old positions for transition.
-							nodes.forEach(function(d){
-							d.x0 = d.x;
-							d.y0 = d.y;
-							});
-
-							// Creates a curved (diagonal) path from parent to the child nodes
-							function diagonal(s, d) {
-							return "M" + s.y + "," + s.x
-								  + "C" + (s.y + d.y) / 2 + "," + s.x
-								  + " " + (s.y + d.y) / 2 + "," + d.x
-								  + " " + d.y + "," + d.x;
-							}
-						}
-					}
-				}
-			}
-			startXDSM(data,graphID);
-
-			////aigner: Unused funcktions --> Could be helpful at some point
-			////aigner: clone function, so that original object is not overwritten but deep copied
-			// function clone(obj) {
-				// if (null == obj || "object" != typeof obj) return obj;
-				// var copy = obj.constructor();
-				// for (var attr in obj) {
-					// if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
-				// }
-				// return copy;
-			// }
-			////aigner: cleanArray Function
-			// function cleanArray(actual) 
-			// {
-				// var newArray = new Array();
-				// for (var i = 0; i < actual.length; i++) 
-				// {
-					// if (actual[i]) 
-					// {
-						// newArray.push(actual[i]);
-					// }
-				// }
-				// return newArray;
-			// }
-			//#####################################################################//
-
-
-			},{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
-		}
-		
-		function edgeBundles_script(data,graphID)
-		{
-			
-			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
-			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
-			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
-			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
-			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
-			2:[function(require,module,exports){
-			"use strict";
-
-			var d3 = require('d3');
-
-			//aigner: functions for drawing expand- and collapse-symbols
-			function drawExpandSymbol(aCircle, line1, line2)
-			{        
-				 aCircle = aCircle
-					.attr("r", 10)
-					.style("stroke", "black")
-					.style("stroke-width", 2)
-					.style("fill", "#99CC00")
-					.style("fill-opacity", .6)
-				line1 = line1
-					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
-					.attr("y1", parseFloat(aCircle.attr("cy")))
-					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
-					.attr("y2", parseFloat(aCircle.attr("cy")))
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-				line2 = line2
-					.attr("x1", parseFloat(aCircle.attr("cx")))
-					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
-					.attr("x2", parseFloat(aCircle.attr("cx")))
-					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-			}
-			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
-			{        
-				 var xOffset=150;
-				 var yOffset=12;
-				 aCircle = aCircle
-					.attr("cx", anXdsm.svg.attr("width")-xOffset)
-					.attr("cy", yOffset)
-					.attr("r", 10)
-					.classed("remCircle",true)
-				aMinus = aMinus
-					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
-					.attr("y1", yOffset)
-					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
-					.attr("y2", yOffset)
-					.classed("remMinus",true)
-			}
-			//d3-context-menu for right-click-option
-			d3.contextMenu = function (menu, openCallback) {
-
-				// create the div element that will hold the context menu
-				d3.selectAll('.d3-context-menu').data([1])
-					.enter()
-					.append('div')
-					.attr('class', 'd3-context-menu');
-
-				// close menu
-				d3.select('body').on('click.d3-context-menu', function() {
-					d3.select('.d3-context-menu').style('display', 'none');
-				});
-
-				// this gets executed when a contextmenu event occurs
-				return function(data, index) {	
-					var elm = this;
-
-					d3.selectAll('.d3-context-menu').html('');
-					var list = d3.selectAll('.d3-context-menu').append('ul');
-						list.selectAll('li').data(menu).enter()
-						.append('li')
-						.html(function(d) {
-							return d.title;
-						})
-						.on('mousedown', function(d, i) {
-							d.onMouseDown(elm, data, index);
-						})
-						.on('mouseup', function(d, i) {
-							d.onMouseUp(elm, data, index);
-							d3.select('.d3-context-menu').style('display', 'none');
-						})
-						.on('mouseenter',function(d,i){
-							d.onMouseOver(elm,data,index);
-							if(d.childrenItems.length>0 )
-								 {
-								  d3.select(this).selectAll("ul").remove(); 
-								  d3.select(this)
-									.append("ul")
-									.selectAll("li")
-									   .data(d.childrenItems)
-										.enter().append("li")
-										  .text(function(d) { return d.title; })
-									 .on("mouseenter", function(d,i){
-											d.onMouseOver(elm,data,index);
-										})
-									 .on('click',  function(d, i) {
-											d.onMouseClick(elm, d, index);
-										})
-									 .on('mouseleave',function(d,i){
-										
-										});
-								 }
-							 else
-								 return false;
-						})
-						.on('mouseleave',function(d,i){
-							d3.select(this).selectAll("ul").style('display', 'none')                  
-						});
-					
-					  
-
-					// the openCallback allows an action to fire before the menu is displayed
-					// an example usage would be closing a tooltip
-					if (openCallback) openCallback(data, index);
-
-					// display context menu
-					d3.select('.d3-context-menu')
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style('display', 'block');
-
-					d3.event.preventDefault();
-				};
-			};
-				
-			function tabulate(aTable,data,columns) {
-				var thead = aTable.append('thead');
-				var	tbody = aTable.append('tbody');  
-
-				// create a row for each object in the data
-				var rows = tbody.selectAll('tr')
-				  .data(data)
-				  .enter()
-				  .append('tr');
-
-				// create a cell in each row for each column
-				var cells = rows.selectAll('td')
-				  .data(function (row) {
-					return columns.map(function (column) {
-					  return {column: column, value: row[column]};
-					});
-				  })
-				  .enter()
-				  .append('td')
-					.html(function (d) { return d.value; });
-
-				return aTable;
-			}
-
-			//aigner: Move to front function
-			d3.selection.prototype.moveToFront = function() {  
-			  return this.each(function(){
-				this.parentNode.appendChild(this);
-			  });
-			};
-			//aigner: Move to back function
-			d3.selection.prototype.moveToBack = function() {  
-				return this.each(function() { 
-					var firstChild = this.parentNode.firstChild; 
-					if (firstChild) { 
-						this.parentNode.insertBefore(this, firstChild); 
-					} 
-				});
-			};
-
-
-			var diameter = 1500,
-				radius = diameter / 2,
-				innerRadius = radius - 250;
-
-			var cluster = d3.layout.cluster()
-				.size([360, innerRadius])
-				.sort(null)
-				.value(function(d) { return d.size; });
-
-			var bundle = d3.layout.bundle();
-
-			var line = d3.svg.line.radial()
-				.interpolate("bundle")
-				.tension(0.5)
-				.radius(function(d) { return d.y; })
-				.angle(function(d) { return d.x / 180 * Math.PI; });
-
-			var svg = d3.select("body").append("div").attr("class","edgeBundlesDiv")
-				svg = svg.append("svg")
-					.attr("class","circleSvg")
-					.attr("width", 10000)
-					.attr("height", 10000)
-					.append("g")
-					.attr("transform", "translate(" + radius*1.2 + "," + radius*1.2+ ")");
-				
-			var width = diameter*1.5;
-			var imgWidth = width;
-
-			var link = svg.append("g").selectAll(".edgeBundlesLink"),
-				invisibleLink = svg.append("g").selectAll(".invisibleLink"),
-				node = svg.append("g").selectAll(".edgeBundlesNode");
-			
-			//aigner: Here the data is read and the edge bundles is created
-			//################################################################################################//			
-			function startEdgeBundles(data, graphID) 
-			{
-				var graphs, currentGraph, varCategories, entireData;
-				
-				entireData = data;
-				graphs =  entireData.graphs;
-				for (var i=0;i<graphs.length;i++)
-				{
-					if (graphs[i].id==graphID)
-					{
-						currentGraph = graphs[i]
-					}
-				}
-				
-				varCategories =  entireData.categories;
-				var classes = currentGraph.edgeBundles;
-				
-				
-				//################################################################################################//	
-				var headerDiv =  d3.select(".edgeBundlesDiv").append("div").attr("class","panel panel-primary")
-				headerDiv.append("div").attr("class","panel-heading text-center")
-					.append("h3")
-					.attr("class","panel-title")
-					.style("font-family","Arial")
-					.style("font-size","20pt")
-					.text("Edge Bundles View")
-				var name_tmp="";
-				if (currentGraph.name){name_tmp=currentGraph.name}
-				else{name_tmp="Graph " + currentGraph.id}
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph name: " + name_tmp)
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph description: " + currentGraph.description)
-				//################################################################################################//	
-				
-				//aigner: Tree option menu to select which kind of tree view the user wants to see
-				//#####################################################################//
-				function showFullTree(categoryID, categoryDescr)
-				{
-					var name_tmp = "Full data model tree view; Categorization: " + categoryDescr;
-					var emptyArray="";
-					var allLinks = d3.selectAll(".edgeBundlesLink");
-					var theSchema = currentGraph.variableSchemes[categoryID];
-					createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
-				}
-				
-				var childrenItems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					childrenItems.push({title: 'according to ' + varCategories[j].description,
-								   varCategory: varCategories[j].name,
-								   description: varCategories[j].description,
-								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
-								   onMouseOver: function(elm,d,i){}})
-				}
-				var treeOptionMenu = [
-				{
-					title: 'Show variable tree...',
-					onMouseDown: function(elm, d, i) {
-					},
-					onMouseUp: function(elm, d, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: childrenItems
-				}
-				]
-				//#####################################################################//
-				//aigner: treeLayout in the bottom
-				//################################################################################################//		
-				//aigner: Data Model Expand Button
-				//##########################################################
-				var dataModelDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
-					dataModelDiv.append("svg:title").text("Click right to inspect")
-				var ul = dataModelDiv.append("ul")
-				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
-				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
-					.attr("align","left")
-					.style("margin-left","6px")
-					.style("margin-right","-10px")
-					.style("margin-top","10px")
-					.style("margin-bottom","0px")
-					.attr("height","20")
-					.attr("width","20")
-				dropdown1.append("a").text("Data Model")
-				var links = dropdown1.append("ul");
-				for (var j=0; j< varCategories.length; j++)
-				{
-					//console.log(varCategories[j])
-					var linkLi = links.append("li");
-					var linkA = linkLi.append("a")
-						.attr("id",j)
-						.text(varCategories[j].description)
-						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-						.on("click", function()
-						{		
-							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
-						})
-					
-				}
-				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
-				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
-				//##########################################################
-				//################################################################################################//
-				
-				
-				//aigner: legend
-				//################################################################################################//
-				// var legendDiv = d3.select("body").append("div").attr("class","legendDiv");
-				// var legendSVG = legendDiv.append("svg").attr("width",1000).attr("height",200);
-				// var legend = legendSVG.append("g")
-					// .attr("class", "legend")
-					// .attr("transform", "translate(38,12)");
-				// var legendFrame = legend.append("rect")
-					// .attr("x",-28)
-					// .attr("height", 150)
-					// .attr("width", 400)
-					// .attr("fill", "none")
-					// .attr("stroke", "#8888")
-					// .attr("stroke-width", 3)
-				// legend.append("text")
-					// .attr("transform", "translate(-20,24)")
-					// .attr("font-family","Arial")
-					// .attr("font-size","16pt")
-					// .attr("font-weight",700)
-					// .attr("fill","black")
-					// .text("Legend")
-				// legend.append("line")
-					// .attr("x1", -20)
-					// .attr("y1", 50)
-					// .attr("x2", 20)
-					// .attr("y2", 50)
-					// .style("stroke", "#CC0000")
-					// .style("stroke-width", 5);
-				// legend.append("line")
-					// .attr("x1", -20)
-					// .attr("y1", 90)
-					// .attr("x2", 20)
-					// .attr("y2", 90)
-					// .style("stroke", "#99CC00")
-					// .style("stroke-width", 5);
-				// legend.append("text")
-					// .attr("transform", "translate(30,56)")
-					// .attr("font-family","Arial")
-					// .attr("font-size","12pt")
-					// .attr("fill","black")
-					// .text("Input")
-				// legend.append("text")
-					// .attr("transform", "translate(30,96)")
-					// .attr("font-family","Arial")
-					// .attr("font-size","12pt")
-					// .attr("fill","black")
-					// .text("Output")
-				
-				//################################################################################################//
-				
-				
-				//d3.select(".legendDiv").moveToBack()
-				d3.select(".dataModelDiv").moveToBack()
-				headerDiv.moveToBack()
-				d3.select(".newDiv").moveToBack()
-				d3.select(".vispackDiv").moveToBack()
-				
-				var nodes = cluster.nodes(packageHierarchy(classes));
-				var links = packageImports(nodes);
-				
-				links.forEach(function(d)
-				{
-					d.pipeData_in = d.source.pipeline_data[d.target.name];
-					d.pipeData_out = d.target.pipeline_data[d.source.name];
-					d.pipeDataName_in = "";
-					d.pipeDataName_out = "";
-					if (d.pipeData_in)
-					{
-						for (var i=0; i<d.pipeData_in.length; i++)
-						{
-							d.pipeDataName_in += "," + d.pipeData_in[i];
-						}
-					}
-					if (d.pipeData_out)
-					{
-						for (var i=0; i<d.pipeData_out.length; i++)
-						{
-							d.pipeDataName_out += "," + d.pipeData_out[i];
-						}
-
-					}
-				})
-					
-				link = link
-				  .data(bundle(links))
-				.enter().append("path")
-				  .each(function(d) { 
-					d.source = d[0];
-					d.target = d[d.length - 1];})
-				  .attr("class", "edgeBundlesLink")
-				  .attr("d", line)
-
-				
-				
-				invisibleLink = invisibleLink
-				  .data(bundle(links))
-					.enter().append("path")
-				  .each(function(d) { 
-					d.source = d[0];
-					d.target = d[d.length - 1];
-					d.createNew = true;})
-				  .attr("class", "invisibleLink")
-				  .attr("d", line)
-				  
-					
-				function showLinkTree(aLink,aVarCategory, aCategoryDescr)
-				{
-					var theSchema = currentGraph.variableSchemes[aVarCategory];
-					var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name + "; Categorization: " + aCategoryDescr;
-					createTreeLayout(name_tmp,theSchema,aLink.__data__,link);
-				}
-				
-				function showEdgeTable(aLink)
-				{						
-					aLink.pipeData_in = aLink.source.pipeline_data[aLink.target.name];
-					aLink.pipeData_out = aLink.target.pipeline_data[aLink.source.name];
-					aLink.pipeDataName_in = "";
-					aLink.pipeDataName_out = "";
-					aLink.name = "";
-					if (aLink.pipeData_in)
-					{
-						for (var i=0; i<aLink.pipeData_in.length; i++)
-						{
-							if (i==0){aLink.pipeDataName_in += aLink.pipeData_in[i];}
-							else{aLink.pipeDataName_in += "," + aLink.pipeData_in[i];}
-							
-						}
-						aLink.name += aLink.pipeDataName_in
-					}
-					if (aLink.pipeData_out)
-					{
-						for (var i=0; i<aLink.pipeData_out.length; i++)
-						{
-							if (i==0){aLink.pipeDataName_out += aLink.pipeData_out[i];}
-							else{aLink.pipeDataName_out += "," + aLink.pipeData_out[i];}
-						}
-						aLink.name += aLink.pipeDataName_out
-					}
-					
-					
-					var edgeTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","edgeTableDiv")
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style("position", "absolute")
-						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-					var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
-					
-					//Drag Function for edge table
-					var xPos_init = d3.event.pageX - 2;
-					var yPos_init = d3.event.pageY - 2;
-					var xOffset_tmp;
-					var yOffset_tmp;
-					var drag = d3.behavior.drag()
-						.on("dragstart", dragstarted)
-						.on("drag", dragged)
-						.on("dragend", dragended);
-					function dragstarted() {
-					  d3.select(this).style("cursor", "grabbing")		
-					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-					}
-					function dragged() {
-						 d3.select(this)
-							.style("cursor", "grabbing")		
-							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-					}
-					function dragended() {
-					  d3.select(this).style("cursor", "grab")	
-					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-					}
-					edgeTableDiv.call(drag);
-					
-					var headLine = "Edge Information (" + aLink.source.key + " - " + aLink.target.key + ")";
-
-					var tabRemoveSVG = edgeTableGroup.append("svg")
-						.attr("width",String(headLine.length*12+"pt"))
-						.attr("height",26)
-					tabRemoveSVG.append("rect")
-						.attr("width", "100%")
-						.attr("height", "100%")
-						.attr("fill", "white");
-					var tabRemoveSymbol = tabRemoveSVG.append("g");
-					tabRemoveSymbol = tabRemoveSymbol
-						.attr("class", "tabRemoveSymbol")
-						.attr("transform", "translate(26,0)")
-					var circle = tabRemoveSymbol.append("circle")
-						.classed("remCircle",true)
-					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-					var cx = -20;
-					var cy = 12;
-					circle = circle
-						.attr("cx", cx+5)
-						.attr("cy", cy)
-						.attr("r", 10)
-					minus = minus
-						.attr("x1", cx)
-						.attr("y1", cy)
-						.attr("x2", cx+10)
-						.attr("y2", cy)
-						
-					tabRemoveSVG.append("text").attr("class","tabRemoveText")
-						.attr("transform", "translate(26,20)")
-						.attr("fill", "black")
-						.style("font-family", "Arial")
-						.style("font-size", "16pt")
-						.style("font-weight", "bold")
-						.text(headLine);
-					
-					tabRemoveSymbol
-						.on("mouseover", function(){
-							d3.select(this).style("cursor", "pointer")
-							circle.style("fill", "red").style("fill-opacity", .8);
-							})
-						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-					tabRemoveSymbol.on("mousedown", function(d)
-					{
-						edgeTableDiv.remove();
-					})
-								
-					var anEdgeNameSplit = aLink.name.split(',')
-					var numberOfconnections = anEdgeNameSplit.length;
-					var theLeafNodes = [];
-					var dimension=0;
-					var nullDim=false;
-					var undefinedLeafs;
-					var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);
-					var pipeData = aLink.name;
-					getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
-					var undefLeafsNumber=0;
-					var defLeafsNumber=0;
-					for (var k=0;k<theLeafNodes.length;k++)
-					{
-						if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
-						else{nullDim=true}
-						if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
-						{
-							if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
-							else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
-							undefLeafsNumber ++;
-						}
-						else
-						{
-							defLeafsNumber++;
-						}
-					}		
-					//Render data for table
-					var data = [];
-					data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
-					data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
-					data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
-					if (undefinedLeafs)
-					{
-						data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
-					}
-					var table = edgeTableGroup.append('table');
-					tabulate(table,data,['name', 'value']); // 2 column table
-					if (undefinedLeafs)
-					{
-						var text_tmp = "Show unreferenced connections as tree";
-						var undefLeafTreeSVG = edgeTableGroup.append("svg")
-							.attr("transform", "translate(0,20)")
-							.attr("width",String(text_tmp.length*9.5+"pt"))
-							.attr("height",50)
-						undefLeafTreeSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var expandSymbol = undefLeafTreeSVG.append("g")
-							.attr("class", "newExpandSymbol")
-							.attr("transform", "translate(38,12)");
-						var expandRect = expandSymbol.append("rect")
-							.attr("x",-28)
-							.attr("height", 50)
-							.attr("fill", "#555555")
-							.attr("stroke", "none")
-							.attr("stroke-width", 2)
-							.attr("fill-opacity", 1)
-						var expCircle = expandSymbol.append("circle")
-							.attr("cx", -26)
-							.attr("cy", 0);
-						var expLine1 = expandSymbol.append("line");
-						var expLine2 = expandSymbol.append("line");
-						drawExpandSymbol(expCircle,expLine1,expLine2);
-							expCircle = expCircle.attr("fill", "white");
-						expandSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")			
-								expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
-							})
-							.on("mouseout", function(){
-								expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
-							})
-						undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(text_tmp);
-						expandSymbol.on("mousedown", function(){
-							var name_tmp = "Unref. connections tree view: " + aLink.source.name +  "  →  " + aLink.target.name + "; Categorization: schema";
-							createTreeLayout(name_tmp,treeData,aLink,link);
-						})
-					}
-					
-				}
-				
-				//linkMenu --> functions for right click options
-				var linkChildrenItems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
-											varCategory: varCategories[j].name,
-											description: varCategories[j].description,
-											onMouseClick: function(elm, data, i) {showLinkTree(elm,data.varCategory,data.description)},
-											onMouseOver: function(elm,data,i){}});
-				}
-				var linkMenu = [
-				{
-					title: 'Show edge info',
-					onMouseDown: function(elm, k, i) {
-						showEdgeTable(k)
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: []
-				},
-				{
-					title: 'Show variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: linkChildrenItems
-				}
-				]  
-				invisibleLink.append("svg:title").text("Click right to inspect")
-				invisibleLink
-				.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-				.on('contextmenu', d3.contextMenu(linkMenu));
-				
-				//aigner: CAUTION, HACK --> delete the obsolete object that contains duplicate information
-				nodes.forEach(function(aNode,i)
-				{
-					if (aNode.children)
-					{
-						var index = nodes.indexOf(aNode);
-						if (index > -1) 
-						{
-							nodes.splice(index, 1);
-						}
-					}
-				});
-				
-				//aigner: Create the nodes in a circular view
-				node = node
-				  .data(nodes)
-				.enter().append("text")
-				  .attr("class", "edgeBundlesNode")
-				  .attr("dy", ".31em")
-				  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); })
-				  .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
-				  .style("font-family","Arial")
-				  .style("font-size","16pt")
-				  .text(function(d) { return d.name; })
-				  .on("mouseover", nodeMouseovered)
-				  .on("mouseout", nodeMouseouted);
-				
-				//aigner: Right click options for tools
-				//##############################################################################################################################
-				//aigner: assign additional node information to nodes coming from xdsm information	
-				var theXDSM = currentGraph.xdsm;
-				nodes.forEach(function(aNode,i)
-				{
-					var xdsmNodes = theXDSM.nodes;
-					for (var i=0; i< xdsmNodes.length; i++)
-					{
-						var xdsmNode = xdsmNodes[i];
-						if (xdsmNode.name == aNode.name)
-						{
-							aNode.id = xdsmNode.id;
-							aNode.metadata = xdsmNode.metadata;
-							aNode.type = xdsmNode.type;
-						}
-					}
-				});		
-				
-				//aigner: Table for competence/tool information
-				//############################################################
-				function showToolTable(aTool)
-				{									
-					var toolTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","toolTableDiv")
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style("position", "absolute")
-						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-					var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
-					
-					//Drag Function for edge table
-					var xPos_init = d3.event.pageX - 2;
-					var yPos_init = d3.event.pageY - 2;
-					var xOffset_tmp;
-					var yOffset_tmp;
-					var drag = d3.behavior.drag()
-						.on("dragstart", dragstarted)
-						.on("drag", dragged)
-						.on("dragend", dragended);
-					function dragstarted() {
-					  d3.select(this).style("cursor", "grabbing")		
-					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-					}
-					function dragged() {
-						 d3.select(this)
-							.style("cursor", "grabbing")		
-							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-					}
-					function dragended() {
-					  d3.select(this).style("cursor", "grab")	
-					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-					}
-					toolTableDiv.call(drag);
-					
-					var aToolNameSplit = aTool.name.split(': ')			
-					var headLine;
-					if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
-					else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
-
-					var tabRemoveSVG = toolTableGroup.append("svg")
-						.attr("width",800)
-						.attr("height",26)
-					var tabRemoveRect = tabRemoveSVG.append("rect")
-						.attr("width", "100%")
-						.attr("height", "100%")
-						.attr("fill", "white");
-					var tabRemoveSymbol = tabRemoveSVG.append("g");
-					tabRemoveSymbol = tabRemoveSymbol
-						.attr("class", "tabRemoveSymbol")
-						.attr("transform", "translate(26,0)")
-					var circle = tabRemoveSymbol.append("circle")
-						.classed("remCircle",true)
-					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-					var cx = -20;
-					var cy = 12;
-					circle = circle
-						.attr("cx", cx+5)
-						.attr("cy", cy)
-						.attr("r", 10)
-					minus = minus
-						.attr("x1", cx)
-						.attr("y1", cy)
-						.attr("x2", cx+10)
-						.attr("y2", cy)
-						
-					tabRemoveSVG.append("text").attr("class","tabRemoveText")
-						.attr("transform", "translate(26,20)")
-						.attr("fill", "black")
-						.style("font-family", "Arial")
-						.style("font-size", "16pt")
-						.style("font-weight", "bold")
-						.text(headLine);
-					
-					tabRemoveSymbol
-						.on("mouseover", function(){
-							d3.select(this).style("cursor", "pointer")
-							circle.style("fill", "red").style("fill-opacity", .8);
-							})
-						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-						.on("mousedown", function(d)
-						{
-							toolTableDiv.remove();
-						})
-					
-				
-					var data = [];
-					// render the table(s)
-					if (aTool.metadata.length==0)
-					{
-						data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
-					}
-					function findSubMetaData(aMetaData)
-					{
-						for(var key in aMetaData)
-						{
-							if (typeof aMetaData[key] === 'object')
-							{
-								data.push({ "name" : key, "value" : ''}) ;
-								findSubMetaData(aMetaData[key]);
-							}
-							else
-							{
-								data.push({ "name" : key, "value" : aMetaData[key] })
-							}
-						}
-					}
-					for (var j=0; j < aTool.metadata.length;j++)
-					{
-						var metaData = aTool.metadata[j];
-						findSubMetaData(metaData);						
-					}
-					var table = toolTableGroup.append('table');
-					tabulate(table,data,['name', 'value']); // 2 column table
-				}
-				//############################################################
-				
-				//aigner: Creation of input/output tree
-				//############################################################
-				function showIOTree(categoryName, categoryDescr, theNode, io)
-				{	
-					var links = d3.selectAll(".edgeBundlesLink")[0];
-					var array={name_in:"",name_out:"",name:""};
-					var name_tmp = "";
-								
-					links.forEach(function(d)
-					{	
-						var theLink = d.__data__;
-						
-						
-						var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
-						var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
-						if (!pipeData_in){pipeData_in = [];}
-						if (!pipeData_out){pipeData_out = [];}
-						theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
-						theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
-						theLink.name_in = "";
-						theLink.name_out = "";
-						theLink.name = "";
-						if (theLink.pipeData_in)
-						{
-							for (var i=0; i<theLink.pipeData_in.length; i++)
-							{
-								if (i==0){theLink.name_in += theLink.pipeData_in[i];}
-								else{theLink.name_in += "," + theLink.pipeData_in[i];}
-								
-							}
-							theLink.name += theLink.name_in
-						}
-						if (theLink.pipeData_out)
-						{
-							for (var i=0; i<theLink.pipeData_out.length; i++)
-							{
-								if (i==0){theLink.name_out += theLink.pipeData_out[i];}
-								else{theLink.name_out += "," + theLink.pipeData_out[i];}
-							}
-							theLink.name += theLink.name_out
-						}
-					
-						if (io=="in")
-						{
-							if (theLink.target == theNode)
-							{
-								if (array.name_in == ""){array.name_in +=theLink.name_out;}
-								else{array.name_in += "," + theLink.name_out;}
-								array.name_out = "";
-								array.name = array.name_in;
-							}
-							if (theLink.source == theNode)
-							{
-								if (array.name_in == ""){array.name_in +=theLink.name_in;}
-								else{array.name_in += "," + theLink.name_in;}
-								array.name_out = "";
-								array.name = array.name_in;
-							}
-							name_tmp = "Input tree view: " + theNode.id + "; Categorization: " + categoryDescr;
-						}
-						else if (io=="out")
-						{
-							if (theLink.source == theNode)
-							{
-								if (array.name_out == ""){array.name_out +=theLink.name_out;}
-								else{array.name_out += "," + theLink.name_out;}
-								array.name_in = "";
-								array.name = array.name_out;
-							}
-							if (theLink.target == theNode)
-							{
-								if (array.name_out == ""){array.name_out +=theLink.name_in;}
-								else{array.name_out += "," + theLink.name_in;}
-								array.name_in = "";
-								array.name = array.name_out;
-							}
-							name_tmp = "Output tree view: " + theNode.id + "; Categorization: " + categoryDescr;
-						}
-					})		
-					var theSchema = currentGraph.variableSchemes[categoryName]		
-					createTreeLayout(name_tmp,theSchema,array,link)
-				}
-				//############################################################
-				
-				var inputChildrenitems = [];
-				var outputChildrenitems = [];
-				var inputChildrenitems = [];
-				var outputChildrenitems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-											 varCategory: varCategories[j].name,
-											 description: varCategories[j].description,
-											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"in")},
-											 onMouseOver: function(elm,data,i){}});
-					outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-											 varCategory: varCategories[j].name,
-											 description: varCategories[j].description,
-											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"out")},
-											 onMouseOver: function(elm,data,i){}});
-				}
-				//menu --> functions for right click options
-				var toolMenu = [
-				{
-					title: 'Show competence info',
-					onMouseDown: function(elm, k, i) {
-						showToolTable(k);
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: []
-				},
-				{
-					title: 'Show input variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: inputChildrenitems
-				},
-				{
-					title: 'Show output variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: outputChildrenitems
-				}
-				]
-				
-				node.on('contextmenu', d3.contextMenu(toolMenu));
-				//##############################################################################################################################
-			};
-			startEdgeBundles(data,graphID);
-
-			function nodeMouseovered(d) {
-				d3.select(this).append("svg:title").text("Click right to inspect");
-				d3.select(this).style("cursor", "pointer")
-			  node
-				  .each(function(n) { 
-				  n.target = n.source = false; });
-
-			  link
-				  .classed("edgeBundlesLink--target", function(l) { if (l.target === d) return l.source.source = true; })
-				  .classed("edgeBundlesLink--source", function(l) { if (l.source === d) return l.target.target = true; })
-				  .filter(function(l) { return l.target === d || l.source === d; })
-				  .each(function() { this.parentNode.appendChild(this); });
-				  
-			  node
-				  .classed("edgeBundlesNode--target", function(n) { return n.target; })
-				  .classed("edgeBundlesNode--source", function(n) { return n.source; })
-			}
-
-			function nodeMouseouted(d) {
-			  link
-				  .classed("edgeBundlesLink--target", false)
-				  .classed("edgeBundlesLink--source", false);
-
-			  node
-				  .classed("edgeBundlesNode--target", false)
-				  .classed("edgeBundlesNode--source", false);
-			}
-
-			d3.select(self.frameElement).style("height", diameter + "px");
-
-			// Lazily construct the package hierarchy from class names.
-			function packageHierarchy(classes) {
-			  var map = {};
-
-			  function find(name, data) {
-				var node = map[name], i;
-				if (!node) {
-				  node = map[name] = data || {name: name, children: []};
-				  if (name.length) {
-					node.parent = find(name.substring(0, i = name.lastIndexOf("/")));
-					node.parent.children.push(node);
-					node.key = name.substring(i + 1);
-				  }
-				}
-				return node;
-			  }
-
-			  classes.forEach(function(d) {
-				find(d.name, d);
-			  });
-
-			  return map[""];
-			}
-
-			// Return a list of imports for the given array of nodes.
-			function packageImports(nodes) {
-			  var map = {},
-			  map2 = {},
-			  input = [];
-
-			  // Compute a map from name to node.
-			  nodes.forEach(function(d) {
-				map[d.name] = d;
-				map2[d.pipeline_data] = d;
-			  });
-
-			  // For each import, construct a link from the source to target node.
-			  nodes.forEach(function(d) 
-			  {
-				if(d.input)
-				{
-					d.input.forEach(function(i) 
-					{
-						if (map[i])
-						{
-							input.push({source: map[d.name], 
-									target: map[i],
-									pipeline_data: map2[d.pipeline_data]});	
-						}
-					})
-				}
-
-			   });
-			  return input;
-			}
-
-			function include(arr,obj) {
-				return (arr.indexOf(obj) != -1);
-			}
-
-			function prune_schema(parentXPath, objArray, xPathList_in, xPathList_out) 
-			{ 
-				var firstElement_in = "/"+xPathList_in.split("/")[1]+"/";
-				var firstElement_out = "/"+xPathList_out.split("/")[1]+"/";
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					obj.pipeLineIn = false;
-					obj.pipeLineOut = false;
-					var objXPath;
-					
-					//aigner: If object has children append a "/" as xPath separator
-					//else append comma as indicator for last element in the xPath
-					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-					else{objXPath =  parentXPath+objArray[i].name;}
-					var objXPathFromFirst_in = objXPath.split(firstElement_in);
-					var objXPathFromFirst_out = objXPath.split(firstElement_out);
-					
-					// console.log("Current node ->")
-					// console.log(firstElement_in+objXPathFromFirst_in[1])
-					// console.log(firstElement_out+objXPathFromFirst_out[1])
-					// console.log(xPathList_out)
-											
-					var delete_it = true;
-					if (xPathList_in!="")
-					{
-						if(objXPathFromFirst_in[1]==undefined)
-						{
-							delete_it = false;
-						}
-						else
-						{
-							if (include(xPathList_in, firstElement_in+objXPathFromFirst_in[1]))
-							{
-								obj.pipeLineIn = true;
-								delete_it = false;
-							}
-						}
-					}
-					if (xPathList_out!="")
-					{
-						if(objXPathFromFirst_out[1]==undefined)
-						{
-							delete_it = false;
-						}
-						else
-						{
-							if (include(xPathList_out, firstElement_out+objXPathFromFirst_out[1]))
-							{
-								obj.pipeLineOut = true;
-								delete_it = false;
-							}
-						}
-					}
-					
-					if (delete_it==true)
-					{
-						// console.log("delete ->")
-						// console.log( objXPathFromFirst_in[1])
-						// console.log(xPathList)
-						
-						objArray.splice(i, 1);
-						i--;
-					}
-					else
-					{
-						// console.log("do not delete ->")
-						// console.log(objXPath);
-						if (obj.children)
-						{
-							if (obj.children.length==0)
-							{
-								objArray.splice(i, 1);
-								i--;
-								prune_schema(parentXPath, objArray, xPathList_in, xPathList_out)
-							}
-							else{prune_schema(objXPath, obj.children, xPathList_in, xPathList_out);}
-							
-						}
-					}
-				}
-			}
-			function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
-			{ 
-				var firstElement = "/"+xPathList.split("/")[1]+"/";
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					var objXPath;
-					
-					//aigner: If object has children append a "/" as xPath separator
-					//else append comma as indicator for last element in the xPath
-					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-					else{objXPath =  parentXPath+objArray[i].name;}
-					var objXPathFromFirst = objXPath.split(firstElement);
-					
-					// console.log("Current node ->")
-					// console.log(firstElement+objXPathFromFirst[1])
-					// console.log(xPathList)
-											
-					var delete_it = true;
-					if(objXPathFromFirst[1]==undefined)
-					{
-						delete_it = false;
-					}
-					else
-					{
-						if (include(xPathList, firstElement+objXPathFromFirst[1]))
-						{
-							delete_it = false;
-						}
-					}
-					if (delete_it==true)
-					{
-						// console.log("delete ->")
-						// console.log( objXPathFromFirst[1])
-						// console.log(xPathList)
-						
-						objArray.splice(i, 1);
-						i--;
-					}
-					else
-					{
-						// console.log("do not delete ->")
-						// console.log(objXPath);
-						if (obj.children)
-						{
-							if (obj.children.length==0)
-							{
-								objArray.splice(i, 1);
-								i--;
-								getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
-							}
-							else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
-						}
-						else 
-						{
-							obj.xPath = objXPath;
-							leafNodes.push(obj);
-						};
-					}
-				}
-			}
-			function clean_tree(objArray)
-			{
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					if (obj.children)
-					{
-						if (obj.children.length==0)
-						{
-							objArray.splice(i, 1);
-							i--;
-						}
-						clean_tree(obj.children);
-					}
-				}
-			}
-			function countElements(node, counter) 
-			{
-				counter ++;
-				if (node.children)
-				{
-					if (node.children.length !== 0)
-					{
-						node.children.forEach(function(n)
-						{
-							counter = countElements(n, counter);
-						});
-					}
-				}
-				return counter;
-			}
-
-			function createTreeLayout(theName, schema,aLink,theAllLinks)
-			{
-				var theLink = aLink;
-				if (aLink.source && aLink.target)
-				{
-					var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
-					var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
-					if (!pipeData_in){pipeData_in = [];}
-					if (!pipeData_out){pipeData_out = [];}
-					theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
-					theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
-					theLink.name_in = "";
-					theLink.name_out = "";
-					theLink.name = "";
-					if (theLink.pipeData_in)
-					{
-						for (var i=0; i<theLink.pipeData_in.length; i++)
-						{
-							if (i==0){theLink.name_in += theLink.pipeData_in[i];}
-							else{theLink.name_in += "," + theLink.pipeData_in[i];}
-							
-						}
-						theLink.name += theLink.name_in
-					}
-					if (theLink.pipeData_out)
-					{
-						for (var i=0; i<theLink.pipeData_out.length; i++)
-						{
-							if (i==0){theLink.name_out += theLink.pipeData_out[i];}
-							else{theLink.name_out += "," + theLink.pipeData_out[i];}
-						}
-						theLink.name += theLink.name_out
-					}
-				}
-				
-				var treeData = (JSON.parse(JSON.stringify(schema)));
-				if (theLink)
-				{
-					prune_schema("/"+treeData.name+"/", treeData.children, theLink.name_in, theLink.name_out);
-					//aigner: count all descendants of a node
-					var firstEl = theLink.name.split("/")[1];
-					if(firstEl != treeData.name)
-					{
-						var cleanOperations = countElements(treeData,0)
-						for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
-					}
-				}
-					
-				var width= 1000;
-				var height= 500;
-				var xOffset = 10;
-				var xOffset2 = 100;
-				var canvas = d3.select(".circleSvg");
-				// Calculate total nodes, max label length
-				var totalNodes = 0;
-				var maxLabelLength = 0;
-				// variables for drag/drop
-				var selectedNode = null;
-				var draggingNode = null;
-				// Misc. variables
-				var i = 0;
-				var duration = 500;
-				var root;
-				
-
-				// size of the diagram
-				var viewerWidth = width/3;
-				var viewerHeight = height-50;
-
-				var tree = d3.layout.tree()
-					.size([viewerHeight, viewerWidth])
-
-				// define a d3 diagonal projection for use by the node paths later on.
-				var diagonal = d3.svg.diagonal()
-					.projection(function(d) {
-						return [d.y+xOffset, d.x];
-					});
-
-				// A recursive helper function for performing some setup by walking through all nodes
-
-				function visit(parent, visitFn, childrenFn) {
-					if (!parent) return;
-
-					visitFn(parent);
-
-					var children = childrenFn(parent);
-					if (children) {
-						var count = children.length;
-						for (var i = 0; i < count; i++) {
-							visit(children[i], visitFn, childrenFn);
-						}
-					}
-				}
-
-				// Call visit function to establish maxLabelLength
-				visit(treeData, function(d) {
-					totalNodes++;
-					maxLabelLength = Math.max(d.name.length, maxLabelLength);
-				}, function(d) {
-					return d.children && d.children.length > 0 ? d.children : null;
-				});
-				
-				function getMaxLength(data)
-				{
-					var maxLen=0;;
-					for (var i = 0; i < data.length; i++)
-					{
-						maxLen = Math.max(data[i].name.length, maxLen);
-					}
-					for (var i = 0; i < data.length; i++)
-					{
-						data[i].labelLength = maxLen;
-						if (data[i].children)
-						{getMaxLength(data[i].children);}
-						if (data[i]._children)
-						{getMaxLength(data[i]._children);}
-					}
-					
-				}
-				if(treeData._children)
-				{getMaxLength(treeData._children);}
-				if(treeData.children)
-				{getMaxLength(treeData.children);}
-				treeData.labelLength = treeData.name.length;
-
-				// sort the tree according to the node names
-				function sortTree() {
-					tree.sort(function(a, b) {
-						return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
-					});
-				}
-				// Sort the tree initially incase the JSON isn't in a sorted order.
-				//sortTree()
-
-
-				// Collapse the node and all it's children
-				function collapse(d) {
-				  if(d.children) {
-					d._children = d.children
-					d._children.forEach(collapse)
-					d.children = null
-				  }
-				}
-				// Collapse the node and all it's children
-				function expand(d) {
-				  if(d._children) {
-					d.children = d._children
-					d.children.forEach(expand)
-					d._children = null
-				  }
-				}
-				// Toggle children on click.
-				function click(d) 
-				{
-					if (d.children) {
-						d._children = d.children;
-						d.children = null;
-					} else 
-					{
-						d.children = d._children;
-						d._children = null;
-					}
-					update(d,theAllLinks);
-				}
-				// Collapse/expand entire tree on double-click
-				function dblclick(d) 
-				{
-					if(d.children) 
-					{
-						collapse(d);
-					}
-					else if(d._children)
-					{
-						expand(d);
-					}
-					update(d,theAllLinks);
-				}	
-
-				
-				
-				//aigner: Here the tree layout is created
-				var treeLayoutdiv = d3.select(".edgeBundlesDiv").append("div").attr("class","treeDiv_"+theName)
-										.style("left",(d3.event.pageX) + "px")
-										.style("top",(d3.event.pageY - 28) + "px")
-										.style("position", "absolute")
-										.on("mousedown", function(d) {
-											d3.select(this).moveToFront();
-										})
-										
-				var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-				var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
-								.attr("transform", "translate(50,0)");
-				var margin = {top: 20, right: 90, bottom: 20, left: 90},
-							  width = 960 - margin.left - margin.right,
-							  height = 500 - margin.top - margin.bottom;
-
-				// append the svg object to the body of the page
-				// appends a 'group' element to 'svg'
-				// moves the 'group' element to the top left margin
-				var offset_tmp = 60;
-				treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
-						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
-				treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
-						 .attr("height", height + margin.top + margin.bottom+offset_tmp)
-						 .on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-				treeGroup = treeGroup
-					.attr("width", width + margin.right + margin.left)
-					.attr("height", height + margin.top + margin.bottom);
-					
-				//Drag Function for treeLayout
-				var xPos_init = d3.event.pageX - 2;
-				var yPos_init = d3.event.pageY - 2;
-				var xOffset_tmp;
-				var yOffset_tmp;
-				var drag = d3.behavior.drag()
-					.on("dragstart", dragstarted)
-					.on("drag", dragged)
-					.on("dragend", dragended);
-				function dragstarted() {
-				  d3.select(this).style("cursor", "grabbing")		
-				  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-				  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-				}
-				function dragged() {
-					 d3.select(this)
-						.style("cursor", "grabbing")		
-						.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-						.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-				}
-				function dragended() {
-				  d3.select(this).style("cursor", "grab")	
-				  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-				  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-				}
-				treeLayoutdiv.call(drag);
-				
-				var frame = treeGroup.append("rect")
-					.attr("class","treeFrame")
-					.attr("stroke-width", 1)
-					.attr("stroke", "white")
-					.attr("fill-opacity", .8);
-				
-				var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
-					
-				
-				var r=8;
-				var cx=r+2;
-				var cy=r+2;
-				var circle = removeSymbol.append("circle")
-					.attr("cx", cx)
-					.attr("cy", cy)
-					.attr("r", r)
-					.style("stroke", "black")
-					.style("stroke-width", 1.5)
-					.style("fill", "red")
-					.style("fill-opacity", .6)
-				var minus = removeSymbol.append("line")
-					.attr("x1", cx+r/2)
-					.attr("y1", cy)
-					.attr("x2", cx-r/2)
-					.attr("y2", cy)
-					.style("stroke", "black")
-					.style("stroke-width", 1.5);
-					
-				removeSymbol
-					.on("mouseover", function(){
-						d3.select(this).style("cursor", "pointer")
-						circle.style("fill", "red").style("fill-opacity", .8);})
-					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-					.on("mousedown",function()
-					{
-						treeLayoutdiv.remove();
-					})
-				
-				
-				// Define the root
-				root = treeData;
-				root.x0 = 0;
-				root.y0 = 0;
-				
-				// Append a group which holds all nodes and which the zoom Listener can act upon.
-				var svgGroup_xOff = root.name.length*10+50
-				var svgGroup = treeGroup.append("g")
-					.attr("class","tree_"+theName)
-					.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
-				
-				collapse(root);
-				update(root,theAllLinks);
-				
-				var frametext = treeGroup.append("text")
-					.attr("class", "frametext")
-					.attr("x",30)
-					.attr("y",15)
-					.attr("text-anchor","start")
-					.attr("font-family","Arial")
-					.attr("font-size","18px")
-					.attr("font-weight","bold")
-					.text(theName)
-				
-				function update(source,allLinks) {
-					// Compute the new height, function counts total children of root node and sets tree height accordingly.
-					// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
-					// This makes the layout more consistent.
-					var levelWidth = [1];
-					var levelLength = [1];
-					var childCount = function(level, n) {
-
-						if (n.children && n.children.length > 0) {
-							if (levelWidth.length <= level + 1) levelWidth.push(0);
-							
-							levelWidth[level + 1] += n.children.length;
-							n.children.forEach(function(d) {
-								childCount(level + 1, d);
-							});
-						}
-					};
-					childCount(0, root);
-
-					var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
-					var newWidth = viewerWidth+300;
-					
-					//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
-					tree = tree.size([newHeight, newWidth]);
-					
-					frame = frame.attr("width",newWidth)
-						.attr("height",newHeight+60)
-						.attr("fill","white");
-						
-					
-					
-					// Compute the new tree layout.
-					var nodes = tree.nodes(root),
-						links = tree.links(nodes);
-						
-						
-					//aigner: count all descendants of a node
-					function countDescendants(node, counter) 
-					{
-						if (node._children)
-						{
-							node._children.forEach(function(n)
-							{
-								counter = countDescendants(n, counter);
-							});
-						}
-						else if (node.children)
-						{
-							node.children.forEach(function(n)
-							{
-								counter = countDescendants(n, counter);
-							});
-						}
-						else
-						{
-							counter ++;
-						}
-						return counter;
-					}
-					
-					
-					var depths = [];
-					var labelLength = [];
-					nodes.forEach(function(d) 
-					{				
-						//aigner: If node is collapsed show number of ancestors
-						if (d._children)
-						{
-							d._childrenNum = countDescendants(d, 0);
-							d.text = d.name + " (" + d._childrenNum + ")";
-						}
-						else 
-						{
-							d.text = d.name
-						}
-						
-						//aigner: Find maximum labelLength for each level
-						if (!depths.includes(d.depth))
-						{
-							depths.push(d.depth);
-							labelLength.push(d.text.length);
-						}
-						else
-						{
-							if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
-						}
-					});
-					// Set widths between levels based on labelLength of each level.
-					var newWidth=0;	
-					var depth_tmp = 0;			
-					nodes.forEach(function(d) 
-					{
-						if (d.parent)
-						{
-							d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
-						}
-						else{d.y=0}
-						
-						
-						if (newWidth<d.y)
-						{newWidth=d.y;}
-						
-						// console.log("##############")
-						// console.log(d.name)
-						// console.log("x = " + d.x)
-						// console.log("y = " + d.y)
-						// console.log("depth = " + depths.indexOf(d.depth))
-						// console.log("##############")
-					});	
-					
-					function getTextWidth(text, font) 
-					{
-						// re-use canvas object for better performance
-						var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
-						var context = canvas.getContext("2d");
-						context.font = font;
-						var metrics = context.measureText(text);
-						return metrics.width;
-					}					
-					newWidth=Math.max(newWidth,getTextWidth(theName,"Arial 12pt"));
-
-					// console.log(depths)		
-					// console.log(labelLength)		
-					
-					//aigner: Adjust height and width of the frame
-					treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-					treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
-					treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-					treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
-					frame = frame.attr("height", newHeight + margin.top + margin.bottom)
-					frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
-
-
-					// Update the nodes…
-					var treeNode = svgGroup.selectAll("g.treeNode")
-						.data(nodes, function(d) {
-							return d.id || (d.id = ++i);
-						});
-
-					var dblclick_timer = false;
-					// Enter any new nodes at the parent's previous position.
-					var nodeEnter = treeNode.enter().append('g')
-					  .attr('class', 'treeNode')
-					  .attr("transform", function(d) {
-						return "translate(" + source.y0 + "," + source.x0 + ")";
-					})
-					.on("mousedown", function(d) {
-						if (d3.event.which != 3)
-						{
-							// if double click timer is active, this click is the double click
-							if ( dblclick_timer )
-							{
-								clearTimeout(dblclick_timer)
-								dblclick_timer = false
-								// double click code code comes here
-								//console.log("DOUBLE CLICK")
-								dblclick(d);
-							}
-							// otherwise, what to do after single click (double click has timed out)
-							else dblclick_timer = setTimeout( function(){
-								dblclick_timer = false
-								// single click code code comes here
-								//console.log("SINGLE CLICK")
-								click(d);
-							}, 250)
-						}
-					})
-						
-					
-					nodeEnter.append("circle")
-						.attr('class', 'nodeCircle')
-						.attr("r", 0)
-						.style("fill", function(d) {
-							if (d._children)
-							{
-								if(d.pipeLineIn && !d.pipeLineOut){return '#ea9999'}
-								else if(!d.pipeLineIn && d.pipeLineOut){return '#d6ea99'}
-								else {return "lightsteelblue"}
-							}
-							else{return "#fff";}
-						})		
-						.style("stroke", function(d) {
-							if(d.pipeLineIn && !d.pipeLineOut){
-								//console.log(d);
-								return '#CC0000'}
-							else if(!d.pipeLineIn && d.pipeLineOut){
-								//console.log(d);
-								return '#99CC00'}
-						})
-						.attr("cx", function(d) {return xOffset});
-
-					nodeEnter.append("text")
-						.attr("x", function(d) 
-						{
-								return d.children || d._children ? -10+xOffset : 10+xOffset;
-						})
-						.attr("dy", ".35em")
-						.attr('class', 'nodeText')
-						.attr("text-anchor", function(d) {
-							return d.children || d._children ? "end" : "start";
-						})
-						.text(function(d) {
-							return d.text;
-						})
-						.style("fill-opacity", 0)
-						
-
-					// Update the text to reflect whether node has children or not.
-					treeNode.select('text')
-						.attr("x", function(d) {
-							return d.children || d._children ? -10+xOffset : 10+xOffset;
-						})
-						.attr("text-anchor", function(d) {
-							return d.children || d._children ? "end" : "start";
-						})
-						.text(function(d) {
-							return d.text;
-						});
-
-					// Change the circle fill depending on whether it has children and is collapsed
-					treeNode.select("circle.nodeCircle")
-						.attr("r", 4.5)
-						.style("fill", function(d) {
-							if (d._children)
-							{
-								if(d.pipeLineIn && !d.pipeLineOut){return '#ea9999'}
-								else if(!d.pipeLineIn && d.pipeLineOut){return '#d6ea99'}
-								else {return "lightsteelblue"}
-							}
-							else{return "#fff";}
-						})			
-					
-					
-					function showVariableTable(aVariable)
-					{						
-						var varTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
-							.style('left', (d3.event.pageX - 2) + 'px')
-							.style('top', (d3.event.pageY - 2) + 'px')
-							.style("position", "absolute")
-							.on("mousedown", function(d) {
-								d3.select(this).moveToFront();
-							})
-						var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
-						
-						//Drag Function for node table
-						var xPos_init = d3.event.pageX - 2;
-						var yPos_init = d3.event.pageY - 2;
-						var xOffset_tmp;
-						var yOffset_tmp;
-						var drag = d3.behavior.drag()
-							.on("dragstart", dragstarted)
-							.on("drag", dragged)
-							.on("dragend", dragended);
-						function dragstarted() {
-						  d3.select(this).style("cursor", "grabbing")		
-						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-						}
-						function dragged() {
-							 d3.select(this)
-								.style("cursor", "grabbing")		
-								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-						}
-						function dragended() {
-						  d3.select(this).style("cursor", "grab")	
-						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-						}
-						varTableDiv.call(drag);
-						
-						var headLine = "Node Information (" + theName + ")";
-						var tabRemoveSVG = varTableGroup.append("svg")
-							.attr("width",String(headLine.length*9.5+"pt"))
-							.attr("height",26)
-						tabRemoveSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var tabRemoveSymbol = tabRemoveSVG.append("g");
-						tabRemoveSymbol = tabRemoveSymbol
-							.attr("class", "tabRemoveSymbol")
-							.attr("transform", "translate(26,0)")
-						var circle = tabRemoveSymbol.append("circle")
-							.classed("remCircle",true)
-						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-						var cx = -20;
-						var cy = 12;
-						circle = circle
-							.attr("cx", cx+5)
-							.attr("cy", cy)
-							.attr("r", 10)
-						minus = minus
-							.attr("x1", cx)
-							.attr("y1", cy)
-							.attr("x2", cx+10)
-							.attr("y2", cy)
-							
-						
-						tabRemoveSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(headLine);
-						
-						
-						tabRemoveSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")
-								circle.style("fill", "red").style("fill-opacity", .8);
-								})
-							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-						tabRemoveSymbol.on("mousedown", function(d)
-						{
-							varTableDiv.remove();
-						})
-						
-						var data = [];
-						// render the table(s)
-						data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
-						
-						function getNodeXPath(strWrapper,aNode) 
-						{
-						  strWrapper.val = "/"+aNode.name+strWrapper.val;
-						  if (!aNode.parent) 
-						  {
-							return strWrapper;
-						  }
-						  else 
-						  {
-							
-							return getNodeXPath(strWrapper, aNode.parent);
-						  }
-						}
-						var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
-						data.push({ "name" : "xPath", "value" : xPath_tmp })
-						if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
-						if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
-						if (aVariable.children || aVariable._children)
-						{
-							var childrenNum=0;
-							if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
-							if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
-							data.push({ "name" : "Number of children", "value" : childrenNum })
-						}
-						if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
-						else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
-						if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
-						var table = varTableGroup.append('table');
-						tabulate(table,data,['name', 'value']); // 2 column table
-					}
-					
-					//Highlight function, that shows usage of a node in the XDSM
-					function highlight(data,aText)
-					{
-						aText = "/"+data.name+aText;
-						if (data.parent){highlight(data.parent,aText)}
-						else
-						{
-							allLinks[0].forEach(function(aLink)
-							{
-								
-								aLink.__data__.pipeData_in = aLink.__data__.source.pipeline_data[aLink.__data__.target.name];
-								aLink.__data__.pipeData_out = aLink.__data__.target.pipeline_data[aLink.__data__.source.name];
-								aLink.__data__.pipeDataName_in = "";
-								aLink.__data__.pipeDataName_out = "";
-								aLink.__data__.name = "";
-								if (aLink.__data__.pipeData_in)
-								{
-									for (var i=0; i<aLink.__data__.pipeData_in.length; i++)
-									{
-										if (i==0){aLink.__data__.pipeDataName_in += aLink.__data__.pipeData_in[i];}
-										else{aLink.__data__.pipeDataName_in += "," + aLink.__data__.pipeData_in[i];}
-										
-									}
-									aLink.__data__.name += aLink.__data__.pipeDataName_in
-								}
-								if (aLink.__data__.pipeData_out)
-								{
-									for (var i=0; i<aLink.__data__.pipeData_out.length; i++)
-									{
-										if (i==0){aLink.__data__.pipeDataName_out += aLink.__data__.pipeData_out[i];}
-										else{aLink.__data__.pipeDataName_out += "," + aLink.__data__.pipeData_out[i];}
-									}
-									aLink.__data__.name += aLink.__data__.pipeDataName_out
-								}
-							})
-											
-							//var allLinks_tmp = allLinks[0];
-							allLinks[0].forEach(function(p) {
-								var firstElement_tmp = p.__data__.name.split("/")[1]
-								var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-								if (include(p.__data__.name,text_fromFirst))
-								{
-									d3.select(p)
-										.style("stroke-opacity", 1.0)
-								}
-								else
-								{
-									d3.select(p).style("stroke-opacity", 0);			
-								}
-							});
-						}
-					}
-					
-					//Function writeTreeToXML goes through tree nodes and puts the into an xml document
-					function writeTreeToXML(aNode,anXMLDoc,anXPath)
-					{
-						//Variable "children" 
-						//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
-						var children;
-						if (aNode._children){children = aNode._children;}
-						else if (aNode.children){children = aNode.children;}
-						
-						//Get current xml element with its xPath
-						var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
-						if (element != null) {element.value = '...';}
-						
-						//If a node has children (collapsed or expanded), loop through them
-						if (children)
-						{
-							for (var i=0; i < children.length;i++)
-							{
-								//Name of the new XML element --> childName
-								var child = children[i];
-								var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
-								var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
-								var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
-								
-								//The children are appended to the xPath --> newXPath
-								var newXPath = anXPath+"/"+cleanChildName[0];
-								
-								//If childName contains a uID, make the uID an attribute
-								if (childName[1])
-								{
-									if (parseInt(childName[1]))
-									{
-										var dummyID = childName[1];
-										newNode.setAttribute("dummyID", dummyID)
-										newXPath = newXPath+"[@dummyID='"+dummyID+"']";
-									}
-									else
-									{
-										var uID = childName[1];
-										newNode.setAttribute("uID", uID)
-										newXPath = newXPath+"[@uID='"+uID+"']";
-									}
-								}
-								if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
-								
-								//Append the newNode to the xml structure
-								element.appendChild(newNode);
-								
-								
-								
-								////aigner: Sorting of XML elements according to "uID"
-								// var items = element.children;
-								// var itemsArr = [];
-								// for (var j in items) {
-									// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
-										// itemsArr.push(items[j]);
-									// }
-								// }
-								// itemsArr.sort(function(a,b){
-									// if (a.getAttribute("uID") < b.getAttribute("uID"))
-										// return -1;
-									// if (a.getAttribute("uID") > b.getAttribute("uID"))
-										// return 1;
-									// return 0;
-									// });
-
-								// for (j = 0; j < itemsArr.length; ++j) {
-								  // element.appendChild(itemsArr[j]);
-								// }
-								
-								//call function writeTreeToXML recursively for all children
-								writeTreeToXML(child,anXMLDoc,newXPath)
-							}
-						}
-						else
-						{
-							if (aNode.value){element.innerHTML = String(aNode.value);}
-							else{element.innerHTML = " ";}
-						}
-						//return the xml document
-						return anXMLDoc;
-					}
-					
-					function removeAttributeInAllElements(aDocument,attribute)
-					{
-					  var matchingElements = [];
-					  var allElements = aDocument.getElementsByTagName('*');
-					  for (var i = 0, n = allElements.length; i < n; i++)
-					  {
-						if (allElements[i].getAttribute(attribute) !== null)
-						{
-							allElements[i].removeAttribute(attribute);
-						}
-					  }
-					  return matchingElements;
-					}
-					
-					function putAncestorsInXMLString(strWrapper, aNode)
-					{
-						//Name of the new XML element
-						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-						//If nodeName contains a uID, make the uID an attribute
-						if (nodeName[1])
-						{
-							var uID = nodeName[1];
-							strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-						}
-						else
-						{
-							strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-						}
-						var aParent = aNode.parent;
-						if (aParent)
-						{
-							return putAncestorsInXMLString(strWrapper, aParent);
-						}
-						else 
-						{
-							return strWrapper;
-						}
-					}
-					
-					function putAncestorsInXPath(strWrapper, aNode)
-					{
-						//Name of the new XML element
-						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-						//If nodeName contains a uID, make the uID an attribute
-						if (nodeName[1])
-						{
-							var uID = nodeName[1];
-							strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
-						}
-						else
-						{
-							strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
-						}
-						var aParent = aNode.parent;
-						if (aParent)
-						{
-							return putAncestorsInXPath(strWrapper, aParent);
-						}
-						else 
-						{
-							return strWrapper;
-						}
-					}
-					
-					// Function to download data to a file
-					function download(filename, text) {
-						var element = document.createElement('a');
-						element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
-						element.setAttribute('download', filename);
-
-						element.style.display = 'none';
-						document.body.appendChild(element);
-
-						element.click();
-
-						document.body.removeChild(element);
-					}
-					
-					//menu --> functions for right click options
-					var nodeMenu = [
-					{
-						title: 'Show node information',
-						onMouseDown: function(elm, d, i) {
-							showVariableTable(d);
-						},
-						onMouseUp: function(elm, d, i) {},
-						onMouseOver: function(elm, d, i) {},
-						childrenItems: []
-					},
-					{
-						title: 'Show usage of node in diagram',
-						onMouseDown: function(elm, d, i) {
-							d3.selectAll(".treeFrame").attr("fill-opacity", .5);
-							d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
-							var theText="";
-							highlight(d,theText);
-						},
-						onMouseUp: function(elm, d, i) {				
-							d3.selectAll(".edgeBundlesLink")
-								.style("stroke-opacity",.4)
-							d3.selectAll(".treeFrame").attr("fill-opacity", .8);
-							d3.selectAll(".nodeText").style("fill-opacity", 1);					
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Copy x-path to clipboard',
-						onMouseDown: function(elm, d, i) {
-							function copyToClipboard(text) 
-							{
-								window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
-							}
-							function copyXPathToClipboard(data,aText)
-							{
-								aText = "/"+data.name+aText;
-								if (data.parent){copyXPathToClipboard(data.parent,aText)}
-								else{copyToClipboard(aText);}
-							}
-							var copyText="";
-							copyXPathToClipboard(d,copyText);
-							d3.select('.d3-context-menu').style('display', 'none');
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Download full tree as XML-file',
-						onMouseDown: function(elm, d, i) {
-							//Begin xml structure with the first element
-							var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
-							//Create a new xml document
-							var parser = new DOMParser();
-							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-							//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
-							var initialXPath = "/"+nodes[0].name;								
-							writeTreeToXML(nodes[0],xmlDocument,initialXPath);
-							//remove all attributes dummyID
-							removeAttributeInAllElements(xmlDocument,'dummyID');
-							//Make the xml document a string
-							var serializer = new XMLSerializer();
-							var xmlString = serializer.serializeToString(xmlDocument);
-							xmlString = vkbeautify.xml(xmlString);														
-							//Download a document with the xml-schema
-							download(theName+'_full.xml',xmlString);						
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Download tree as XML-file from current node',
-						onMouseDown: function(elm, d, i) {
-							var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
-							var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
-							//Create a new xml document
-							var parser = new DOMParser();
-							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-							//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
-							writeTreeToXML(d,xmlDocument,initialXPath);
-							//remove all attributes dummyID
-							removeAttributeInAllElements(xmlDocument,'dummyID');
-							//Make the xml document a string
-							var serializer = new XMLSerializer();
-							xmlString = serializer.serializeToString(xmlDocument);
-							xmlString = vkbeautify.xml(xmlString);														
-							//Download a document with the xml-schema
-							download(theName+"_"+d.name+'.xml',xmlString);						
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					}
-					]
-					
-					nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
-					
-					nodeEnter = nodeEnter.on('contextmenu', d3.contextMenu(nodeMenu));
-								
-					// UPDATE		
-					// Transition nodes to their new position.
-					var nodeUpdate = treeNode.transition()
-						.duration(duration)
-						.attr("transform", function(d) {
-							return "translate(" + d.y + "," + d.x + ")";
-						});
-
-					// Fade the text in
-					nodeUpdate.select("text")
-						.style("fill-opacity", 1);
-					
-					//New object for invisible nodes
-					var exitNodes = [];
-					
-					// Remove any exiting nodes
-					var nodeExit = treeNode.exit().transition()
-					  .duration(duration)
-					  .attr("transform", function(d) {
-						  return "translate(" + source.y + "," + source.x + ")";
-					  })
-					  .remove();
-					
-					function translation(d) 
-					{
-						
-						var closestAncestor;
-						closestAncestor = findClosestAncestor(nodes,d);
-						exitNodes.push(d);
-						exitNodes[exitNodes.length-1].x = closestAncestor.x;
-						exitNodes[exitNodes.length-1].y = closestAncestor.y;
-						return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")";
-					}
-					
-					function findClosestAncestor(allNodes, element) 
-					{
-						var level = 0;
-						var closestAncestor;
-						for (var i=0;i<allNodes.length;i++)
-						{
-							if (!allNodes[i].level){allNodes[i].level=0};
-							if (isDescendant(allNodes[i],element) && allNodes[i].level >= level)
-							{
-								level = allNodes[i].level;
-								closestAncestor = allNodes[i];
-							}
-						}
-						return closestAncestor;
-					}
-					
-					function isDescendant(parent, child) 
-					{
-						 var node = child.parent;
-						 while (node != null) 
-						 {
-							if (node == parent) 
-							{
-								return true;
-							}
-							node = node.parent;
-						 }
-						 return false;
-					}
-				
-
-					// Update the links…
-					var link = svgGroup.selectAll("path.treeLink")
-						.data(links, function(d) {
-							return d.target.id;
-						});
-
-					// Enter any new links at the parent's previous position.
-					link.enter().insert("path", "g")
-						.attr("class", "treeLink")
-						.attr("d", function(d) {
-							var o = {
-								x: source.x0,
-								y: source.y0
-							};
-							return diagonal({
-								source: o,
-								target: o
-							});
-						});
-
-					// Transition links to their new position.
-					link.transition()
-						.duration(duration)
-						.attr("d", diagonal);
-
-					// Transition exiting nodes to the parent's new position.
-					link.exit().transition()
-						.duration(duration)
-						.attr("d", function(d) {
-							var o = {
-								x: source.x,
-								y: source.y
-							};
-							return diagonal({
-								source: o,
-								target: o
-							});
-						})
-						.remove();
-					
-					// Stash the old positions for transition.
-					nodes.forEach(function(d) {						
-						d.x0 = d.x;
-						d.y0 = d.y;
-					});
-				}
-			}
-
-			},{"d3":1}]},{},[2]);
-		}
-		
-		function sankeyDiagram_script(data, graphID)
-		{
-			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
-			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
-			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
-			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
-			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
-			2:[function(require,module,exports){
-			"use strict";
-
-			var d3 = require('d3');
-
-
-			//aigner: functions for drawing expand- and collapse-symbols
-			function drawExpandSymbol(aCircle, line1, line2)
-			{        
-				 aCircle = aCircle
-					.attr("r", 10)
-					.style("stroke", "black")
-					.style("stroke-width", 2)
-					.style("fill", "#99CC00")
-					.style("fill-opacity", .6)
-				line1 = line1
-					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
-					.attr("y1", parseFloat(aCircle.attr("cy")))
-					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
-					.attr("y2", parseFloat(aCircle.attr("cy")))
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-				line2 = line2
-					.attr("x1", parseFloat(aCircle.attr("cx")))
-					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
-					.attr("x2", parseFloat(aCircle.attr("cx")))
-					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
-					.style("stroke", "black")
-					.style("stroke-width", 2);
-			}
-			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
-			{        
-				 var xOffset=150;
-				 var yOffset=12;
-				 aCircle = aCircle
-					.attr("cx", anXdsm.svg.attr("width")-xOffset)
-					.attr("cy", yOffset)
-					.attr("r", 10)
-					.classed("remCircle",true)
-				aMinus = aMinus
-					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
-					.attr("y1", yOffset)
-					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
-					.attr("y2", yOffset)
-					.classed("remMinus",true)
-			}
-			d3.contextMenu = function (menu, openCallback) {
-
-				// create the div element that will hold the context menu
-				d3.selectAll('.d3-context-menu').data([1])
-					.enter()
-					.append('div')
-					.attr('class', 'd3-context-menu');
-
-				// close menu
-				d3.select('body').on('click.d3-context-menu', function() {
-					d3.select('.d3-context-menu').style('display', 'none');
-				});
-
-				// this gets executed when a contextmenu event occurs
-				return function(data, index) {	
-					var elm = this;
-
-					d3.selectAll('.d3-context-menu').html('');
-					var list = d3.selectAll('.d3-context-menu').append('ul');
-						list.selectAll('li').data(menu).enter()
-						.append('li')
-						.html(function(d) {
-							return d.title;
-						})
-						.on('mousedown', function(d, i) {
-							d.onMouseDown(elm, data, index);
-						})
-						.on('mouseup', function(d, i) {
-							d.onMouseUp(elm, data, index);
-							d3.select('.d3-context-menu').style('display', 'none');
-						})
-						.on('mouseenter',function(d,i){
-							d.onMouseOver(elm,data,index);
-							if(d.childrenItems.length>0 )
-								 {
-								  d3.select(this).selectAll("ul").remove(); 
-								  d3.select(this)
-									.append("ul")
-									.selectAll("li")
-									   .data(d.childrenItems)
-										.enter().append("li")
-										  .text(function(d) { return d.title; })
-									 .on("mouseenter", function(d,i){
-											d.onMouseOver(elm,data,index);
-										})
-									 .on('click',  function(d, i) {
-											d.onMouseClick(elm, d, index);
-										})
-									 .on('mouseleave',function(d,i){
-										
-										});
-								 }
-							 else
-								 return false;
-						})
-						.on('mouseleave',function(d,i){
-							d3.select(this).selectAll("ul").style('display', 'none')                  
-						});
-					
-					  
-
-					// the openCallback allows an action to fire before the menu is displayed
-					// an example usage would be closing a tooltip
-					if (openCallback) openCallback(data, index);
-
-					// display context menu
-					d3.select('.d3-context-menu')
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style('display', 'block');
-
-					d3.event.preventDefault();
-				};
-			};
-
-			//aigner: Include function
-			function include(arr,obj) {
-					return (arr.indexOf(obj) != -1);
-			}
-
-			//aigner: Function creates a table
-			function tabulate(aTable,data,columns) {
-				var thead = aTable.append('thead');
-				var	tbody = aTable.append('tbody');  
-
-				// create a row for each object in the data
-				var rows = tbody.selectAll('tr')
-				  .data(data)
-				  .enter()
-				  .append('tr');
-
-				// create a cell in each row for each column
-				var cells = rows.selectAll('td')
-				  .data(function (row) {
-					return columns.map(function (column) {
-					  return {column: column, value: row[column]};
-					});
-				  })
-				  .enter()
-				  .append('td')
-					.html(function (d) { return d.value; });
-
-				return aTable;
-			}
-
-			//aigner: Move to front function
-			d3.selection.prototype.moveToFront = function() {  
-			  return this.each(function(){
-				this.parentNode.appendChild(this);
-			  });
-			};
-			//aigner: Move to back function
-			d3.selection.prototype.moveToBack = function() {  
-				return this.each(function() { 
-					var firstChild = this.parentNode.firstChild; 
-					if (firstChild) { 
-						this.parentNode.insertBefore(this, firstChild); 
-					} 
-				});
-			};
-
-
-			//aigner: biHisankey functions (Source: http://bl.ocks.org/Neilos/584b9a5d44d5fe00f779)
-			d3.biHiSankey = function () {
-			  "use strict";
-
-			  var biHiSankey = {},
-				nodeWidth = 24,
-				nodeSpacing = 8,
-				linkSpacing = 5,
-				arrowheadScaleFactor = 0, // Specifies the proportion of a link's stroke width to be allowed for the marker at the end of the link.
-				size = [1, 1], // default to one pixel by one pixel
-				nodes = [],
-				nodeMap = {},
-				parentNodes = [],
-				leafNodes = [],
-				links = [],
-				xScaleFactor = 1,
-				yScaleFactor = 1,
-				defaultLinkCurvature = 0.5;
-
-			  function center(node) {
-				return node.y + node.height / 2;
-			  }
-
-			  function value(link) {
-				return link.value;
-			  }
-
-			  function initializeNodeArrayProperties(node) {
-				node.sourceLinks = [];
-				node.rightLinks = [];
-				node.targetLinks = [];
-				node.leftLinks = [];
-				node.connectedNodes = [];
-				node.children = [];
-				node.ancestors = [];
-			  }
-			  // generates the nodeMap {"1": <node1>, "2": <node2>}
-			  // and initializes the array properties of each node
-			  function initializeNodeMap() {
-				nodes.forEach(function (node) {
-				  nodeMap[node.id] = node;
-				  initializeNodeArrayProperties(node);
-				});
-			  }
-
-			  function computeLeafNodes() {
-				leafNodes = nodes.filter(function (node) {
-				  return !node.children.length;
-				});
-			  }
-
-			  function computeParentNodes() {
-				parentNodes = nodes.filter(function (node) {
-				  return node.children.length;
-				});
-			  }
-
-			  function addAncestorsToChildren(node) {
-				node.children.forEach(function (child) {
-				  child.ancestors = child.ancestors.concat(this.ancestors.concat([this]));
-				  addAncestorsToChildren(child);
-				}, node);
-			  }
-
-			  // generate hierarchical connections between parent and child nodes
-			  function computeNodeHierarchy() {
-				var parent,
-					rootNodes = [];
-
-				nodes.forEach(function (node) {
-				  parent = null;
-				  if (parent) {
-					node.parent = parent;
-					parent.children.push(node);
-				  } else {
-					node.parent = null;
-					rootNodes.push(node);
-				  }
-				});
-
-				computeLeafNodes();
-				computeParentNodes();
-
-				rootNodes.forEach(function (rNode) {
-				  addAncestorsToChildren(rNode);
-				});
-			  }
-
-			  // Populate the sourceLinks and targetLinks for each node.
-			  function computeNodeLinks() {
-				var sourceNode, targetNode;
-				links.forEach(function (link) {
-				  sourceNode = nodeMap[link.source] || link.source;
-				  targetNode = nodeMap[link.target] || link.target;
-				  link.id = link.source + '-' + link.target;
-				  link.source = sourceNode;
-				  link.target = targetNode;
-				  sourceNode.sourceLinks.push(link);
-				  targetNode.targetLinks.push(link);
-				});
-			  }
-
-			  function visible(linkCollection) {
-				return linkCollection.filter(function (link) {
-				  return link.source.state === "collapsed" && link.target.state === "collapsed";
-				});
-			  }
-
-			  // When child nodes are collapsed into their parents (or higher ancestors)
-			  // the links between the child nodes should be represented by links
-			  // between the containing ancestors. This function adds those extra links.
-			  function computeAncestorLinks() {
-				// Leaf nodes are never parents of other nodes
-				// Duplicate source and target links between a leaf node and another leaf node
-				// and add to the leaf nodes' parents
-				leafNodes.forEach(function (leafNode) {
-				  leafNode.sourceLinks.forEach(function (sourceLink) {
-					var ancestorTargets,
-					target = sourceLink.target;
-					if (leafNodes.indexOf(target) >= 0) {
-					  ancestorTargets = target.ancestors.filter(function (tAncestor) {
-						return leafNode.ancestors.indexOf(tAncestor) < 0;
-					  });
-					  ancestorTargets.forEach(function (ancestorTarget) {
-						var ancestorLink = { source: leafNode,
-											target: ancestorTarget,
-											value: sourceLink.value,
-											id: leafNode.id + "-" + ancestorTarget.id };
-
-						leafNode.sourceLinks.push(ancestorLink);
-						ancestorTarget.targetLinks.push(ancestorLink);
-						links.push(ancestorLink);
-					  });
-					}
-				  });
-
-				  leafNode.targetLinks.forEach(function (targetLink) {
-					var ancestorSources, source = targetLink.source;
-					if (leafNodes.indexOf(source) >= 0) {
-					  ancestorSources = source.ancestors.filter(function (sAncestor) {
-						return leafNode.ancestors.indexOf(sAncestor) < 0;
-					  });
-					  ancestorSources.forEach(function (ancestorSource) {
-						var ancestorLink = { source: ancestorSource,
-											target: leafNode,
-											value: targetLink.value,
-											id: ancestorSource.id + "-" + leafNode.id };
-						ancestorSource.sourceLinks.push(ancestorLink);
-						leafNode.targetLinks.push(ancestorLink);
-						links.push(ancestorLink);
-					  });
-					}
-				  });
-				});
-
-				// Add links between parents (for when both parents are in collapsed state)
-				parentNodes.forEach(function (parentNode) {
-				  parentNode.sourceLinks.forEach(function (sourceLink) {
-					var ancestorTargets, target = sourceLink.target;
-					if (leafNodes.indexOf(target) >= 0) {
-					  ancestorTargets = target.ancestors.filter(function (tAncestor) {
-						return parentNode.ancestors.indexOf(tAncestor) < 0;
-					  });
-					  ancestorTargets.forEach(function (ancestorTarget) {
-						var ancestorLink = { source: parentNode,
-											target: ancestorTarget,
-											value: sourceLink.value,
-											id: parentNode.id + "-" + ancestorTarget.id };
-
-						parentNode.sourceLinks.push(ancestorLink);
-						ancestorTarget.targetLinks.push(ancestorLink);
-						links.push(ancestorLink);
-					  });
-					}
-				  });
-				});
-			  }
-
-			  // To reduce clutter in the diagram merge links that are from the
-			  // same source to the same target by creating a new link
-			  // with a value equal to the sum of the values of the merged links
-			  function mergeLinks() {
-				var linkGroups = d3.nest()
-				  .key(function (link) { return link.source.id + "->" + link.target.id; })
-				  .entries(links)
-				  .map(function (object) { return object.values; });
-
-				links = linkGroups.map(function (linkGroup) {
-				  return linkGroup.reduce(function (previousLink, currentLink) {
-					return {
-					  "source": previousLink.source,
-					  "target": previousLink.target,
-					  "id": d3.min([previousLink.id, currentLink.id]),
-					  "value": previousLink.value + currentLink.value
-					};
-				  });
-				});
-			  }
-
-			  function nodeHeight(sideLinks) {
-				var spacing = Math.max(sideLinks.length - 1, 0) * linkSpacing,
-					scaledValueSum = d3.sum(sideLinks, value) * yScaleFactor;
-				return scaledValueSum + spacing;
-			  }
-
-			  // Compute the value of each node by summing the associated links.
-			  // Compute the number of spaces between the links
-			  // Compute the number of source links for later decrementing
-			  function computeNodeValues() {
-				nodes.forEach(function (node) {
-				  node.value = Math.max(
-					d3.sum(node.leftLinks, value),
-					d3.sum(node.rightLinks, value)
-				  );
-				  node.inputs = d3.sum(visible(node.targetLinks), value);
-				  node.outputs = d3.sum(visible(node.sourceLinks), value);
-				  node.height = Math.max(nodeHeight(visible(node.leftLinks)), nodeHeight(visible(node.rightLinks)));
-				  node.linkSpaceCount = Math.max(Math.max(node.leftLinks.length, node.rightLinks.length) - 1, 0);
-				});
-			  }
-
-			  function computeConnectedNodes() {
-				var sourceNode, targetNode;
-				links.forEach(function (link) {
-				  sourceNode = link.source;
-				  targetNode = link.target;
-				  if (sourceNode.connectedNodes.indexOf(targetNode) < 0) {
-					sourceNode.connectedNodes.push(targetNode);
-				  }
-				  if (targetNode.connectedNodes.indexOf(sourceNode) < 0) {
-					targetNode.connectedNodes.push(sourceNode);
-				  }
-				});
-			  }
-
-			  function sourceAndTargetNodesWithSameX() {
-				var nodeArray = [];
-				links.filter(function (link) {
-				  return link.target.x === link.source.x;
-				}).forEach(function (link) {
-				  if (nodeArray.indexOf(link.target) < 0) {
-					nodeArray.push(link.target);
-				  }
-				});
-				return nodeArray;
-			  }
-
-			  function compressInXDirection() {
-				var connectedNodesXPositions,
-					nodesByXPosition = d3.nest()
-					  .key(function (node) { return node.x; })
-					  .sortKeys(d3.ascending)
-					  .entries(nodes)
-					  .map(function (object) { return object.values; });
-
-				nodesByXPosition.forEach(function (xnodes) {
-				  xnodes.forEach(function (node) {
-					connectedNodesXPositions = node.connectedNodes.map(function (connectedNode) {
-					  return connectedNode.x;
-					});
-					// keep decrementing the x value of the node
-					// unless it would have the same x value as one of its source or target nodes
-					// or node.x is already 0
-					while (node.x > 0 && connectedNodesXPositions.indexOf(node.x - 1) < 0) {
-					  node.x -= 1;
-					}
-				  });
-				});
-			  }
-
-			  function scaleNodeXPositions() {
-				var minX = d3.min(nodes, function (node) { return node.x; }),
-					maxX = d3.max(nodes, function (node) { return node.x; }) - minX;
-				xScaleFactor = (size[0] - nodeWidth) / maxX;
-
-				nodes.forEach(function (node) {
-				  node.x *= xScaleFactor;
-				});
-			  }
-
-			  function computeNodeXPositions() {
-				var remainingNodes = nodes,
-					nextNodes,
-					x = 0,
-					addToNextNodes = function (link) {
-					  if (nextNodes.indexOf(link.target) < 0 && link.target.x === this.x) {
-						nextNodes.push(link.target);
-					  }
-					},
-					setValues = function (node) {
-					  node.x = x;
-					  node.width = nodeWidth;
-					  node.sourceLinks.forEach(addToNextNodes, node);
-					};
-
-				while (remainingNodes.length) {
-				  nextNodes = [];
-				  remainingNodes.forEach(setValues);
-				  if (nextNodes.length) {
-					remainingNodes = nextNodes;
-				  } else {
-					remainingNodes = sourceAndTargetNodesWithSameX();
-				  }
-				  x += 1;
-				}
-
-				compressInXDirection();
-				scaleNodeXPositions();
-			  }
-
-			  function computeLeftAndRightLinks() {
-				var source, target;
-				nodes.forEach(function (node) {
-				  node.rightLinks = [];
-				  node.leftLinks = [];
-				});
-				links.forEach(function (link) {
-				  source = link.source;
-				  target = link.target;
-				  if (source.x < target.x) {
-					source.rightLinks.push(link);
-					target.leftLinks.push(link);
-					link.direction = 1;
-				  } else {
-					source.leftLinks.push(link);
-					target.rightLinks.push(link);
-					link.direction = -1;
-				  }
-				});
-			  }
-
-			  function adjustTop(adjustment) {
-				nodes.forEach(function (node) {
-				  node.y -= adjustment;
-				});
-			  }
-
-			  function computeNodeYPositions(iterations) {
-				var minY,
-					alpha,
-					nodesByXPosition = d3.nest()
-					  .key(function (node) { return node.x; })
-					  .sortKeys(d3.ascending)
-					  .entries(nodes)
-					  .map(function (object) { return object.values; });
-
-				function calculateYScaleFactor() {
-				  var linkSpacesCount, nodeValueSum, discretionaryY;
-				  yScaleFactor = d3.min(nodesByXPosition, function (nodes) {
-					linkSpacesCount = d3.sum(nodes, function (node) {
-					  return node.linkSpaceCount;
-					});
-					nodeValueSum = d3.sum(nodes, function (node) {
-					  return node.value;
-					});
-					discretionaryY = (size[1]
-									- (nodes.length - 1) * nodeSpacing
-									- linkSpacesCount * linkSpacing);
-
-					return  discretionaryY / nodeValueSum;
-				  });
-
-				  // Fat links are those with lengths less than about 4 times their heights
-				  // Fat links don't bend well
-				  // Test that yScaleFactor is not so big that it causes "fat" links; adjust yScaleFactor accordingly
-				  links.forEach(function (link) {
-					var linkLength = Math.abs(link.source.x - link.target.x),
-						linkHeight = link.value * yScaleFactor;
-					if (linkLength / linkHeight < 4) {
-					  yScaleFactor = 0.25 * linkLength / link.value;
-					}
-				  });
-				}
-
-				function initializeNodeYPosition() {
-				  nodesByXPosition.forEach(function (nodes) {
-					nodes.forEach(function (node, i) {
-					  node.y = i;
-					  node.heightAllowance = node.value * yScaleFactor + linkSpacing * node.linkSpaceCount;
-					});
-				  });
-				}
-
-				function calculateLinkThickness() {
-				  links.forEach(function (link) {
-					link.thickness = link.value * yScaleFactor;
-				  });
-				}
-
-				function relaxLeftToRight(alpha) {
-				  function weightedSource(link) {
-					return center(link.source) * link.value;
-				  }
-
-				  nodesByXPosition.forEach(function (nodes) {
-					nodes.forEach(function (node) {
-					  if (node.rightLinks.length) {
-						var y = d3.sum(node.rightLinks, weightedSource) / d3.sum(node.rightLinks, value);
-						node.y += (y - center(node)) * alpha;
-					  }
-					});
-				  });
-				}
-
-				function relaxRightToLeft(alpha) {
-				  function weightedTarget(link) {
-					return center(link.target) * link.value;
-				  }
-
-				  nodesByXPosition.slice().reverse().forEach(function (nodes) {
-					nodes.forEach(function (node) {
-					  if (node.leftLinks.length) {
-						var y = d3.sum(node.leftLinks, weightedTarget) / d3.sum(node.leftLinks, value);
-						node.y += (y - center(node)) * alpha;
-					  }
-					});
-				  });
-				}
-
-				function resolveCollisions() {
-				  function ascendingYPosition(a, b) {
-					return a.y - b.y;
-				  }
-
-				  nodesByXPosition.forEach(function (nodes) {
-					var node,
-						dy,
-						y0 = 0,
-						n = nodes.length,
-						i;
-
-					nodes.sort(ascendingYPosition);
-
-					// Push any overlapping nodes down.
-					for (i = 0; i < n; ++i) {
-					  node = nodes[i];
-					  dy = y0 - node.y;
-					  if (dy > 0) {
-						node.y += dy;
-					  }
-					  y0 = node.y + node.heightAllowance + nodeSpacing;
-					}
-
-					// If the bottommost node goes outside the bounds, push it back up.
-					dy = y0 - nodeSpacing - size[1];
-					if (dy > 0) {
-					  node.y -= dy;
-					  y0 = node.y;
-
-					  // Push any overlapping nodes back up.
-					  for (i = n - 2; i >= 0; --i) {
-						node = nodes[i];
-						dy = node.y + node.heightAllowance + nodeSpacing - y0;
-						if (dy > 0) {
-						  node.y -= dy;
-						}
-						y0 = node.y;
-					  }
-					}
-				  });
-				}
-
-				calculateYScaleFactor();
-				initializeNodeYPosition();
-				calculateLinkThickness();
-				resolveCollisions();
-
-				for (alpha = 1; iterations > 0; --iterations) {
-				  alpha *= 0.99;
-				  relaxRightToLeft(alpha);
-				  resolveCollisions();
-				  relaxLeftToRight(alpha);
-				  resolveCollisions();
-				}
-
-				minY = d3.min(nodes, function (node) { return node.y; });
-				adjustTop(minY);
-			  }
-
-			  function computeLinkYPositions() {
-
-				function ascendingLeftNodeYPosition(a, b) {
-				  var aLeftNode = (a.direction > 0) ? a.source : a.target,
-					  bLeftNode = (b.direction > 0) ? b.source : b.target;
-				  return aLeftNode.y - bLeftNode.y;
-				}
-
-				function ascendingRightNodeYPosition(a, b) {
-				  var aRightNode = (a.direction > 0) ? a.target : a.source,
-					  bRightNode = (b.direction > 0) ? b.target : b.source;
-				  return aRightNode.y - bRightNode.y;
-				}
-
-				nodes.forEach(function (node) {
-				  node.rightLinks.sort(ascendingRightNodeYPosition);
-				  node.leftLinks.sort(ascendingLeftNodeYPosition);
-				});
-
-				nodes.forEach(function (node) {
-				  var rightY = 0, leftY = 0;
-
-				  node.rightLinks.forEach(function (link) {
-					if (link.direction > 0) {
-					  link.sourceY = rightY;
-					  if (link.target.state === "collapsed") {
-						rightY += link.thickness + linkSpacing;
-					  }
-					}
-					else {
-					  link.targetY = rightY;
-					  if (link.source.state === "collapsed") {
-						rightY += link.thickness + linkSpacing;
-					  }
-					}
-				  });
-
-				  node.leftLinks.forEach(function (link) {
-					if (link.direction < 0) {
-					  link.sourceY = leftY;
-					  if (link.target.state === "collapsed") {
-						leftY += link.thickness + linkSpacing;
-					  }
-					}
-					else {
-					  link.targetY = leftY;
-					  if (link.source.state === "collapsed") {
-						leftY += link.thickness + linkSpacing;
-					  }
-					}
-				  });
-
-				});
-			  }
-
-
-			  biHiSankey.arrowheadScaleFactor = function (_) {
-				if (!arguments.length) { return arrowheadScaleFactor; }
-				arrowheadScaleFactor = +_;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.collapsedNodes = function () {
-				return nodes.filter(function (node) { return node.state === "collapsed"; });
-			  };
-
-			  biHiSankey.connected = function (nodeA, nodeB) {
-				return nodeA.connectedNodes.indexOf(nodeB) >= 0;
-			  };
-
-			  biHiSankey.expandedNodes = function () {
-				return nodes.filter(function (node) { return node.state === "expanded"; });
-			  };
-
-			  biHiSankey.layout = function (iterations) {
-				computeNodeXPositions();
-				computeLeftAndRightLinks();
-				computeNodeValues();
-				computeNodeYPositions(iterations);
-				computeNodeValues();
-				computeLinkYPositions();
-				return biHiSankey;
-			  };
-
-			  biHiSankey.link = function () {
-				var curvature = defaultLinkCurvature;
-
-				function leftToRightLink(link) {
-				  var arrowHeadLength = link.thickness * arrowheadScaleFactor,
-					  straightSectionLength = (3 * link.thickness / 4) - arrowHeadLength,
-					  x0 = link.source.x + link.source.width,
-					  x1 = x0 + arrowHeadLength / 2,
-					  x4 = link.target.x - straightSectionLength - arrowHeadLength,
-					  xi = d3.interpolateNumber(x0, x4),
-					  x2 = xi(curvature),
-					  x3 = xi(1 - curvature),
-					  y0 = link.source.y + link.sourceY + link.thickness / 2,
-					  y1 = link.target.y + link.targetY + link.thickness / 2;
-				  return "M" + x0 + "," + y0
-					   + "L" + x1 + "," + y0
-					   + "C" + x2 + "," + y0
-					   + " " + x3 + "," + y1
-					   + " " + x4 + "," + y1
-					   + "L" + (x4 + straightSectionLength) + "," + y1;
-				}
-
-				function rightToLeftLink(link) {
-				  var arrowHeadLength = link.thickness * arrowheadScaleFactor,
-					  straightSectionLength = link.thickness / 4,
-					  x0 = link.source.x,
-					  x1 = x0 - arrowHeadLength / 2,
-					  x4 = link.target.x + link.target.width + straightSectionLength + arrowHeadLength,
-					  xi = d3.interpolateNumber(x0, x4),
-					  x2 = xi(curvature),
-					  x3 = xi(1 - curvature),
-					  y0 = link.source.y + link.sourceY + link.thickness / 2,
-					  y1 = link.target.y + link.targetY + link.thickness / 2;
-				  return "M" + x0 + "," + y0
-					   + "L" + x1 + "," + y0
-					   + "C" + x2 + "," + y0
-					   + " " + x3 + "," + y1
-					   + " " + x4 + "," + y1
-					   + "L" + (x4 - straightSectionLength) + "," + y1;
-				}
-
-				function link(d) {
-				  if (d.source.x < d.target.x) {
-					return leftToRightLink(d);
-				  }
-				  return rightToLeftLink(d);
-				}
-
-				link.curvature = function (_) {
-				  if (!arguments.length) { return curvature; }
-				  curvature = +_;
-				  return link;
-				};
-
-				return link;
-			  };
-
-			  biHiSankey.links = function (_) {
-				if (!arguments.length) { return links; }
-				links = _.filter(function (link) {
-				  return link.source !== link.target; // filter out links that go nowhere
-				});
-				return biHiSankey;
-			  };
-
-			  biHiSankey.linkSpacing = function (_) {
-				if (!arguments.length) { return linkSpacing; }
-				linkSpacing = +_;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.nodes = function (_) {
-				if (!arguments.length) { return nodes; }
-				nodes = _;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.nodeWidth = function (_) {
-				if (!arguments.length) { return nodeWidth; }
-				nodeWidth = +_;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.nodeSpacing = function (_) {
-				if (!arguments.length) { return nodeSpacing; }
-				nodeSpacing = +_;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.relayout = function () {
-				computeLeftAndRightLinks();
-				computeNodeValues();
-				computeLinkYPositions();
-				return biHiSankey;
-			  };
-
-			  biHiSankey.size = function (_) {
-				if (!arguments.length) { return size; }
-				size = _;
-				return biHiSankey;
-			  };
-
-			  biHiSankey.visibleLinks = function () {
-				return visible(links);
-			  };
-
-			  biHiSankey.initializeNodes = function (callback) {
-				initializeNodeMap();
-				computeNodeHierarchy();
-				computeNodeLinks();
-				computeAncestorLinks();
-				mergeLinks();
-				computeConnectedNodes();
-				nodes.forEach(callback);
-				return biHiSankey;
-			  };
-
-			  return biHiSankey;
-			};
-
-
-			'use strict';
-
-			var sankeyDiagramDiv, svg, tooltip, biHiSankey, path, defs, colorScale, isTransitioning;
-
-			var OPACITY = {
-				NODE_DEFAULT: 0.9,
-				NODE_FADED: 0.1,
-				NODE_HIGHLIGHT: 0.8,
-				LINK_DEFAULT: 0.6,
-				LINK_FADED: 0.05,
-				LINK_HIGHLIGHT: 0.9
-			  },
-			  LINK_COLOR = "#b3b3b3",
-			  INFLOW_COLOR = "#CC0000",
-			  OUTFLOW_COLOR = "#99CC00",
-			  NODE_WIDTH = 36,
-			  COLLAPSER = {
-				RADIUS: NODE_WIDTH / 2,
-				SPACING: 2
-			  },
-			  OUTER_MARGIN = 10,
-			  MARGIN = {
-				TOP: 2 * (COLLAPSER.RADIUS + OUTER_MARGIN),
-				RIGHT: OUTER_MARGIN,
-				BOTTOM: OUTER_MARGIN,
-				LEFT: OUTER_MARGIN
-			  },
-			  TRANSITION_DURATION = 400,
-			  HEIGHT = 2000 - MARGIN.TOP - MARGIN.BOTTOM,
-			  WIDTH = 960 - MARGIN.LEFT - MARGIN.RIGHT,
-			  LAYOUT_INTERATIONS = 32,
-			  REFRESH_INTERVAL = 7000;
-
-			var formatNumber = function (d) {
-			  var numberFormat = d3.format(",.0f"); // zero decimal places
-			  return  numberFormat(d) + " connections";
-			},
-
-			formatFlow = function (d) {
-			  var flowFormat = d3.format(",.0f"); // zero decimal places with sign
-			  return flowFormat(Math.abs(d));
-			},
-
-			// Used when temporarily disabling user interractions to allow animations to complete
-			disableUserInterractions = function (time) {
-			  isTransitioning = true;
-			  setTimeout(function(){
-				isTransitioning = false;
-			  }, time);
-			},
-
-			hideTooltip = function () {
-			  return tooltip.transition()
-				.duration(TRANSITION_DURATION)
-				.style("opacity", 0);
-			},
-
-			showTooltip = function () {
-			  return tooltip
-				.style("left", d3.event.pageX + "px")
-				.style("top", d3.event.pageY + 15 + "px")
-				.transition()
-				  .duration(TRANSITION_DURATION)
-				  .style("opacity", 1);
-			};
-
-			colorScale = d3.scale.category10(),
-
-			sankeyDiagramDiv =  d3.select("body").append("div").attr("class","sankeyDiagramDiv")
-			svg = sankeyDiagramDiv.append("svg")
-					.attr("width", WIDTH + MARGIN.LEFT + MARGIN.RIGHT)
-					.attr("height", HEIGHT + MARGIN.TOP + MARGIN.BOTTOM)
-				  .append("g")
-					.attr("transform", "translate(" + MARGIN.LEFT + "," + MARGIN.TOP + ")");
-
-			svg.append("g").attr("id", "links");
-			svg.append("g").attr("id", "nodes");
-			svg.append("g").attr("id", "collapsers");
-
-			tooltip = d3.select(".sankeyDiagramDiv").append("div").attr("id", "tooltip");
-
-			tooltip.style("opacity", 0)
-				.append("p")
-				  .attr("class", "value");
-
-			biHiSankey = d3.biHiSankey();
-
-			// Set the biHiSankey diagram properties
-			biHiSankey
-			  .nodeWidth(NODE_WIDTH)
-			  .nodeSpacing(10)
-			  .linkSpacing(4)
-			  .arrowheadScaleFactor(0.5) // Specifies that 0.5 of the link's stroke WIDTH should be allowed for the marker at the end of the link.
-			  .size([WIDTH, HEIGHT]);
-
-			path = biHiSankey.link().curvature(0.45);
-
-			defs = svg.append("defs");
-
-			defs.append("marker")
-			  .style("fill", LINK_COLOR)
-			  .attr("id", "arrowHead")
-			  .attr("viewBox", "0 0 6 10")
-			  .attr("refX", "1")
-			  .attr("refY", "5")
-			  .attr("markerUnits", "strokeWidth")
-			  .attr("markerWidth", "1")
-			  .attr("markerHeight", "1")
-			  .attr("orient", "auto")
-			  .append("path")
-				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
-
-			defs.append("marker")
-			  .style("fill", OUTFLOW_COLOR)
-			  .attr("id", "arrowHeadInflow")
-			  .attr("viewBox", "0 0 6 10")
-			  .attr("refX", "1")
-			  .attr("refY", "5")
-			  .attr("markerUnits", "strokeWidth")
-			  .attr("markerWidth", "1")
-			  .attr("markerHeight", "1")
-			  .attr("orient", "auto")
-			  .append("path")
-				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
-
-			defs.append("marker")
-			  .style("fill", INFLOW_COLOR)
-			  .attr("id", "arrowHeadOutlow")
-			  .attr("viewBox", "0 0 6 10")
-			  .attr("refX", "1")
-			  .attr("refY", "5")
-			  .attr("markerUnits", "strokeWidth")
-			  .attr("markerWidth", "1")
-			  .attr("markerHeight", "1")
-			  .attr("orient", "auto")
-			  .append("path")
-				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
-
-			function update() {
-			  var link, linkEnter, node, nodeEnter, collapser, collapserEnter;
-
-			  function dragmove(node) {
-				node.x = Math.max(0, Math.min(WIDTH - node.width, d3.event.x));
-				node.y = Math.max(0, Math.min(HEIGHT - node.height, d3.event.y));
-				d3.select(this)
-					.attr("transform", "translate(" + node.x + "," + node.y + ")")
-					.style("cursor", "grabbing")
-				biHiSankey.relayout();
-				svg.selectAll(".sankeyNode").selectAll("rect").attr("height", function (d) { return d.height; });
-				link.attr("d", path);
-			  }
-
-			  function containChildren(node) {
-				node.children.forEach(function (child) {
-				  child.state = "contained";
-				  child.parent = this;
-				  child._parent = null;
-				  containChildren(child);
-				}, node);
-			  }
-
-			  function expand(node) {
-				node.state = "expanded";
-				node.children.forEach(function (child) {
-				  child.state = "collapsed";
-				  child._parent = this;
-				  child.parent = null;
-				  containChildren(child);
-				}, node);
-			  }
-
-			  function collapse(node) {
-				node.state = "collapsed";
-				containChildren(node);
-			  }
-
-			  function restoreLinksAndNodes() {
-				link
-				  .style("stroke", LINK_COLOR)
-				  .style("marker-end", function () { return 'url(#arrowHead)'; })
-				  .transition()
-					.duration(TRANSITION_DURATION)
-					.style("opacity", OPACITY.LINK_DEFAULT);
-				
-
-				node
-				  .selectAll("rect")
-					.style("fill", function (d) {
-					  d.color = colorScale(d.name.replace(/ .*/, ""));
-					  return d.color;
-					})
-					.style("stroke", function (d) {
-					  return d3.rgb(colorScale(d.name.replace(/ .*/, ""))).darker(0.1);
-					})
-					.style("fill-opacity", OPACITY.NODE_DEFAULT);
-
-				node.filter(function (n) { return n.state === "collapsed"; })
-				  .transition()
-					.duration(TRANSITION_DURATION)
-					.style("opacity", OPACITY.NODE_DEFAULT);
-			  }
-
-			  function showHideChildren(node) {
-				disableUserInterractions(2 * TRANSITION_DURATION);
-				hideTooltip();
-				if (node.state === "collapsed") { expand(node); }
-				else { collapse(node); }
-
-				biHiSankey.relayout();
-				update();
-				link.attr("d", path);
-				restoreLinksAndNodes();
-			  }
-
-			  function highlightConnected(g) {
-				link.filter(function (d) { return d.source === g; })
-				  .style("marker-end", function () { return 'url(#arrowHeadInflow)'; })
-				  .style("stroke", OUTFLOW_COLOR)
-				  .style("opacity", OPACITY.LINK_DEFAULT);
-
-				link.filter(function (d) { return d.target === g; })
-				  .style("marker-end", function () { return 'url(#arrowHeadOutlow)'; })
-				  .style("stroke", INFLOW_COLOR)
-				  .style("opacity", OPACITY.LINK_DEFAULT);
-				  
-				link.forEach(function (aLink) {
-				  aLink.moveToFront;
-				});
-			  }
-
-			  function fadeUnconnected(g) {
-				link.filter(function (d) { return d.source !== g && d.target !== g; })
-				  .style("marker-end", function () { return 'url(#arrowHead)'; })
-				  .transition()
-					.duration(TRANSITION_DURATION)
-					.style("opacity", OPACITY.LINK_FADED);
-
-				node.filter(function (d) {
-				  return (d.name === g.name) ? false : !biHiSankey.connected(d, g);
-				}).transition()
-				  .duration(TRANSITION_DURATION)
-				  .style("opacity", OPACITY.NODE_FADED);
-			  }
-
-			  link = svg.select("#links").selectAll("path.link")
-				.data(biHiSankey.visibleLinks(), function (d) { return d.id; });
-
-			  link.transition()
-				.duration(TRANSITION_DURATION)
-				.style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
-				.attr("d", path)
-				.style("opacity", OPACITY.LINK_DEFAULT);
-
-
-			  link.exit().remove();
-
-
-			  linkEnter = link.enter().append("path")
-				.attr("class", "link")
-				.style("fill", "none");
-
-			  linkEnter.on('mouseenter', function (d) {
-				if (!isTransitioning) {
-				  showTooltip().select(".value").text(function () {
-					if (d.direction > 0) {
-					  return d.source.name + " → " + d.target.name + "\n" + formatNumber(d.value);
-					}
-					return d.target.name + " ← " + d.source.name + "\n" + formatNumber(d.value);
-				  });
-
-				  d3.select(this)
-					.style("stroke", LINK_COLOR)
-					.transition()
-					  .duration(TRANSITION_DURATION / 2)
-					  .style("opacity", OPACITY.LINK_HIGHLIGHT);
-				}
-			  });
-
-			  linkEnter.on('mouseleave', function () {
-				if (!isTransitioning) {
-				  hideTooltip();
-
-				  d3.select(this)
-					.style("stroke", LINK_COLOR)
-					.transition()
-					  .duration(TRANSITION_DURATION / 2)
-					  .style("opacity", OPACITY.LINK_DEFAULT);
-				}
-			  });
-			  
-			  
-				function showLinkTree(aLink,aVarCategory)
-				{
-					var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name
-					var theSchema = currentGraph.variableSchemes[aVarCategory];
-					createTreeLayout(name_tmp,theSchema,aLink.__data__.name,link);
-				}
-				
-				function showEdgeTable(aLink)
-				{						
-					var edgeTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","edgeTableDiv")
-						.style('left', (d3.event.pageX - 2) + 'px')
-						.style('top', (d3.event.pageY - 2) + 'px')
-						.style("position", "absolute")
-						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-					var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
-					
-					//Drag Function for edge table
-					var xPos_init = d3.event.pageX - 2;
-					var yPos_init = d3.event.pageY - 2;
-					var xOffset_tmp;
-					var yOffset_tmp;
-					var drag = d3.behavior.drag()
-						.on("dragstart", dragstarted)
-						.on("drag", dragged)
-						.on("dragend", dragended);
-					function dragstarted() {
-					  d3.select(this).style("cursor", "grabbing")		
-					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-					}
-					function dragged() {
-						 d3.select(this)
-							.style("cursor", "grabbing")		
-							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-					}
-					function dragended() {
-					  d3.select(this).style("cursor", "grab")	
-					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-					}
-					edgeTableDiv.call(drag);
-					
-					var headLine = "Edge Information (" + aLink.from + " - " + aLink.to + ")";
-
-					var tabRemoveSVG = edgeTableGroup.append("svg")
-						.attr("width",String(headLine.length*12+"pt"))
-						.attr("height",26)
-					tabRemoveSVG.append("rect")
-						.attr("width", "100%")
-						.attr("height", "100%")
-						.attr("fill", "white");
-					var tabRemoveSymbol = tabRemoveSVG.append("g");
-					tabRemoveSymbol = tabRemoveSymbol
-						.attr("class", "tabRemoveSymbol")
-						.attr("transform", "translate(26,0)")
-					var circle = tabRemoveSymbol.append("circle")
-						.classed("remCircle",true)
-					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-					var cx = -20;
-					var cy = 12;
-					circle = circle
-						.attr("cx", cx+5)
-						.attr("cy", cy)
-						.attr("r", 10)
-					minus = minus
-						.attr("x1", cx)
-						.attr("y1", cy)
-						.attr("x2", cx+10)
-						.attr("y2", cy)
-						
-					tabRemoveSVG.append("text").attr("class","tabRemoveText")
-						.attr("transform", "translate(26,20)")
-						.attr("fill", "black")
-						.style("font-family", "Arial")
-						.style("font-size", "16pt")
-						.style("font-weight", "bold")
-						.text(headLine);
-					
-					tabRemoveSymbol
-						.on("mouseover", function(){
-							d3.select(this).style("cursor", "pointer")
-							circle.style("fill", "red").style("fill-opacity", .8);
-							})
-						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-					tabRemoveSymbol.on("mousedown", function(d)
-					{
-						edgeTableDiv.remove();
-					})
-								
-					var anEdgeNameSplit = aLink.name.split(',')
-					var numberOfconnections = anEdgeNameSplit.length;
-					var theLeafNodes = [];
-					var dimension=0;
-					var nullDim=false;
-					var undefinedLeafs;
-					var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);
-					var pipeData = aLink.name;
-					getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
-					var undefLeafsNumber=0;
-					var defLeafsNumber=0;
-					for (var k=0;k<theLeafNodes.length;k++)
-					{
-						if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
-						else{nullDim=true}
-						if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
-						{
-							if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
-							else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
-							undefLeafsNumber ++;
-						}
-						else
-						{
-							defLeafsNumber++;
-						}
-					}		
-					//Render data for table
-					var data = [];
-					data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
-					data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
-					data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
-					if (undefinedLeafs)
-					{
-						data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
-					}
-					var table = edgeTableGroup.append('table');
-					tabulate(table,data,['name', 'value']); // 2 column table
-					if (undefinedLeafs)
-					{
-						var text_tmp = "Show unreferenced connections as tree"
-						var undefLeafTreeSVG = edgeTableGroup.append("svg")
-							.attr("transform", "translate(0,20)")
-							.attr("width",String(text_tmp.length*9.5+"pt"))
-							.attr("height",50)
-						undefLeafTreeSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var expandSymbol = undefLeafTreeSVG.append("g")
-							.attr("class", "newExpandSymbol")
-							.attr("transform", "translate(38,12)");
-						var expandRect = expandSymbol.append("rect")
-							.attr("x",-28)
-							.attr("height", 50)
-							.attr("fill", "#555555")
-							.attr("stroke", "none")
-							.attr("stroke-width", 2)
-							.attr("fill-opacity", 1)
-						var expCircle = expandSymbol.append("circle")
-							.attr("cx", -26)
-							.attr("cy", 0);
-						var expLine1 = expandSymbol.append("line");
-						var expLine2 = expandSymbol.append("line");
-						drawExpandSymbol(expCircle,expLine1,expLine2);
-							expCircle = expCircle.attr("fill", "white");
-						expandSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")			
-								expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
-							})
-							.on("mouseout", function(){
-								expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
-							})
-						undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(text_tmp);
-						expandSymbol.on("mousedown", function(){
-							var name_tmp = "Unref. connections tree view: " + aLink.source.name +  "  →  " + aLink.target.name + "; Categorization: schema"
-							createTreeLayout(name_tmp,treeData,aLink.name,link);
-						})
-					}
-					
-				}
-				
-				//linkMenu --> functions for right click options
-				var linkChildrenItems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
-											varCategory: varCategories[j].name,
-											onMouseClick: function(elm, data, i) {showLinkTree(elm,data.varCategory)},
-											onMouseOver: function(elm,data,i){}});
-				}
-				var linkMenu = [
-				{
-					title: 'Show edge info',
-					onMouseDown: function(elm, k, i) {
-						showEdgeTable(k)
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: []
-				},
-				{
-					title: 'Show variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: linkChildrenItems
-				}
-				]
-
-				var thisLink = d3.select(this);
-				linkEnter.on('contextmenu', d3.contextMenu(linkMenu))
-
-			  linkEnter.sort(function (a, b) { return b.thickness - a.thickness; })
-				.classed("leftToRight", function (d) {
-				  return d.direction > 0;
-				})
-				.classed("rightToLeft", function (d) {
-				  return d.direction < 0;
-				})
-				.style("marker-end", function () {
-				  return 'url(#arrowHead)';
-				})
-				.style("stroke", LINK_COLOR)
-				.style("opacity", 0)
-				.transition()
-				  .delay(TRANSITION_DURATION)
-				  .duration(TRANSITION_DURATION)
-				  .attr("d", path)
-				  .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
-				  .style("opacity", OPACITY.LINK_DEFAULT);
-
-
-			  node = svg.select("#nodes").selectAll(".sankeyNode")
-				  .data(biHiSankey.collapsedNodes(), function (d) { return d.id; });
-
-
-			  node.transition()
-				.duration(TRANSITION_DURATION)
-				.attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; })
-				.style("opacity", OPACITY.NODE_DEFAULT)
-				.select("rect")
-				  
-				  .style("stroke", function(d) { 
-					  return d3.rgb(d.color).darker(2); })
-				  .style("stroke-WIDTH", "1px")
-				  .attr("height", function (d) { return d.height; })
-				  .attr("width", biHiSankey.nodeWidth());
-
-
-			  node.exit()
-				.transition()
-				  .duration(TRANSITION_DURATION)
-				  .attr("transform", function (d) {
-					var collapsedAncestor, endX, endY;
-					collapsedAncestor = d.ancestors.filter(function (a) {
-					  return a.state === "collapsed";
-					})[0];
-					endX = collapsedAncestor ? collapsedAncestor.x : d.x;
-					endY = collapsedAncestor ? collapsedAncestor.y : d.y;
-					return "translate(" + endX + "," + endY + ")";
-				  })
-				  .remove();
-
-
-			  nodeEnter = node.enter().append("g").attr("class", "sankeyNode");
-
-			  nodeEnter
-				.attr("transform", function (d) {
-				  var startX = d._parent ? d._parent.x : d.x,
-					  startY = d._parent ? d._parent.y : d.y;
-				  return "translate(" + startX + "," + startY + ")";
-				})
-				.style("opacity", 1e-6)
-				.transition()
-				  .duration(TRANSITION_DURATION)
-				  .style("opacity", OPACITY.NODE_DEFAULT)
-				  .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; });
-
-			  nodeEnter.append("text");
-			  nodeEnter.append("rect")
-				.style("fill", function(d) { 
-					  return d.color = colorScale(d.name.replace(/ .*/, "")); })
-				  .style("stroke", function(d) { 
-					  return d3.rgb(d.color).darker(2); })
-				.style("stroke-WIDTH", "1px")
-				.attr("height", function (d) { return d.height; })
-				.attr("width", biHiSankey.nodeWidth());
-				
-			  node.append("svg:title").text("Click left to drag, click right to inspect")
-			  node.on("mouseenter", function (g) {
-				if (!isTransitioning) {
-				  restoreLinksAndNodes();
-				  highlightConnected(g);
-				  fadeUnconnected(g);
-
-				  d3.select(this).select("rect")
-					.style("stroke", function (d) {
-					  return d3.rgb(d.color).darker(0.1);
-					})
-					.style("fill-opacity", OPACITY.LINK_DEFAULT);
-
-				  tooltip
-					.style("left", g.x + MARGIN.LEFT + "px")
-					.style("top", d3.event.pageY-40 + "px")
-					.transition()
-					  .duration(TRANSITION_DURATION)
-					  .style("opacity", 1).select(".value")
-					  .text(function () {
-						var additionalInstructions = g.children.length ? "\n(Double click to expand)" : "";
-						return g.name + "\nInputs: " + formatFlow(g.inputs) + "\nOutputs: " + formatFlow(g.outputs);
-					  });
-				}
-			  });
-
-			  node.on("mouseleave", function () {
-				if (!isTransitioning) {
-				  hideTooltip();
-				  restoreLinksAndNodes();
-				}
-			  });
-
-			  node.filter(function (d) { return d.children.length; })
-				.on("dblclick", showHideChildren);
-				
-				
-				//aigner: Right click options for tools
-				//##############################################################################################################################
-				
-				//aigner: Table for competence/tool information
-				//############################################################
-				function showToolTable(aTool)
-					{						
-						var toolTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","toolTableDiv")
-							.style('left', (d3.event.x - 2) + 'px')
-							.style('top', (d3.event.y - 2) + 'px')
-							.style("position", "absolute")
-							.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-						var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
-						
-						//Drag Function for variable table
-						var xPos_init = d3.event.pageX - 2;
-						var yPos_init = d3.event.pageY - 2;
-						var xOffset_tmp;
-						var yOffset_tmp;
-						var drag = d3.behavior.drag()
-							.on("dragstart", dragstarted)
-							.on("drag", dragged)
-							.on("dragend", dragended);
-						function dragstarted() {
-						  d3.select(this).style("cursor", "grabbing")		
-						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-						}
-						function dragged() {
-							 d3.select(this)
-								.style("cursor", "grabbing")		
-								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-						}
-						function dragended() {
-						  d3.select(this).style("cursor", "grab")	
-						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-						}
-						toolTableDiv.call(drag);
-						
-						var aToolNameSplit = aTool.name.split(': ')			
-						var headLine;
-						if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
-						else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
-
-						var tabRemoveSVG = toolTableGroup.append("svg")
-							.attr("width",800)
-							.attr("height",26)
-						var tabRemoveRect = tabRemoveSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var tabRemoveSymbol = tabRemoveSVG.append("g");
-						tabRemoveSymbol = tabRemoveSymbol
-							.attr("class", "tabRemoveSymbol")
-							.attr("transform", "translate(26,0)")
-						var circle = tabRemoveSymbol.append("circle")
-							.classed("remCircle",true)
-						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-						var cx = -20;
-						var cy = 12;
-						circle = circle
-							.attr("cx", cx+5)
-							.attr("cy", cy)
-							.attr("r", 10)
-						minus = minus
-							.attr("x1", cx)
-							.attr("y1", cy)
-							.attr("x2", cx+10)
-							.attr("y2", cy)
-							
-						tabRemoveSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(headLine);
-						
-						tabRemoveSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")
-								circle.style("fill", "red").style("fill-opacity", .8);
-								})
-							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-							.on("mousedown", function(d)
-							{
-								toolTableDiv.remove();
-							})
-						
-					
-						var data = [];
-						// render the table(s)
-						if (aTool.metadata.length==0)
-						{
-							data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
-						}
-						function findSubMetaData(aMetaData)
-						{
-							for(var key in aMetaData)
-							{
-								if (typeof aMetaData[key] === 'object')
-								{
-									data.push({ "name" : key, "value" : ''}) ;
-									findSubMetaData(aMetaData[key]);
-								}
-								else
-								{
-									data.push({ "name" : key, "value" : aMetaData[key] })
-								}
-							}
-						}
-						for (var j=0; j < aTool.metadata.length;j++)
-						{
-							var metaData = aTool.metadata[j];
-							findSubMetaData(metaData);						
-						}
-						var table = toolTableGroup.append('table');
-						tabulate(table,data,['name', 'value']); // 2 column table
-					}
-				//############################################################
-				
-				//aigner: Creation of input/output tree
-				//############################################################
-				function showIOTree(categoryID, categoryDescr, theNode, io)
-				{	
-					var links = d3.selectAll(".link");
-					var array="";
-					var name_tmp = "";
-					links.each(function(theLink)
-					{		
-						if (io=="in")
-						{
-							if (theLink.to == theNode.id)
-							{
-								array = array + ", " + theLink.name;
-							}
-							name_tmp = "Input tree view:" + theNode.id + "; Categorization: " + categoryDescr;
-						}
-						else if (io=="out")
-						{
-							if (theLink.from == theNode.id)
-							{
-								array = array + ", " + theLink.name;
-							}
-							name_tmp = "Output tree view:" + theNode.id + "; Categorization: " + categoryDescr;
-						}
-					})
-					
-					var theSchema = currentGraph.variableSchemes[categoryID];
-					createTreeLayout(name_tmp,theSchema,array,link)
-				}
-				//############################################################
-
-				var inputChildrenitems = [];
-				var outputChildrenitems = [];
-				var inputChildrenitems = [];
-				var outputChildrenitems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-											 varCategory: varCategories[j].name,
-											 description: varCategories[j].description,
-											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"in")},
-											 onMouseOver: function(elm,data,i){}});
-					outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
-											 varCategory: varCategories[j].name,
-											 description: varCategories[j].description,
-											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"out")},
-											 onMouseOver: function(elm,data,i){}});
-				}
-				//menu --> functions for right click options
-				var toolMenu = [
-				{
-					title: 'Show competence info',
-					onMouseDown: function(elm, k, i) {
-						showToolTable(k);
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: []
-				},
-				{
-					title: 'Show input variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: inputChildrenitems
-				},
-				{
-					title: 'Show output variable tree...',
-					onMouseDown: function(elm, k, i) {
-					},
-					onMouseUp: function(elm, k, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: outputChildrenitems
-				}
-				]
-				//##############################################################################################################################
-				
-				node.on('contextmenu', d3.contextMenu(toolMenu));
-				
-			  // allow nodes to be dragged to new positions
-			  node.call(d3.behavior.drag()
-				.origin(function (d) 
-				{ 
-					 d3.select(this).style("cursor", "grabbing")	
-					return d; 
-				})
-				.on("dragstart", function () {
-					d3.select(this).style("cursor", "grabbing")	
-					this.parentNode.appendChild(this); })
-				.on("drag", dragmove));
-
-			  // add in the text for the nodes
-			  node.filter(function (d) { return d.value !== 0; })
-				.select("text")
-				  .attr("x", -6)
-				  .attr("y", function (d) { return d.height / 2; })
-				  .attr("dy", ".35em")
-				  .attr("text-anchor", "end")
-				  .attr("transform", null)
-				  .text(function (d) { return d.name; })
-				.filter(function (d) { return d.x < WIDTH / 2; })
-				  .attr("x", 6 + biHiSankey.nodeWidth())
-				  .attr("text-anchor", "start");
-
-
-			  collapser = svg.select("#collapsers").selectAll(".collapser")
-				.data(biHiSankey.expandedNodes(), function (d) { return d.id; });
-
-
-			  collapserEnter = collapser.enter().append("g").attr("class", "collapser");
-
-			  collapserEnter.append("circle")
-				.attr("r", COLLAPSER.RADIUS)
-				.style("fill", function (d) {
-				  d.color = colorScale(d.name.replace(/ .*/, ""));
-				  return d.color;
-				});
-
-			  collapserEnter
-				.style("opacity", OPACITY.NODE_DEFAULT)
-				.attr("transform", function (d) {
-				  return "translate(" + (d.x + d.width / 2) + "," + (d.y + COLLAPSER.RADIUS) + ")";
-				});
-
-			  collapserEnter.on("dblclick", showHideChildren);
-
-			  collapser.select("circle")
-				.attr("r", COLLAPSER.RADIUS);
-
-			  collapser.transition()
-				.delay(TRANSITION_DURATION)
-				.duration(TRANSITION_DURATION)
-				.attr("transform", function (d, i) {
-				  return "translate("
-					+ (COLLAPSER.RADIUS + i * 2 * (COLLAPSER.RADIUS + COLLAPSER.SPACING))
-					+ ","
-					+ (-COLLAPSER.RADIUS - OUTER_MARGIN)
-					+ ")";
-				});
-
-			  collapser.on("mouseenter", function (g) {
-				if (!isTransitioning) {
-				  showTooltip().select(".value")
-					.text(function () {
-					  return g.name + "\n(Double click to collapse)";
-					});
-
-				  d3.select(this)
-					.style("opacity", OPACITY.NODE_HIGHLIGHT)
-					.select("circle")
-
-				  node.filter(function (d) {
-					return d.ancestors.indexOf(g) >= 0;
-				  }).style("opacity", OPACITY.NODE_HIGHLIGHT)
-					.select("rect")
-				}
-			  });
-
-			  collapser.on("mouseleave", function (g) {
-				if (!isTransitioning) {
-				  hideTooltip();
-				  d3.select(this)
-					.style("opacity", OPACITY.NODE_DEFAULT)
-					.select("circle")
-
-				  node.filter(function (d) {
-					return d.ancestors.indexOf(g) >= 0;
-				  }).style("opacity", OPACITY.NODE_DEFAULT)
-					.select("rect")
-				}
-			  });
-
-			  collapser.exit().remove();
-
-			}
-
-			function prune_schema(parentXPath, objArray, xPathList) 
-			{ 
-				var firstElement = "/"+xPathList.split("/")[1]+"/";
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					var objXPath;
-					
-					//aigner: If object has children append a "/" as xPath separator
-					//else append comma as indicator for last element in the xPath
-					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-					else{objXPath =  parentXPath+objArray[i].name;}
-					var objXPathFromFirst = objXPath.split(firstElement);
-					
-					// console.log("Current node ->")
-					// console.log(firstElement+objXPathFromFirst[1])
-					// console.log(xPathList)
-											
-					var delete_it = true;
-					if(objXPathFromFirst[1]==undefined)
-					{
-						delete_it = false;
-					}
-					else
-					{
-						if (include(xPathList, firstElement+objXPathFromFirst[1]))
-						{
-							delete_it = false;
-						}
-					}
-					if (delete_it==true)
-					{
-						// console.log("delete ->")
-						// console.log( objXPathFromFirst[1])
-						// console.log(xPathList)
-						
-						objArray.splice(i, 1);
-						i--;
-					}
-					else
-					{
-						// console.log("do not delete ->")
-						// console.log(objXPath);
-						if (obj.children)
-						{
-							if (obj.children.length==0)
-							{
-								objArray.splice(i, 1);
-								i--;
-								prune_schema(parentXPath, objArray, xPathList)
-							}
-							else{prune_schema(objXPath, obj.children, xPathList);}
-							
-						}
-					}
-				}
-			}
-			function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
-			{ 
-				var firstElement = "/"+xPathList.split("/")[1]+"/";
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					var objXPath;
-					
-					//aigner: If object has children append a "/" as xPath separator
-					//else append comma as indicator for last element in the xPath
-					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
-					else{objXPath =  parentXPath+objArray[i].name;}
-					var objXPathFromFirst = objXPath.split(firstElement);
-					
-					// console.log("Current node ->")
-					// console.log(firstElement+objXPathFromFirst[1])
-					// console.log(xPathList)
-											
-					var delete_it = true;
-					if(objXPathFromFirst[1]==undefined)
-					{
-						delete_it = false;
-					}
-					else
-					{
-						if (include(xPathList, firstElement+objXPathFromFirst[1]))
-						{
-							delete_it = false;
-						}
-					}
-					if (delete_it==true)
-					{
-						// console.log("delete ->")
-						// console.log( objXPathFromFirst[1])
-						// console.log(xPathList)
-						
-						objArray.splice(i, 1);
-						i--;
-					}
-					else
-					{
-						// console.log("do not delete ->")
-						// console.log(objXPath);
-						if (obj.children)
-						{
-							if (obj.children.length==0)
-							{
-								objArray.splice(i, 1);
-								i--;
-								getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
-							}
-							else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
-						}
-						else 
-						{
-							obj.xPath = objXPath;
-							leafNodes.push(obj);
-						};
-					}
-				}
-			}
-			function clean_tree(objArray)
-			{
-				for (var i = 0; i < objArray.length; ++i) 
-				{
-					var obj = objArray[i];
-					if (obj.children)
-					{
-						if (obj.children.length==0)
-						{
-							objArray.splice(i, 1);
-							i--;
-						}
-						clean_tree(obj.children);
-					}
-				}
-			}
-			function countElements(node, counter) 
-			{
-				counter ++;
-				if (node.children)
-				{
-					if (node.children.length !== 0)
-					{
-						node.children.forEach(function(n)
-						{
-							counter = countElements(n, counter);
-						});
-					}
-				}
-				return counter;
-			}
-			function createTreeLayout(theName,schema,theLinks,theAllLinks)
-			{	
-				var treeData = (JSON.parse(JSON.stringify(schema)));
-					
-				if (theLinks)
-				{
-					prune_schema("/"+treeData.name+"/", treeData.children, theLinks);
-					//aigner: count all descendants of a node
-					var firstEl = theLinks.split("/")[1];
-					if(firstEl != treeData.name)
-					{
-						var cleanOperations = countElements(treeData,0)
-						for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
-					}
-				}
-					
-					
-				var width= 1000;
-				var height= 500;
-				var xOffset = 10;
-				var xOffset2 = 100;	
-				
-				// Calculate total nodes, max label length
-				var totalNodes = 0;
-				var maxLabelLength = 0;
-				// variables for drag/drop
-				var selectedNode = null;
-				var draggingNode = null;
-				// Misc. variables
-				var i = 0;
-				var duration = 500;
-				var root;
-				
-
-				// size of the diagram
-				var viewerWidth = width/3;
-				var viewerHeight = height+50;
-
-				var tree = d3.layout.tree()
-					.size([viewerHeight, viewerWidth])
-
-				// define a d3 diagonal projection for use by the node paths later on.
-				var diagonal = d3.svg.diagonal()
-					.projection(function(d) {
-						return [d.y+xOffset, d.x];
-					});
-
-				// A recursive helper function for performing some setup by walking through all nodes
-
-				function visit(parent, visitFn, childrenFn) {
-					if (!parent) return;
-
-					visitFn(parent);
-
-					var children = childrenFn(parent);
-					if (children) {
-						var count = children.length;
-						for (var i = 0; i < count; i++) {
-							visit(children[i], visitFn, childrenFn);
-						}
-					}
-				}
-
-				// Call visit function to establish maxLabelLength
-				visit(treeData, function(d) {
-					totalNodes++;
-					maxLabelLength = Math.max(d.name.length, maxLabelLength);
-				}, function(d) {
-					return d.children && d.children.length > 0 ? d.children : null;
-				});
-				
-				function getMaxLength(data)
-				{
-					var maxLen=0;;
-					for (var i = 0; i < data.length; i++)
-					{
-						maxLen = Math.max(data[i].name.length, maxLen);
-					}
-					for (var i = 0; i < data.length; i++)
-					{
-						data[i].labelLength = maxLen;
-						if (data[i].children)
-						{getMaxLength(data[i].children);}
-						if (data[i]._children)
-						{getMaxLength(data[i]._children);}
-					}
-					
-				}
-				if(treeData._children)
-				{getMaxLength(treeData._children);}
-				if(treeData.children)
-				{getMaxLength(treeData.children);}
-				treeData.labelLength = treeData.name.length;
-
-
-				// Collapse the node and all it's children
-				function collapse(d) {
-				  if(d.children) {
-					d._children = d.children
-					d._children.forEach(collapse)
-					d.children = null
-				  }
-				}
-				// Collapse the node and all it's children
-				function expand(d) {
-				  if(d._children) {
-					d.children = d._children
-					d.children.forEach(expand)
-					d._children = null
-				  }
-				}
-				// Toggle children on click.
-				function click(d) 
-				{
-					if (d.children) {
-						d._children = d.children;
-						d.children = null;
-					} else 
-					{
-						d.children = d._children;
-						d._children = null;
-					}
-					update(d,theAllLinks);
-				}
-				// Collapse/expand entire tree on double-click
-				function dblclick(d) 
-				{
-					if(d.children) 
-					{
-						collapse(d);
-					}
-					else if(d._children)
-					{
-						expand(d);
-					}
-					update(d,theAllLinks);
-				}	
-
-				
-				//aigner: Here the tree layout is created
-				var treeLayoutdiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","treeDiv_"+theName)
-										.style("left",(d3.event.pageX) + "px")
-										.style("top",(d3.event.pageY - 28) + "px")
-										.style("position", "absolute")
-										.on("mousedown", function(d) {
-											d3.select(this).moveToFront();
-										})
-										
-				var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-				var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
-								.attr("transform", "translate(50,0)");
-				var margin = {top: 20, right: 90, bottom: 20, left: 90},
-							  width = 960 - margin.left - margin.right,
-							  height = 500 - margin.top - margin.bottom;
-
-				// append the svg object to the body of the page
-				// appends a 'group' element to 'svg'
-				// moves the 'group' element to the top left margin
-				var offset_tmp = 60;
-				treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
-						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
-				treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
-						 .attr("height", height + margin.top + margin.bottom+offset_tmp)
-						 .on("mouseover",function(){d3.select(this).style("cursor", "grab")})
-				treeGroup = treeGroup
-					.attr("width", width + margin.right + margin.left)
-					.attr("height", height + margin.top + margin.bottom);
-					
-				
-				//Drag Function for treeLayout
-				var xPos_init = d3.event.pageX - 2;
-				var yPos_init = d3.event.pageY - 2;
-				var xOffset_tmp;
-				var yOffset_tmp;
-				var drag = d3.behavior.drag()
-					.on("dragstart", dragstarted)
-					.on("drag", dragged)
-					.on("dragend", dragended);
-				function dragstarted() {
-				  d3.select(this).style("cursor", "grabbing")		
-				  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-				  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-				}
-				function dragged() {
-					 d3.select(this)
-						.style("cursor", "grabbing")		
-						.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-						.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-				}
-				function dragended() {
-				  d3.select(this).style("cursor", "grab")	
-				  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-				  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-				}
-				treeLayoutdiv.call(drag);
-
-				
-				var frame = treeGroup.append("rect")
-					.attr("class","treeFrame")
-					.attr("stroke-width", 1)
-					.attr("stroke", "white")
-					.attr("fill-opacity", .8);
-				
-				var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
-					
-				
-				var r=8;
-				var cx=r+2;
-				var cy=r+2;
-				var circle = removeSymbol.append("circle")
-					.attr("cx", cx)
-					.attr("cy", cy)
-					.attr("r", r)
-					.style("stroke", "black")
-					.style("stroke-width", 1.5)
-					.style("fill", "red")
-					.style("fill-opacity", .6)
-				var minus = removeSymbol.append("line")
-					.attr("x1", cx+r/2)
-					.attr("y1", cy)
-					.attr("x2", cx-r/2)
-					.attr("y2", cy)
-					.style("stroke", "black")
-					.style("stroke-width", 1.5);
-					
-				removeSymbol
-					.on("mouseover", function(){
-						d3.select(this).style("cursor", "pointer")
-						circle.style("fill", "red").style("fill-opacity", .8);})
-					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-					.on("mousedown",function()
-					{
-						treeLayoutdiv.remove();
-					})
-					
-
-				
-				// Define the root
-				root = treeData;
-				root.x0 = 0;
-				root.y0 = 0;
-				
-				// Append a group which holds all nodes and which the zoom Listener can act upon.
-				var svgGroup_xOff = root.name.length*10+50
-				var svgGroup = treeGroup.append("g")
-					.attr("class","tree_"+theName)
-					.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
-				
-				collapse(root);
-				update(root,theAllLinks);
-				
-				var frametext = treeGroup.append("text")
-					.attr("class", "frametext")
-					.attr("x",30)
-					.attr("y",15)
-					.attr("text-anchor","start")
-					.attr("font-family","Arial")
-					.attr("font-size","18px")
-					.attr("font-weight","bold")
-					.text(theName)
-				
-				function update(source,allLinks) 
-				{
-					// Compute the new height, function counts total children of root node and sets tree height accordingly.
-					// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
-					// This makes the layout more consistent.
-					var levelWidth = [1];
-					var levelLength = [1];
-					var childCount = function(level, n) {
-
-						if (n.children && n.children.length > 0) {
-							if (levelWidth.length <= level + 1) levelWidth.push(0);
-							
-							levelWidth[level + 1] += n.children.length;
-							n.children.forEach(function(d) {
-								childCount(level + 1, d);
-							});
-						}
-					};
-					childCount(0, root);
-
-					var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
-					var newWidth = viewerWidth+300;
-					
-					//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
-					tree = tree.size([newHeight, newWidth]);
-					
-					frame = frame.attr("width",newWidth)
-						.attr("height",newHeight+60)
-						.attr("fill","white");
-						
-					
-					
-					// Compute the new tree layout.
-					var nodes = tree.nodes(root),
-						links = tree.links(nodes);
-						
-						
-					//aigner: count all descendants of a node
-					function countDescendants(node, counter) 
-					{
-						if (node._children)
-						{
-							node._children.forEach(function(n)
-							{
-								counter = countDescendants(n, counter);
-							});
-						}
-						else if (node.children)
-						{
-							node.children.forEach(function(n)
-							{
-								counter = countDescendants(n, counter);
-							});
-						}
-						else
-						{
-							counter ++;
-						}
-						return counter;
-					}
-					
-					
-					var depths = [];
-					var labelLength = [];
-					nodes.forEach(function(d) 
-					{				
-						//aigner: If node is collapsed show number of ancestors
-						if (d._children)
-						{
-							d._childrenNum = countDescendants(d, 0);
-							d.text = d.name + " (" + d._childrenNum + ")";
-						}
-						else 
-						{
-							d.text = d.name
-						}
-						
-						//aigner: Find maximum labelLength for each level
-						if (!depths.includes(d.depth))
-						{
-							depths.push(d.depth);
-							labelLength.push(d.text.length);
-						}
-						else
-						{
-							if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
-						}
-					});
-					// Set widths between levels based on labelLength of each level.
-					var newWidth=0;	
-					var depth_tmp = 0;			
-					nodes.forEach(function(d) 
-					{
-						if (d.parent)
-						{
-							d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
-						}
-						else{d.y=0}
-						
-						
-						if (newWidth<d.y)
-						{newWidth=d.y;}
-						
-						// console.log("##############")
-						// console.log(d.name)
-						// console.log("x = " + d.x)
-						// console.log("y = " + d.y)
-						// console.log("depth = " + depths.indexOf(d.depth))
-						// console.log("##############")
-					});	
-					
-					
-
-					// console.log(depths)		
-					// console.log(labelLength)		
-					
-					//aigner: Adjust height and width of the frame
-					treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-					treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
-					treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-					treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
-					frame = frame.attr("height", newHeight + margin.top + margin.bottom)
-					frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
-
-					
-					
-					
-					
-					function showVariableTable(aVariable)
-					{					
-						var varTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
-							.style('left', (d3.event.pageX - 2) + 'px')
-							.style('top', (d3.event.pageY - 2) + 'px')
-							.style("position", "absolute")
-							.on("mouseover",function(){ d3.select(this).style("cursor", "grab")})
-							.on("mousedown", function(d) {
-								d3.select(this).moveToFront();
-							})
-						var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
-						
-						//Drag Function for node table
-						var xPos_init = d3.event.pageX - 2;
-						var yPos_init = d3.event.pageY - 2;
-						var xOffset_tmp;
-						var yOffset_tmp;
-						var drag = d3.behavior.drag()
-							.on("dragstart", dragstarted)
-							.on("drag", dragged)
-							.on("dragend", dragended);
-						function dragstarted() {
-						  d3.select(this).style("cursor", "grabbing")		
-						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
-						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
-						}
-						function dragged() {
-							 d3.select(this)
-								.style("cursor", "grabbing")		
-								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
-								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
-						}
-						function dragended() {
-						  d3.select(this).style("cursor", "grab")	
-						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
-						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
-						}
-						varTableDiv.call(drag);
-						
-						var headLine = "Node Information (" + theName + ")";
-						var tabRemoveSVG = varTableGroup.append("svg")
-							.attr("width",String(headLine.length*9.5+"pt"))
-							.attr("height",26)
-						tabRemoveSVG.append("rect")
-							.attr("width", "100%")
-							.attr("height", "100%")
-							.attr("fill", "white");
-						var tabRemoveSymbol = tabRemoveSVG.append("g");
-						tabRemoveSymbol = tabRemoveSymbol
-							.attr("class", "tabRemoveSymbol")
-							.attr("transform", "translate(26,0)")
-						var circle = tabRemoveSymbol.append("circle")
-							.classed("remCircle",true)
-						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-						var cx = -20;
-						var cy = 12;
-						circle = circle
-							.attr("cx", cx+5)
-							.attr("cy", cy)
-							.attr("r", 10)
-						minus = minus
-							.attr("x1", cx)
-							.attr("y1", cy)
-							.attr("x2", cx+10)
-							.attr("y2", cy)
-							
-						
-						tabRemoveSVG.append("text").attr("class","tabRemoveText")
-							.attr("transform", "translate(26,20)")
-							.attr("fill", "black")
-							.style("font-family", "Arial")
-							.style("font-size", "16pt")
-							.style("font-weight", "bold")
-							.text(headLine);
-						
-						
-						tabRemoveSymbol
-							.on("mouseover", function(){
-								d3.select(this).style("cursor", "pointer")
-								circle.style("fill", "red").style("fill-opacity", .8);
-								})
-							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-						tabRemoveSymbol.on("mousedown", function(d)
-						{
-							varTableDiv.remove();
-						})
-						
-						var data = [];
-						// render the table(s)
-						data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
-						
-						function getNodeXPath(strWrapper,aNode) 
-						{
-						  strWrapper.val = "/"+aNode.name+strWrapper.val;
-						  if (!aNode.parent) 
-						  {
-							return strWrapper;
-						  }
-						  else 
-						  {
-							
-							return getNodeXPath(strWrapper, aNode.parent);
-						  }
-						}
-						var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
-						data.push({ "name" : "xPath", "value" : xPath_tmp })
-						if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
-						if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
-						if (aVariable.children || aVariable._children)
-						{
-							var childrenNum=0;
-							if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
-							if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
-							data.push({ "name" : "Number of children", "value" : childrenNum })
-						}
-						if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
-						else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
-						if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
-						var table = varTableGroup.append('table');
-						tabulate(table,data,['name', 'value']); // 2 column table
-					}
-					
-					//Highlight function, that shows usage of a node in the XDSM
-					function highlight(data,aText)
-					{
-						aText = "/"+data.name+aText;
-						if (data.parent){highlight(data.parent,aText)}
-						else
-						{
-							var allLinks_tmp = allLinks[0];
-							allLinks_tmp.forEach(function(p) {
-								var firstElement_tmp = p.__data__.name.split("/")[1]
-								var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-								if (include(p.__data__.name,text_fromFirst))
-								{
-									d3.select(p).style("opacity", .8);			
-								}
-								else
-								{
-									d3.select(p).style("opacity", 0);			
-								}
-							});
-						}
-					}
-					
-					//Function writeTreeToXML goes through tree nodes and puts the into an xml document
-					function writeTreeToXML(aNode,anXMLDoc,anXPath)
-					{
-						//Variable "children" 
-						//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
-						var children;
-						if (aNode._children){children = aNode._children;}
-						else if (aNode.children){children = aNode.children;}
-						
-						//Get current xml element with its xPath
-						var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
-						if (element != null) {element.value = '...';}
-						
-						//If a node has children (collapsed or expanded), loop through them
-						if (children)
-						{
-							for (var i=0; i < children.length;i++)
-							{
-								//Name of the new XML element --> childName
-								var child = children[i];
-								var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
-								var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
-								var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
-								
-								//The children are appended to the xPath --> newXPath
-								var newXPath = anXPath+"/"+cleanChildName[0];
-								
-								//If childName contains a uID, make the uID an attribute
-								if (childName[1])
-								{
-									if (parseInt(childName[1]))
-									{
-										var dummyID = childName[1];
-										newNode.setAttribute("dummyID", dummyID)
-										newXPath = newXPath+"[@dummyID='"+dummyID+"']";
-									}
-									else
-									{
-										var uID = childName[1];
-										newNode.setAttribute("uID", uID)
-										newXPath = newXPath+"[@uID='"+uID+"']";
-									}
-								}
-								if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
-								
-								//Append the newNode to the xml structure
-								element.appendChild(newNode);
-								
-								
-								
-								////aigner: Sorting of XML elements according to "uID"
-								// var items = element.children;
-								// var itemsArr = [];
-								// for (var j in items) {
-									// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
-										// itemsArr.push(items[j]);
-									// }
-								// }
-								// itemsArr.sort(function(a,b){
-									// if (a.getAttribute("uID") < b.getAttribute("uID"))
-										// return -1;
-									// if (a.getAttribute("uID") > b.getAttribute("uID"))
-										// return 1;
-									// return 0;
-									// });
-
-								// for (j = 0; j < itemsArr.length; ++j) {
-								  // element.appendChild(itemsArr[j]);
-								// }
-								
-								//call function writeTreeToXML recursively for all children
-								writeTreeToXML(child,anXMLDoc,newXPath)
-							}
-						}
-						else
-						{
-							if (aNode.value){element.innerHTML = String(aNode.value);}
-							else{element.innerHTML = " ";}
-						}
-						//return the xml document
-						return anXMLDoc;
-					}
-					
-					function removeAttributeInAllElements(aDocument,attribute)
-					{
-					  var matchingElements = [];
-					  var allElements = aDocument.getElementsByTagName('*');
-					  for (var i = 0, n = allElements.length; i < n; i++)
-					  {
-						if (allElements[i].getAttribute(attribute) !== null)
-						{
-							allElements[i].removeAttribute(attribute);
-						}
-					  }
-					  return matchingElements;
-					}
-					
-					function putAncestorsInXMLString(strWrapper, aNode)
-					{
-						//Name of the new XML element
-						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-						//If nodeName contains a uID, make the uID an attribute
-						if (nodeName[1])
-						{
-							var uID = nodeName[1];
-							strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-						}
-						else
-						{
-							strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-						}
-						var aParent = aNode.parent;
-						if (aParent)
-						{
-							return putAncestorsInXMLString(strWrapper, aParent);
-						}
-						else 
-						{
-							return strWrapper;
-						}
-					}
-					
-					function putAncestorsInXPath(strWrapper, aNode)
-					{
-						//Name of the new XML element
-						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-						//If nodeName contains a uID, make the uID an attribute
-						if (nodeName[1])
-						{
-							var uID = nodeName[1];
-							strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
-						}
-						else
-						{
-							strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
-						}
-						var aParent = aNode.parent;
-						if (aParent)
-						{
-							return putAncestorsInXPath(strWrapper, aParent);
-						}
-						else 
-						{
-							return strWrapper;
-						}
-					}
-					
-					// Function to download data to a file
-					function download(filename, text) {
-						var element = document.createElement('a');
-						element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
-						element.setAttribute('download', filename);
-
-						element.style.display = 'none';
-						document.body.appendChild(element);
-
-						element.click();
-
-						document.body.removeChild(element);
-					}
-					
-					//menu --> functions for right click options
-					var nodeMenu = [
-					{
-						title: 'Show node information',
-						onMouseDown: function(elm, d, i) {
-							showVariableTable(d);
-						},
-						onMouseUp: function(elm, d, i) {},
-						onMouseOver: function(elm, d, i) {},
-						childrenItems: []
-					},
-					{
-						title: 'Show usage of node in diagram',
-						onMouseDown: function(elm, d, i) {
-							d3.selectAll(".treeFrame").attr("fill-opacity", .5);
-							d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
-							var theText="";
-							highlight(d,theText);
-						},
-						onMouseUp: function(elm, d, i) {				
-							d3.selectAll(".link").style("opacity",.6)
-							d3.selectAll(".treeFrame").attr("fill-opacity", .8);
-							d3.selectAll(".nodeText").style("fill-opacity", 1);					
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Copy x-path to clipboard',
-						onMouseDown: function(elm, d, i) {
-							function copyToClipboard(text) 
-							{
-								window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
-							}
-							function copyXPathToClipboard(data,aText)
-							{
-								aText = "/"+data.name+aText;
-								if (data.parent){copyXPathToClipboard(data.parent,aText)}
-								else{copyToClipboard(aText);}
-							}
-							var copyText="";
-							copyXPathToClipboard(d,copyText);
-							d3.select('.d3-context-menu').style('display', 'none');
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Download full tree as XML-file',
-						onMouseDown: function(elm, d, i) {
-							//Begin xml structure with the first element
-							var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
-							//Create a new xml document
-							var parser = new DOMParser();
-							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-							//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
-							var initialXPath = "/"+nodes[0].name;								
-							writeTreeToXML(nodes[0],xmlDocument,initialXPath);
-							//remove all attributes dummyID
-							removeAttributeInAllElements(xmlDocument,'dummyID');
-							//Make the xml document a string
-							var serializer = new XMLSerializer();
-							var xmlString = serializer.serializeToString(xmlDocument);
-							xmlString = vkbeautify.xml(xmlString);														
-							//Download a document with the xml-schema
-							download(theName+'_full.xml',xmlString);						
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Download tree as XML-file from current node',
-						onMouseDown: function(elm, d, i) {
-							var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
-							var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
-							//Create a new xml document
-							var parser = new DOMParser();
-							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-							//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
-							writeTreeToXML(d,xmlDocument,initialXPath);
-							//remove all attributes dummyID
-							removeAttributeInAllElements(xmlDocument,'dummyID');
-							//Make the xml document a string
-							var serializer = new XMLSerializer();
-							xmlString = serializer.serializeToString(xmlDocument);
-							xmlString = vkbeautify.xml(xmlString);														
-							//Download a document with the xml-schema
-							download(theName+"_"+d.name+'.xml',xmlString);						
-						},
-						onMouseUp: function(elm, d, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					}
-					]
-					
-					
-					
-					
-
-					// Update the nodes…
-					var treeNode = svgGroup.selectAll("g.treeNode")
-						.data(nodes, function(d) {
-							return d.id || (d.id = ++i);
-						});
-
-					var dblclick_timer = false;
-					// Enter any new nodes at the parent's previous position.
-					var nodeEnter = treeNode.enter().append('g')
-					  .attr('class', 'treeNode')
-					  .attr("transform", function(d) {
-						return "translate(" + source.y0 + "," + source.x0 + ")";
-					})
-					.on('contextmenu', d3.contextMenu(nodeMenu))
-					.on("mousedown", function(d) {
-						if (d3.event.which != 3)
-						{
-							// if double click timer is active, this click is the double click
-							if ( dblclick_timer )
-							{
-								clearTimeout(dblclick_timer)
-								dblclick_timer = false
-								// double click code code comes here
-								//console.log("DOUBLE CLICK")
-								dblclick(d);
-							}
-							// otherwise, what to do after single click (double click has timed out)
-							else dblclick_timer = setTimeout( function(){
-								dblclick_timer = false
-								// single click code code comes here
-								//console.log("SINGLE CLICK")
-								click(d);
-							}, 250)
-						}
-					})
-						
-					nodeEnter.append("circle")
-						.attr('class', 'nodeCircle')
-						.attr("r", 0)
-						.style("fill", function(d) {
-							if (d._children)
-							{
-								if(theName.includes("Input")){return '#ea9999'}
-								else if(theName.includes("Output")){return '#d6ea99'}
-								else {return "lightsteelblue"}
-							}
-							else {return "#fff"}
-						})
-						.style("stroke", function(d) {
-							if(theName.includes("Input")){
-								//console.log(d);
-								return '#CC0000'}
-							else if(theName.includes("Output")){
-								//console.log(d);
-								return '#99CC00'}
-						})
-						.attr("cx", function(d) {return xOffset});
-
-					nodeEnter.append("text")
-						.attr("x", function(d) 
-						{
-								return d.children || d._children ? -10+xOffset : 10+xOffset;
-						})
-						.attr("dy", ".35em")
-						.attr('class', 'nodeText')
-						.attr("text-anchor", function(d) {
-							return d.children || d._children ? "end" : "start";
-						})
-						.text(function(d) {
-							return d.text;
-						})
-						.style("fill-opacity", 0)
-						
-
-					// Update the text to reflect whether node has children or not.
-					treeNode.select('text')
-						.attr("x", function(d) {
-							return d.children || d._children ? -10+xOffset : 10+xOffset;
-						})
-						.attr("text-anchor", function(d) {
-							return d.children || d._children ? "end" : "start";
-						})
-						.text(function(d) {
-							return d.text;
-						});
-
-					// Change the circle fill depending on whether it has children and is collapsed
-					treeNode.select("circle.nodeCircle")
-						.attr("r", 4.5)
-						.style("fill", function(d) {
-							if (d._children)
-							{
-								if (d._children)
-								{
-									if(theName.includes("Input")){return '#ea9999'}
-									else if(theName.includes("Output")){return '#d6ea99'}
-									else {return "lightsteelblue"}
-								}
-								else {return "#fff"}
-							}
-							else{return "#fff";}
-						})					
-								
-					// UPDATE		
-					// Transition nodes to their new position.
-					var nodeUpdate = treeNode.transition()
-						.duration(duration)
-						.attr("transform", function(d) {
-							return "translate(" + d.y + "," + d.x + ")";
-						});
-
-					// Fade the text in
-					nodeUpdate.select("text")
-						.style("fill-opacity", 1);
-					
-					nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
-					
-					// Remove any exiting nodes
-					var nodeExit = treeNode.exit().transition()
-					  .duration(duration)
-					  .attr("transform", function(d) {
-						  return "translate(" + source.y + "," + source.x + ")";
-					  })
-					  .remove();
-
-					// Update the links…
-					var link = svgGroup.selectAll("path.treeLink")
-						.data(links, function(d) {
-							return d.target.id;
-						});
-
-					// Enter any new links at the parent's previous position.
-					link.enter().insert("path", "g")
-						.attr("class", "treeLink")
-						.attr("d", function(d) {
-							var o = {
-								x: source.x0,
-								y: source.y0
-							};
-							return diagonal({
-								source: o,
-								target: o
-							});
-						});
-
-					// Transition links to their new position.
-					link.transition()
-						.duration(duration)
-						.attr("d", diagonal);
-
-					// Transition exiting nodes to the parent's new position.
-					link.exit().transition()
-						.duration(duration)
-						.attr("d", function(d) {
-							var o = {
-								x: source.x,
-								y: source.y
-							};
-							return diagonal({
-								source: o,
-								target: o
-							});
-						})
-						.remove();
-					
-					// Stash the old positions for transition.
-					nodes.forEach(function(d) {						
-						d.x0 = d.x;
-						d.y0 = d.y;
-					});
-				}
-			}
-
-			
-			//aigner: Here the data is read and the sankey diagram is created
-			//#####################################################################//
-			var graphs,	currentGraph, varCategories, entireData;
-			function startSankeyDiagram(data, graphID) 
-			{
-				entireData = data;
-				graphs =  entireData.graphs;
-				for (var i=0;i<graphs.length;i++)
-				{
-					if (graphs[i].id==graphID)
-					{
-						currentGraph = graphs[i]
-					}
-				}
-				varCategories =  entireData.categories;
-				
-				
-				var graph = currentGraph.xdsm;
-				var theNodes = graph.nodes
-				var theLinks = graph.edges
-				theLinks.forEach(function (link) {
-				  link.source = link.from;
-				  link.target = link.to;
-				  link.value = link.name.split(",").length
-				});
-				
-				//################################################################################################//	
-				var headerDiv = sankeyDiagramDiv.append("div").attr("class","panel panel-primary")
-				headerDiv.append("div").attr("class","panel-heading text-center")
-						.append("h3")
-						.attr("class","panel-title")
-						.style("font-family","Arial")
-						.style("font-size","20pt")
-						.text("Sankey Diagram")
-				var name_tmp="";
-				if (currentGraph.name){name_tmp=currentGraph.name}
-				else{name_tmp="Graph " + currentGraph.id}
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph name: " + name_tmp)
-				headerDiv.append("div").attr("class","panel-body")
-					.style("font-family","Arial")
-					.style("font-size","16pt")
-					.text("Graph description: " + currentGraph.description)
-				//################################################################################################//	
-				
-				//aigner: Tree option menu to select which kind of tree view the user wants to see
-				//#####################################################################//
-				function showFullTree(categoryID, categoryDescr)
-				{
-					var name_tmp = "Full data model tree view; Categorization: " + categoryDescr;
-					var emptyArray="";
-					var allLinks = d3.selectAll(".link");
-					var theSchema = currentGraph.variableSchemes[categoryID];
-					createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
-				}
-				
-				var childrenItems = [];
-				for (var j=0; j< varCategories.length; j++)
-				{
-					childrenItems.push({title: 'according to ' + varCategories[j].description,
-								   varCategory: varCategories[j].name,
-								   description: varCategories[j].description,
-								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
-								   onMouseOver: function(elm,d,i){}})
-				}
-				var treeOptionMenu = [
-				{
-					title: 'Show variable tree...',
-					onMouseDown: function(elm, d, i) {
-					},
-					onMouseUp: function(elm, d, i) {
-					},
-					onMouseOver: function(elm, d, i) {
-					},
-					childrenItems: childrenItems
-				}
-				]
-				//#####################################################################//
-				
-				
-				//aigner: treeLayout in the bottom
-				//################################################################################################//		
-				//aigner: Data Model Expand Button
-				//##########################################################
-				var dataModelDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
-				var ul = dataModelDiv.append("ul")
-				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
-				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
-					.attr("align","left")
-					.style("margin-left","6px")
-					.style("margin-right","-10px")
-					.style("margin-top","10px")
-					.style("margin-bottom","0px")
-					.attr("height","20")
-					.attr("width","20")
-				dropdown1.append("a").text("Data Model")
-				var links = dropdown1.append("ul");
-				for (var j=0; j< varCategories.length; j++)
-				{
-					//console.log(varCategories[j])
-					var linkLi = links.append("li");
-					var linkA = linkLi.append("a")
-						.attr("id",j)
-						.text(varCategories[j].description)
-						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-						.on("click", function()
-						{		
-							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
-						})
-				}
-				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
-				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
-				//##########################################################
-				//################################################################################################//
-				
-				d3.select(".dataModelDiv").moveToBack()
-				headerDiv.moveToBack()
-				d3.select(".newDiv").moveToBack()
-				d3.select(".vispackDiv").moveToBack()
-				
-				biHiSankey
-				  .nodes(theNodes)
-				  .links(theLinks)
-				  .initializeNodes(function (node) {
-					node.state = node.parent ? "contained" : "collapsed";
-				  })
-				  .layout(LAYOUT_INTERATIONS);
-
-				disableUserInterractions(2 * TRANSITION_DURATION);
-				
-				update();
-			};
-			//#####################################################################//
-			startSankeyDiagram(data,graphID);
-			
-			},{"d3":1}]},{},[2]);
-		}
-		</script>
-    </body>
-</html>
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+<meta name="format-detection" content="telephone=no">
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-status-bar-style" content="default">
+<style>
+*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
+
+a:link {
+	color:#555;
+	text-decoration: underline;
+}
+a:visited {color:#999;}
+
+.wordWrap {
+    word-wrap: break-word;      /* IE 5.5-7 */
+    white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */
+    white-space: pre-wrap;      /* current browsers */
+	width: 800px;
+    margin-top: 16px;
+	color:#555555;
+	margin:20px 10px;
+	font-family:Arial;
+	font-size:12pt;
+}
+
+
+/*
+* XDSMjs
+* Copyright 2016 Rémi Lafage
+*/
+
+/* Component types */
+.xdsm .user {
+visibility: hidden;
+}
+
+.xdsm .coordinator {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .converger {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .doe {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .surrogatemodel {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .rcganalysis {
+fill: #E5DEB3;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .precouplinganalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .preiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .coupledanalysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postcouplinganalysis {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .consistencyconstraintfunction {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .lp_optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .analysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mdo {
+fill: #FFCCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .function {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mda {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .metamodel {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Title */
+.xdsm g.title text {
+display: block;
+font-size: 2em;
+margin-top: 0.67em;
+margin-bottom: 0.67em;
+margin-left: 0;
+margin-right: 0;
+font-family:Arial;
+}
+.xdsm g.title rect {
+fill: none;
+}
+
+
+/* Text Default */
+.xdsm text {
+fill: black;
+stroke: none;
+font-size: 16pt;
+font-family:Arial;
+}
+.xdsm tspan.sub {
+font-size: small;
+font-family:Arial;
+}
+.xdsm tspan.sup {
+font-size: small;
+font-family:Arial;
+}
+
+/* Data */
+.xdsm .dataInter polygon {
+fill: #E5E5E5;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .dataIO polygon {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Dataflow */
+.xdsm g.dataflow {
+fill: none;
+stroke: grey;
+stroke-width: 8px;
+}
+
+/* Workflow */
+.xdsm g.workflow {
+fill: none;
+stroke: black;
+stroke-width: 2px;
+}
+
+/* Tooltip */
+div.tooltip {
+position: absolute;
+text-align: center;
+font-size: 16pt;
+padding: 10px;
+background: lightsteelblue;
+border: 0px;
+border-radius: 8px;
+pointer-events: none;
+}
+
+div.treeDiv {
+position: absolute;
+}
+
+div.contextDiv {
+position: absolute;
+}
+
+sub, sup {
+/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
+font-size: 75%;
+/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
+line-height: 0;
+/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
+position: relative;
+/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
+vertical-align: baseline;
+}
+
+sup {
+/* Move the superscripted text up */
+top: -0.5em;
+}
+
+sub {
+/* Move the subscripted text down, but only half as far down as the superscript moved up */
+bottom: -0.5em;
+}
+
+
+/*Edge Bundles Styles*/
+/*##############################################################*/
+.edgeBundlesNode {
+  fill: #aaa;
+}
+
+.edgeBundlesNode:hover {
+  fill: #555555;
+}
+
+.edgeBundlesLink {
+  stroke: #3399FF;
+  stroke-opacity: 0.4;
+  stroke-width: 2px;
+  fill: none;
+  
+}
+
+.invisibleLink {
+  stroke: #000;
+  stroke-opacity: 0;
+  stroke-width: 15px;
+  fill: none;
+}
+.invisibleLink:hover {
+  stroke: #3399FF;
+  stroke-opacity: 1.0;
+  stroke-width: 5px;
+  fill: none;
+}
+
+.edgeBundlesNode:hover,
+.edgeBundlesNode--source,
+.edgeBundlesNode--target {
+  font-weight: 700;
+}
+
+.edgeBundlesNode--source {
+  fill: #99CC00;
+}
+
+.edgeBundlesNode--target {
+  fill: #CC0000;
+}
+
+.edgeBundlesLink--target,
+.edgeBundlesLink--source{
+  stroke-width: 5px;
+}
+
+.edgeBundlesLink--source {
+  stroke: #CC0000;
+  stroke-opacity: .5;
+}
+
+.edgeBundlesLink--target {
+  stroke: #99CC00;
+  stroke-opacity: .5;
+}
+
+.sankeyNode rect {
+  cursor: grab;
+  shape-rendering: crispEdges;
+}
+
+.sankeyNode text {
+  pointer-events: none;
+  text-shadow: 1px 1px 2px #fff;
+  font-size: 0.8em;
+  font-family: sans-serif;
+}
+
+#tooltip {
+  position: absolute;
+  pointer-events: none;
+  font-size: 0.7em;
+  font-family: sans-serif;
+  padding: 3px;
+  width: auto;
+  height: auto;
+  background-color: #F2F2F2;
+  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4);
+  -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4);
+  box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4);
+  pointer-events: none;
+}
+
+.value {
+  white-space: pre-line;
+  margin: 0;
+}
+
+/* Aigner: New styles for tree layout */
+.treeNode {
+cursor: pointer;
+}
+
+.overlay{
+background-color:#FFF;
+}
+
+.treeNode circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.treeNode text {
+font-size:16pt; 
+font-family:Arial;
+}
+
+.treeLink {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	width: 300px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #3399FF;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 290px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #3399FF;
+	color: #fefefe;
+}
+
+.button {
+fill: #555555;
+stroke: white;
+stroke-width: 1.5;
+}
+
+.copyRightText {
+font-family: Arial;
+font-size: 12pt;
+fill: #555555;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #555555;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+
+.dataModelDiv {
+	position:relative;
+	top: 0px;
+	left: 10px;
+	background-color: none;
+}
+.dataModelDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 16pt;
+    padding-top: 5px;
+    padding-right: 12px;
+    padding-bottom: 5px;
+    padding-left: 16px;
+    display:inline-block;
+}
+.dataModelDiv ul {
+  display:  inline-block;
+  margin: 0;
+  padding: 0;
+  background-color: #555555;
+  border-radius: 5px;
+  border-style: solid; 
+  border-width: 2px;
+  border-color: #555555;
+}
+.dataModelDiv ul li {display: inline-block;}
+.dataModelDiv ul li:hover {
+	background: #888;
+}
+.dataModelDiv ul li:hover ul {display: block;}
+.dataModelDiv ul li ul {
+  position: absolute;
+  align: right;
+  left: 150px;
+  top: 0px;
+  min-width: 180px;
+  display: none;
+}
+.dataModelDiv ul li ul li { 
+  background: #555555; 
+  display: block;
+}
+.dataModelDiv ul li ul li a {
+	display:block !important
+} 
+.dataModelDiv ul li ul li:hover {background: #3399FF;}
+
+table {
+	width: 800px;
+	table-layout:fixed;
+}
+
+
+
+
+table, th, td {
+	font-family: Arial;
+    font-size: 16pt;
+	background-color: white;
+    border: 2pt solid darkgrey;
+    border-collapse: collapse;
+	text-align: left;
+	word-wrap:break-word;
+}
+}
+th, td {
+    padding-top: 6px;
+    padding-right: 20px;
+    padding-bottom: 6px;
+    padding-left: 20px;
+	min-width: 100px;
+	max-width: 400px;
+}
+
+.remCircle {
+	stroke: black;
+	stroke-width: 2;
+	fill: red;
+	fill-opacity: .6
+}
+.remMinus {
+	stroke: black;
+	stroke-width: 2;
+}
+
+</style>
+    <head>
+		<meta charset="utf-8">
+		<title>VISTOMS (Visualization Tool for MDO Systems)</title>
+    </head>
+    <body>
+		<script>	
+			(function() {
+			/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+			!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+			a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d));
+			},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+			function createShiftArr(step) {
+
+				var space = '    ';
+				
+				if ( isNaN(parseInt(step)) ) {  // argument is string
+					space = step;
+				} else { // argument is integer
+					switch(step) {
+						case 1: space = ' '; break;
+						case 2: space = '  '; break;
+						case 3: space = '   '; break;
+						case 4: space = '    '; break;
+						case 5: space = '     '; break;
+						case 6: space = '      '; break;
+						case 7: space = '       '; break;
+						case 8: space = '        '; break;
+						case 9: space = '         '; break;
+						case 10: space = '          '; break;
+						case 11: space = '           '; break;
+						case 12: space = '            '; break;
+					}
+				}
+
+				var shift = ['\n']; // array of shifts
+				for(ix=0;ix<100;ix++){
+					shift.push(shift[ix]+space); 
+				}
+				return shift;
+			}
+
+			function vkbeautify(){
+				this.step = '    '; // 4 spaces
+				this.shift = createShiftArr(this.step);
+			};
+
+			vkbeautify.prototype.xml = function(text,step) {
+
+				var ar = text.replace(/>\s{0,}</g,"><")
+							 .replace(/</g,"~::~<")
+							 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+							 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+							 .split('~::~'),
+					len = ar.length,
+					inComment = false,
+					deep = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;
+
+					for(ix=0;ix<len;ix++) {
+						// start comment or <![CDATA[...]]> or <!DOCTYPE //
+						if(ar[ix].search(/<!/) > -1) { 
+							str += shift[deep]+ar[ix];
+							inComment = true; 
+							// end comment  or <![CDATA[...]]> //
+							if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+								inComment = false; 
+							}
+						} else 
+						// end comment  or <![CDATA[...]]> //
+						if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+							str += ar[ix];
+							inComment = false; 
+						} else 
+						// <elm></elm> //
+						if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+							/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+							str += ar[ix];
+							if(!inComment) deep--;
+						} else
+						 // <elm> //
+						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+							str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+						} else 
+						 // <elm>...</elm> //
+						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+						} else 
+						// </elm> //
+						if(ar[ix].search(/<\//) > -1) { 
+							str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+						} else 
+						// <elm/> //
+						if(ar[ix].search(/\/>/) > -1 ) { 
+							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+						} else 
+						// <? xml ... ?> //
+						if(ar[ix].search(/<\?/) > -1) { 
+							str += shift[deep]+ar[ix];
+						} else 
+						// xmlns //
+						if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+							str += shift[deep]+ar[ix];
+						} 
+						
+						else {
+							str += ar[ix];
+						}
+					}
+					
+				return  (str[0] == '\n') ? str.slice(1) : str;
+			}
+
+			vkbeautify.prototype.json = function(text,step) {
+
+				var step = step ? step : this.step;
+				
+				if (typeof JSON === 'undefined' ) return text; 
+				
+				if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+				if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+					
+				return text; // text is not string nor object
+			}
+
+			vkbeautify.prototype.css = function(text, step) {
+
+				var ar = text.replace(/\s{1,}/g,' ')
+							.replace(/\{/g,"{~::~")
+							.replace(/\}/g,"~::~}~::~")
+							.replace(/\;/g,";~::~")
+							.replace(/\/\*/g,"~::~/*")
+							.replace(/\*\//g,"*/~::~")
+							.replace(/~::~\s{0,}~::~/g,"~::~")
+							.split('~::~'),
+					len = ar.length,
+					deep = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;
+					
+					for(ix=0;ix<len;ix++) {
+
+						if( /\{/.exec(ar[ix]))  { 
+							str += shift[deep++]+ar[ix];
+						} else 
+						if( /\}/.exec(ar[ix]))  { 
+							str += shift[--deep]+ar[ix];
+						} else
+						if( /\*\\/.exec(ar[ix]))  { 
+							str += shift[deep]+ar[ix];
+						}
+						else {
+							str += shift[deep]+ar[ix];
+						}
+					}
+					return str.replace(/^\n{1,}/,'');
+			}
+
+			//----------------------------------------------------------------------------
+
+			function isSubquery(str, parenthesisLevel) {
+				return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+			}
+
+			function split_sql(str, tab) {
+
+				return str.replace(/\s{1,}/g," ")
+
+							.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+							.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+							.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+							.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+							.replace(/ END /ig,"~::~"+tab+"END ")
+							.replace(/ FROM /ig,"~::~FROM ")
+							.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+							.replace(/ HAVING /ig,"~::~HAVING ")
+							//.replace(/ SET /ig," SET~::~")
+							.replace(/ IN /ig," IN ")
+							
+							.replace(/ JOIN /ig,"~::~JOIN ")
+							.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+							.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+							.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+							.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+							
+							.replace(/ ON /ig,"~::~"+tab+"ON ")
+							.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+							.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+							.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+							.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+							.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+							
+							.replace(/ THEN /ig," THEN~::~"+tab+"")
+							.replace(/ UNION /ig,"~::~UNION~::~")
+							.replace(/ USING /ig,"~::~USING ")
+							.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+							.replace(/ WHERE /ig,"~::~WHERE ")
+							.replace(/ WITH /ig,"~::~WITH ")
+							
+							//.replace(/\,\s{0,}\(/ig,",~::~( ")
+							//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+							.replace(/ ALL /ig," ALL ")
+							.replace(/ AS /ig," AS ")
+							.replace(/ ASC /ig," ASC ")	
+							.replace(/ DESC /ig," DESC ")	
+							.replace(/ DISTINCT /ig," DISTINCT ")
+							.replace(/ EXISTS /ig," EXISTS ")
+							.replace(/ NOT /ig," NOT ")
+							.replace(/ NULL /ig," NULL ")
+							.replace(/ LIKE /ig," LIKE ")
+							.replace(/\s{0,}SELECT /ig,"SELECT ")
+							.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+							.replace(/ SET /ig," SET ")
+										
+							.replace(/~::~{1,}/g,"~::~")
+							.split('~::~');
+			}
+
+			vkbeautify.prototype.sql = function(text,step) {
+
+				var ar_by_quote = text.replace(/\s{1,}/g," ")
+										.replace(/\'/ig,"~::~\'")
+										.split('~::~'),
+					len = ar_by_quote.length,
+					ar = [],
+					deep = 0,
+					tab = this.step,//+this.step,
+					inComment = true,
+					inQuote = false,
+					parenthesisLevel = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;;
+
+					for(ix=0;ix<len;ix++) {
+						if(ix%2) {
+							ar = ar.concat(ar_by_quote[ix]);
+						} else {
+							ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+						}
+					}
+					
+					len = ar.length;
+					for(ix=0;ix<len;ix++) {
+						
+						parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+						
+						if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+						} 
+						
+						if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+						} 
+						
+						if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+							deep++;
+							str += shift[deep]+ar[ix];
+						} else 
+						if( /\'/.exec(ar[ix]) )  { 
+							if(parenthesisLevel<1 && deep) {
+								deep--;
+							}
+							str += ar[ix];
+						}
+						else  { 
+							str += shift[deep]+ar[ix];
+							if(parenthesisLevel<1 && deep) {
+								deep--;
+							}
+						} 
+						var junk = 0;
+					}
+
+					str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+					return str;
+			}
+
+
+			vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+				var str = preserveComments ? text
+										   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+												 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+				return  str.replace(/>\s{0,}</g,"><"); 
+			}
+
+			vkbeautify.prototype.jsonmin = function(text) {
+
+				if (typeof JSON === 'undefined' ) return text; 
+				
+				return JSON.stringify(JSON.parse(text), null, 0); 
+							
+			}
+
+			vkbeautify.prototype.cssmin = function(text, preserveComments) {
+				
+				var str = preserveComments ? text
+										   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+				return str.replace(/\s{1,}/g,' ')
+						  .replace(/\{\s{1,}/g,"{")
+						  .replace(/\}\s{1,}/g,"}")
+						  .replace(/\;\s{1,}/g,";")
+						  .replace(/\/\*\s{1,}/g,"/*")
+						  .replace(/\*\/\s{1,}/g,"*/");
+			}
+
+			vkbeautify.prototype.sqlmin = function(text) {
+				return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+			}
+
+			window.vkbeautify = new vkbeautify();
+
+			})();
+
+
+			/*!
+			 * Bootstrap v3.3.7 (http://getbootstrap.com)
+			 * Copyright 2011-2016 Twitter, Inc.
+			 * Licensed under the MIT license
+			 */
+			if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
+			this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
+
+
+			/**
+			 * bootbox.js v4.4.0
+			 *
+			 * http://bootboxjs.com/license.txt
+			 */
+			!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d.call(c,a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",textarea:"<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",date:"<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",time:"<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",number:"<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",password:"<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"}},o={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback.call(this):!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,!1)},a.buttons.confirm.callback=function(){return a.callback.call(this,!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback.call(this,c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!b.isArray(k))throw new Error("Please pass an array of input options");if(!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),a.maxlength&&h.attr("maxlength",a.maxlength),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var d=b(n.dialog),f=d.find(".modal-dialog"),i=d.find(".modal-body"),j=a.buttons,k="",l={onEscape:a.onEscape};if(b.fn.modal===c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(g(j,function(a,b){k+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",l[a]=b.callback}),i.find(".bootbox-body").html(a.message),a.animate===!0&&d.addClass("fade"),a.className&&d.addClass(a.className),"large"===a.size?f.addClass("modal-lg"):"small"===a.size&&f.addClass("modal-sm"),a.title&&i.before(n.header),a.closeButton){var m=b(n.closeButton);a.title?d.find(".modal-header").prepend(m):m.css("margin-top","-10px").prependTo(i)}return a.title&&d.find(".modal-title").html(a.title),k.length&&(i.after(n.footer),d.find(".modal-footer").html(k)),d.on("hidden.bs.modal",function(a){a.target===this&&d.remove()}),d.on("shown.bs.modal",function(){d.find(".btn-primary:first").focus()}),"static"!==a.backdrop&&d.on("click.dismiss.bs.modal",function(a){d.children(".modal-backdrop").length&&(a.currentTarget=d.children(".modal-backdrop").get(0)),a.target===a.currentTarget&&d.trigger("escape.close.bb")}),d.on("escape.close.bb",function(a){l.onEscape&&e(a,d,l.onEscape)}),d.on("click",".modal-footer button",function(a){var c=b(this).data("bb-handler");e(a,d,l[c])}),d.on("click",".bootbox-close-button",function(a){e(a,d,l.onEscape)}),d.on("keyup",function(a){27===a.which&&d.trigger("escape.close.bb")}),b(a.container).append(d),d.modal({backdrop:a.backdrop?"static":!1,keyboard:!1,show:!1}),a.show&&d.modal("show"),d},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.addLocale=function(a,c){return b.each(["OK","CANCEL","CONFIRM"],function(a,b){if(!c[b])throw new Error("Please supply a translation for '"+b+"'")}),q[a]={OK:c.OK,CANCEL:c.CANCEL,CONFIRM:c.CONFIRM},p},p.removeLocale=function(a){return delete q[a],p},p.setLocale=function(a){return p.setDefaults("locale",a)},p.init=function(c){return a(c||b)},p});
+			
+			/*!
+			 * Bowser - a browser detector
+			 * https://github.com/ded/bowser
+			 * MIT License | (c) Dustin Diaz 2015
+			 */
+			//#################################################################################################
+			!function (root, name, definition) {
+			  if (typeof module != 'undefined' && module.exports) module.exports = definition()
+			  else if (typeof define == 'function' && define.amd) define(name, definition)
+			  else root[name] = definition()
+			}(this, 'bowser', function () {
+			  /**
+				* See useragents.js for examples of navigator.userAgent
+				*/
+
+			  var t = true
+
+			  function detect(ua) {
+
+				function getFirstMatch(regex) {
+				  var match = ua.match(regex);
+				  return (match && match.length > 1 && match[1]) || '';
+				}
+
+				function getSecondMatch(regex) {
+				  var match = ua.match(regex);
+				  return (match && match.length > 1 && match[2]) || '';
+				}
+
+				var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
+				  , likeAndroid = /like android/i.test(ua)
+				  , android = !likeAndroid && /android/i.test(ua)
+				  , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
+				  , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
+				  , chromeos = /CrOS/.test(ua)
+				  , silk = /silk/i.test(ua)
+				  , sailfish = /sailfish/i.test(ua)
+				  , tizen = /tizen/i.test(ua)
+				  , webos = /(web|hpw)os/i.test(ua)
+				  , windowsphone = /windows phone/i.test(ua)
+				  , samsungBrowser = /SamsungBrowser/i.test(ua)
+				  , windows = !windowsphone && /windows/i.test(ua)
+				  , mac = !iosdevice && !silk && /macintosh/i.test(ua)
+				  , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
+				  , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
+				  , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
+				  , tablet = /tablet/i.test(ua)
+				  , mobile = !tablet && /[^-]mobi/i.test(ua)
+				  , xbox = /xbox/i.test(ua)
+				  , result
+
+				if (/opera/i.test(ua)) {
+				  //  an old Opera
+				  result = {
+					name: 'Opera'
+				  , opera: t
+				  , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				} else if (/opr|opios/i.test(ua)) {
+				  // a new Opera
+				  result = {
+					name: 'Opera'
+					, opera: t
+					, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (/SamsungBrowser/i.test(ua)) {
+				  result = {
+					name: 'Samsung Internet for Android'
+					, samsungBrowser: t
+					, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/coast/i.test(ua)) {
+				  result = {
+					name: 'Opera Coast'
+					, coast: t
+					, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/yabrowser/i.test(ua)) {
+				  result = {
+					name: 'Yandex Browser'
+				  , yandexbrowser: t
+				  , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/ucbrowser/i.test(ua)) {
+				  result = {
+					  name: 'UC Browser'
+					, ucbrowser: t
+					, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/mxios/i.test(ua)) {
+				  result = {
+					name: 'Maxthon'
+					, maxthon: t
+					, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/epiphany/i.test(ua)) {
+				  result = {
+					name: 'Epiphany'
+					, epiphany: t
+					, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/puffin/i.test(ua)) {
+				  result = {
+					name: 'Puffin'
+					, puffin: t
+					, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
+				  }
+				}
+				else if (/sleipnir/i.test(ua)) {
+				  result = {
+					name: 'Sleipnir'
+					, sleipnir: t
+					, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/k-meleon/i.test(ua)) {
+				  result = {
+					name: 'K-Meleon'
+					, kMeleon: t
+					, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (windowsphone) {
+				  result = {
+					name: 'Windows Phone'
+				  , windowsphone: t
+				  }
+				  if (edgeVersion) {
+					result.msedge = t
+					result.version = edgeVersion
+				  }
+				  else {
+					result.msie = t
+					result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/msie|trident/i.test(ua)) {
+				  result = {
+					name: 'Internet Explorer'
+				  , msie: t
+				  , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
+				  }
+				} else if (chromeos) {
+				  result = {
+					name: 'Chrome'
+				  , chromeos: t
+				  , chromeBook: t
+				  , chrome: t
+				  , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+				  }
+				} else if (/chrome.+? edge/i.test(ua)) {
+				  result = {
+					name: 'Microsoft Edge'
+				  , msedge: t
+				  , version: edgeVersion
+				  }
+				}
+				else if (/vivaldi/i.test(ua)) {
+				  result = {
+					name: 'Vivaldi'
+					, vivaldi: t
+					, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (sailfish) {
+				  result = {
+					name: 'Sailfish'
+				  , sailfish: t
+				  , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/seamonkey\//i.test(ua)) {
+				  result = {
+					name: 'SeaMonkey'
+				  , seamonkey: t
+				  , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/firefox|iceweasel|fxios/i.test(ua)) {
+				  result = {
+					name: 'Firefox'
+				  , firefox: t
+				  , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
+				  }
+				  if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
+					result.firefoxos = t
+				  }
+				}
+				else if (silk) {
+				  result =  {
+					name: 'Amazon Silk'
+				  , silk: t
+				  , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/phantom/i.test(ua)) {
+				  result = {
+					name: 'PhantomJS'
+				  , phantom: t
+				  , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/slimerjs/i.test(ua)) {
+				  result = {
+					name: 'SlimerJS'
+					, slimer: t
+					, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
+				  result = {
+					name: 'BlackBerry'
+				  , blackberry: t
+				  , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (webos) {
+				  result = {
+					name: 'WebOS'
+				  , webos: t
+				  , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
+				  };
+				  /touchpad\//i.test(ua) && (result.touchpad = t)
+				}
+				else if (/bada/i.test(ua)) {
+				  result = {
+					name: 'Bada'
+				  , bada: t
+				  , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
+				  };
+				}
+				else if (tizen) {
+				  result = {
+					name: 'Tizen'
+				  , tizen: t
+				  , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
+				  };
+				}
+				else if (/qupzilla/i.test(ua)) {
+				  result = {
+					name: 'QupZilla'
+					, qupzilla: t
+					, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
+				  }
+				}
+				else if (/chromium/i.test(ua)) {
+				  result = {
+					name: 'Chromium'
+					, chromium: t
+					, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (/chrome|crios|crmo/i.test(ua)) {
+				  result = {
+					name: 'Chrome'
+					, chrome: t
+					, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (android) {
+				  result = {
+					name: 'Android'
+					, version: versionIdentifier
+				  }
+				}
+				else if (/safari|applewebkit/i.test(ua)) {
+				  result = {
+					name: 'Safari'
+				  , safari: t
+				  }
+				  if (versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				}
+				else if (iosdevice) {
+				  result = {
+					name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
+				  }
+				  // WTF: version is not part of user agent in web apps
+				  if (versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				}
+				else if(/googlebot/i.test(ua)) {
+				  result = {
+					name: 'Googlebot'
+				  , googlebot: t
+				  , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
+				  }
+				}
+				else {
+				  result = {
+					name: getFirstMatch(/^(.*)\/(.*) /),
+					version: getSecondMatch(/^(.*)\/(.*) /)
+				 };
+			   }
+
+				// set webkit or gecko flag for browsers based on these engines
+				if (!result.msedge && /(apple)?webkit/i.test(ua)) {
+				  if (/(apple)?webkit\/537\.36/i.test(ua)) {
+					result.name = result.name || "Blink"
+					result.blink = t
+				  } else {
+					result.name = result.name || "Webkit"
+					result.webkit = t
+				  }
+				  if (!result.version && versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				} else if (!result.opera && /gecko\//i.test(ua)) {
+				  result.name = result.name || "Gecko"
+				  result.gecko = t
+				  result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
+				}
+
+				// set OS flags for platforms that have multiple browsers
+				if (!result.windowsphone && !result.msedge && (android || result.silk)) {
+				  result.android = t
+				} else if (!result.windowsphone && !result.msedge && iosdevice) {
+				  result[iosdevice] = t
+				  result.ios = t
+				} else if (mac) {
+				  result.mac = t
+				} else if (xbox) {
+				  result.xbox = t
+				} else if (windows) {
+				  result.windows = t
+				} else if (linux) {
+				  result.linux = t
+				}
+
+				function getWindowsVersion (s) {
+				  switch (s) {
+					case 'NT': return 'NT'
+					case 'XP': return 'XP'
+					case 'NT 5.0': return '2000'
+					case 'NT 5.1': return 'XP'
+					case 'NT 5.2': return '2003'
+					case 'NT 6.0': return 'Vista'
+					case 'NT 6.1': return '7'
+					case 'NT 6.2': return '8'
+					case 'NT 6.3': return '8.1'
+					case 'NT 10.0': return '10'
+					default: return undefined
+				  }
+				}
+				
+				// OS version extraction
+				var osVersion = '';
+				if (result.windows) {
+				  osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
+				} else if (result.windowsphone) {
+				  osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
+				} else if (result.mac) {
+				  osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
+				  osVersion = osVersion.replace(/[_\s]/g, '.');
+				} else if (iosdevice) {
+				  osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
+				  osVersion = osVersion.replace(/[_\s]/g, '.');
+				} else if (android) {
+				  osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
+				} else if (result.webos) {
+				  osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
+				} else if (result.blackberry) {
+				  osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
+				} else if (result.bada) {
+				  osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
+				} else if (result.tizen) {
+				  osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
+				}
+				if (osVersion) {
+				  result.osversion = osVersion;
+				}
+
+				// device type extraction
+				var osMajorVersion = !result.windows && osVersion.split('.')[0];
+				if (
+					 tablet
+				  || nexusTablet
+				  || iosdevice == 'ipad'
+				  || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
+				  || result.silk
+				) {
+				  result.tablet = t
+				} else if (
+					 mobile
+				  || iosdevice == 'iphone'
+				  || iosdevice == 'ipod'
+				  || android
+				  || nexusMobile
+				  || result.blackberry
+				  || result.webos
+				  || result.bada
+				) {
+				  result.mobile = t
+				}
+
+				// Graded Browser Support
+				// http://developer.yahoo.com/yui/articles/gbs
+				if (result.msedge ||
+					(result.msie && result.version >= 10) ||
+					(result.yandexbrowser && result.version >= 15) ||
+						(result.vivaldi && result.version >= 1.0) ||
+					(result.chrome && result.version >= 20) ||
+					(result.samsungBrowser && result.version >= 4) ||
+					(result.firefox && result.version >= 20.0) ||
+					(result.safari && result.version >= 6) ||
+					(result.opera && result.version >= 10.0) ||
+					(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
+					(result.blackberry && result.version >= 10.1)
+					|| (result.chromium && result.version >= 20)
+					) {
+				  result.a = t;
+				}
+				else if ((result.msie && result.version < 10) ||
+					(result.chrome && result.version < 20) ||
+					(result.firefox && result.version < 20.0) ||
+					(result.safari && result.version < 6) ||
+					(result.opera && result.version < 10.0) ||
+					(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
+					|| (result.chromium && result.version < 20)
+					) {
+				  result.c = t
+				} else result.x = t
+
+				return result
+			  }
+
+			  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
+
+			  bowser.test = function (browserList) {
+				for (var i = 0; i < browserList.length; ++i) {
+				  var browserItem = browserList[i];
+				  if (typeof browserItem=== 'string') {
+					if (browserItem in bowser) {
+					  return true;
+					}
+				  }
+				}
+				return false;
+			  }
+
+			  /**
+			   * Get version precisions count
+			   *
+			   * @example
+			   *   getVersionPrecision("1.10.3") // 3
+			   *
+			   * @param  {string} version
+			   * @return {number}
+			   */
+			  function getVersionPrecision(version) {
+				return version.split(".").length;
+			  }
+
+			  /**
+			   * Array::map polyfill
+			   *
+			   * @param  {Array} arr
+			   * @param  {Function} iterator
+			   * @return {Array}
+			   */
+			  function map(arr, iterator) {
+				var result = [], i;
+				if (Array.prototype.map) {
+				  return Array.prototype.map.call(arr, iterator);
+				}
+				for (i = 0; i < arr.length; i++) {
+				  result.push(iterator(arr[i]));
+				}
+				return result;
+			  }
+
+			  /**
+			   * Calculate browser version weight
+			   *
+			   * @example
+			   *   compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
+			   *   compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
+			   *   compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
+			   *   compareVersions(['1.10.2.1',  '1.0800.2']);     // -1
+			   *
+			   * @param  {Array<String>} versions versions to compare
+			   * @return {Number} comparison result
+			   */
+			  function compareVersions(versions) {
+				// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
+				var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
+				var chunks = map(versions, function (version) {
+				  var delta = precision - getVersionPrecision(version);
+
+				  // 2) "9" -> "9.0" (for precision = 2)
+				  version = version + new Array(delta + 1).join(".0");
+
+				  // 3) "9.0" -> ["000000000"", "000000009"]
+				  return map(version.split("."), function (chunk) {
+					return new Array(20 - chunk.length).join("0") + chunk;
+				  }).reverse();
+				});
+
+				// iterate in reverse order by reversed chunks array
+				while (--precision >= 0) {
+				  // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
+				  if (chunks[0][precision] > chunks[1][precision]) {
+					return 1;
+				  }
+				  else if (chunks[0][precision] === chunks[1][precision]) {
+					if (precision === 0) {
+					  // all version chunks are same
+					  return 0;
+					}
+				  }
+				  else {
+					return -1;
+				  }
+				}
+			  }
+
+			  /**
+			   * Check if browser is unsupported
+			   *
+			   * @example
+			   *   bowser.isUnsupportedBrowser({
+			   *     msie: "10",
+			   *     firefox: "23",
+			   *     chrome: "29",
+			   *     safari: "5.1",
+			   *     opera: "16",
+			   *     phantom: "534"
+			   *   });
+			   *
+			   * @param  {Object}  minVersions map of minimal version to browser
+			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+			   * @param  {String}  [ua] user agent string
+			   * @return {Boolean}
+			   */
+			  function isUnsupportedBrowser(minVersions, strictMode, ua) {
+				var _bowser = bowser;
+
+				// make strictMode param optional with ua param usage
+				if (typeof strictMode === 'string') {
+				  ua = strictMode;
+				  strictMode = void(0);
+				}
+
+				if (strictMode === void(0)) {
+				  strictMode = false;
+				}
+				if (ua) {
+				  _bowser = detect(ua);
+				}
+
+				var version = "" + _bowser.version;
+				for (var browser in minVersions) {
+				  if (minVersions.hasOwnProperty(browser)) {
+					if (_bowser[browser]) {
+					  if (typeof minVersions[browser] !== 'string') {
+						throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
+					  }
+
+					  // browser version and min supported version.
+					  return compareVersions([version, minVersions[browser]]) < 0;
+					}
+				  }
+				}
+
+				return strictMode; // not found
+			  }
+
+			  /**
+			   * Check if browser is supported
+			   *
+			   * @param  {Object} minVersions map of minimal version to browser
+			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+			   * @param  {String}  [ua] user agent string
+			   * @return {Boolean}
+			   */
+			  function check(minVersions, strictMode, ua) {
+				return !isUnsupportedBrowser(minVersions, strictMode, ua);
+			  }
+
+			  bowser.isUnsupportedBrowser = isUnsupportedBrowser;
+			  bowser.compareVersions = compareVersions;
+			  bowser.check = check;
+
+			  /*
+			   * Set our detect method to the main bowser object so we can
+			   * reuse it to test other user agents.
+			   * This is needed to implement future tests.
+			   */
+			  bowser._detect = detect;
+
+			  return bowser
+			});
+			//#################################################################################################
+
+			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
+
+			if (bowser.name=="Internet Explorer")
+			{
+			alert("OOPS! VISTOMS unfortunately does not work properly on " + bowser.name + ". Please use a different browser to see its awesome visualization features!")
+			}
+
+			function makeKadmosMenu(data)
+			{
+				var imageWidth = 200;
+				var imageHeight = 150;
+				var padding = 10;
+				var rectHeight = 70;
+				var imgSize = 40;
+				var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+				var visPackSvg = visPackDiv.append("svg")
+					.attr("class","visPackSvg")
+					.attr("width",imageWidth*5+40)
+					.attr("height",imageHeight+40)
+					.attr("transform", "translate("
+					  + String(10) + "," + String(10) + ")")			  
+				
+				var visPackFrame = visPackSvg.append("rect")
+					.attr("width",imageWidth*5+12)
+					.attr("height",imageHeight)
+					.attr("fill", "none")
+				
+				var imgs = visPackSvg.selectAll("image1").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("x",5)
+					.attr("xlink:href", fileReference.AGILE_Logo)
+					.attr("width", imageWidth)
+					.attr("height", imageHeight)
+					.attr("position", "relative")
+					
+				var imgs = visPackSvg.selectAll("image2").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("x",210)
+					.attr("y",-5)
+					.attr("xlink:href", fileReference.VISTOMS_Label)
+					.attr("width", "180pt")
+					.attr("height", "70pt")
+					
+					
+					
+				//Set general offset for Buttons, acknowledgements and so on
+				var offset_tmp = 645;	
+				
+				
+				//aigner: Make Acknowledgments, Help and Home buttons
+				//##########################################################
+				visPackSvg.append("rect")
+				.attr("transform", "translate("+ String(offset_tmp+17) + "," + String(0) + ")")
+				.attr("fill", "#555555")
+				.attr("width", 186)
+				.attr("height", 40)
+				
+				function makeButton(anId, aText,aPicFile, anOffset, aScale, picX, picY)
+				{
+					var buttonGroup = visPackSvg.append("a").classed("buttonGroup",true)
+					buttonGroup
+						.attr("class",anId)
+						.append("svg:title").text(aText)
+					var polygon = buttonGroup.append("polygon").classed("button",true)
+						.attr("points", "30,15 22.5,28.0 7.5,28 0,15 7.5,2 22.5,2")
+						.attr("transform", "translate("+ String(anOffset) + "," + String(2) + ") scale(1.2)")
+					buttonGroup.append("image")
+						.attr("xlink:href",aPicFile)
+						.attr("height",50)
+						.attr("width",50)
+						.attr("transform", "translate("+ String(anOffset+picX) + "," + String(picY) + ") scale("+aScale+")")
+					buttonGroup
+						.on("mouseover", function()
+						{
+							polygon.style("fill","#3399FF")
+							d3.select(this).style("cursor", "pointer")
+						})
+						.on("mouseleave", function()
+						{
+							polygon.style("fill","#555555")
+						})
+				}
+				///Home button
+				var distance = 45;
+				var currentOffset = offset_tmp+25;
+				makeButton("id_mainPage","Main Page",fileReference.Home, currentOffset, 0.45, 6.9,7.2);
+				d3.select(".id_mainPage").on("click",function()
+				{		
+					mainPage();
+				})
+				//help button
+				currentOffset+=distance;
+				makeButton("id_turorial","Tutorial",fileReference.Tutorial, currentOffset, 0.45, 6.8, 7.5);
+				d3.select(".id_turorial").on("click",function()
+				{			
+					tutorial();
+				})
+				//Contact button
+				currentOffset+=distance;
+				makeButton("id_contact","Contact the support team",fileReference.Contact, currentOffset, 0.45, 6.9, 9);
+				d3.select(".id_contact").on("click",function()
+				{				
+					sendMail("VISTOMS support");
+				})
+					
+				//Acknowledgements button
+				currentOffset+=distance;
+				makeButton("id_acknowledgements","Acknowledgements",fileReference.Acknowledgements, currentOffset, 0.45, 7, 8);
+				d3.select(".id_acknowledgements").on("click",function()
+				{
+					acknowledgements();
+				})
+				
+				//##########################################################
+				
+				
+				//aigner: make dropwdown section for the multiple MDO graphs tzhat can be visualized
+				//##########################################################
+				var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+				function makeViewButtons(data,name, aView)
+				{
+					var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+					dropdown1.append("a").text(name)
+					dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
+						.attr("align","left")
+						.style("margin-left","6px")
+						.style("margin-right","0px")
+						.style("margin-top","10px")
+						.style("margin-bottom","6px")
+						.attr("height","42")
+						.attr("width","42")
+					var links = dropdown1.append("ul");
+					var graphs_tmp = data.graphs;
+					for (var i=0; i < graphs_tmp.length; i++)
+					{
+						makeDropDown(data,graphs_tmp[i],aView,links)
+					}
+				}
+				function makeDropDown(theData,theGraph,theView,theLinks)
+				{
+					var linkLi = theLinks.append("li");
+					var name_tmp="";
+					if (theGraph.name){name_tmp=theGraph.name}
+					else{name_tmp="Graph " + theGraph.id}
+					var link = linkLi.append("a").text(name_tmp)
+						.text(name_tmp)
+						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+						.on("click", function(){
+							clearView();					
+							if (theView == "xdsm"){xdsm_script(theData,theGraph.id);	}
+							else if (theView == "edgeBundles"){edgeBundles_script(theData,theGraph.id)}
+							else if (theView == "sankeyDiagram"){sankeyDiagram_script(theData,theGraph.id)}
+							})
+				}
+				var theGraphs = data.graphs;
+				makeViewButtons(data,"XDSM","xdsm");
+				makeViewButtons(data,"Edge Bundles","edgeBundles");
+				makeViewButtons(data,"Sankey Diagram","sankeyDiagram");
+				//##########################################################
+			}
+			//#####################################################################//
+
+
+			function getTextWidth(text, font) 
+			{
+				// re-use canvas object for better performance
+				var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
+				var context = canvas.getContext("2d");
+				context.font = font;
+				var metrics = context.measureText(text);
+				return metrics.width;
+			}					
+
+
+			//#####################################################################//
+			function mainPage()
+			{	
+				clearView();
+				var introDiv = d3.select("body").append("div")
+					.attr("id","mainPage")
+					.classed("wordWrap",true)
+				
+				var theHeading = "Welcome to <b>VISTOMS</b>, the <b>VIS</b>ualization <b>TO</b>ol for <b>M</b>DO <b>S</b>ystems!\n";
+				introDiv.append("text")
+				.style("font-size","16pt")
+				.html(theHeading)
+				
+				var theText = "\nTo inspect an MDO system, go to one of the visualizations in the navigation bar (XDSM, Edge Bundles, or Sankey Diagram). Then select a graph from the dropdown menu.\n\nIf you need help with how to use the visualization package, there is a tutorial video available. Just click on the \"Tutorial\" symbol in the top right corner.";
+				introDiv.append("text").text(theText)
+				introDiv.append("text")
+					.style("font-size","8pt")
+					.html("\n\n\nCopyright 2016-2017 by Benedikt Aigner (RWTH Aachen) & Imco van Gent (TU Delft)")
+				
+				var introSvg = introDiv.append("svg")
+					.attr("width",500)
+					.attr("height",100)
+				var imgs = introSvg.selectAll("img").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("xlink:href", fileReference.RWTH_Logo)
+					.attr("width", "150")
+					.attr("height", "70")
+					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+					.on("click",function(){window.open("https://www.rwth-aachen.de/", '_blank');} )
+				var imgs = introSvg.selectAll("img").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("xlink:href", fileReference.TUDelft_Logo)
+					.attr("x", 175)
+					.attr("y", 5)
+					.attr("width", "105")
+					.attr("height", "50")
+					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+					.on("click",function(){window.open("https://www.tudelft.nl/en/", '_blank');} )
+
+			}
+			//#####################################################################//
+
+			//#####################################################################//
+			function acknowledgements()
+			{				
+				clearView();
+				var acknDiv = d3.select("body").append("div")
+					.attr("id","acknowledgements")
+					.classed("acknText", true)
+					.classed("wordWrap",true)
+				
+				var theHeading = "Acknowledgements";
+				acknDiv.append("text")
+				.style("font-size","16pt")
+				.html(theHeading)
+				
+				acknDiv.append("text")
+					.style("font-size","10pt")
+					.style("margin", "20px 10px")
+					.html("<br><br>Created by Benedikt Aigner and Imco van Gent for the "
+						+"<a href=\"http://www.agile-project.eu/\">AGILE Project</a> in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202."
+						+"<br>"
+						+"<br>"
+						+"<b>VISTOMS was created using the following open source packages:</b>"
+						+"<br>"
+						+"<a href=\"https://d3js.org/\">D3.js</a> package &copy 2015 by Mike Bostock released under the <a href=\"https://opensource.org/licenses/BSD-3-Clause\">BSD license</a>"
+						+"<br>"
+						+"<a href=\"https://github.com/OneraHub/XDSMjs\">XDSM.js </a> package &copy 2016 by R&eacutemi Lafage released under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>"
+						+"<br>"
+						+"<a href=\"https://github.com/Neilos/bihisankey\">BiHiSankey.js</a> package &copy 2015 by Neil Atkinson released under the <a href=\"https://opensource.org/licenses/MIT\">MIT License</a>"
+						+"<br>"
+						+"<br>"
+						+"<br>"
+						+"<font size=\"-2\">Rev. 07/31/2017</font>")
+			}
+			//#####################################################################//
+
+			//#####################################################################//
+			function tutorial()
+			{
+				
+				
+				var theButtons = 
+				{
+					cancel: {
+						label: "OK, got it!",
+						className: 'btn-danger',
+						callback: function(){}
+					},
+					Feedback: {
+						label: "Feedback",
+						className: 'btn-warning',
+						callback: function(){sendMail("VISTOMS feedback")}
+					},
+					Tutorial: {
+						label: "Tutorial",
+						className: 'btn-info',
+						callback: function(){showTutorialPage();}
+					}
+				}
+				
+				
+				function showTutorialPage()
+				{
+					clearView();
+					var tutorialDiv = d3.select("body").append("div")
+						.attr("id","tutorial")
+						.style("margin-top", "16px")
+						.style("font-size","16pt")
+						.style("margin", "20px 10px")
+						.style("color","#555555")
+					
+					var theHeading = "<b>VISTOMS Tutorial</b><br/><br/>";
+					tutorialDiv.append("text")
+					.style("font-size","16pt")
+					.html(theHeading)
+					
+					tutorialDiv.append("div")
+						.style("-webkit-overflow-scrolling", "touch")
+						.style("-webkit-text-size-adjust", "none")
+						.html("<video width=\"1000\" height=\"563\" controls>"
+							+"<source src=\"http://www.agile-project.eu/files/VISTOMS_Tutorial.mp4 \" type=\"video/mp4\">"
+							+"Your browser does not support the video tag."
+							+"</video>"
+							+"</div>")
+				}
+				
+				
+				if (!d3.select(".xdsmDiv").empty())
+				{
+					var dialog = bootbox.dialog(
+					{
+						title: 'XDSM View',
+						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
+								 +"<ol><li>With a right-click on an edge (rhomboids on the off-diagonal) you can take a closer look at the data processed between competences.</li>"
+								 +"<li>Click right on a competence (boxes on the diagonal) for more information, such as input/output data or a detailed tool description.</li>"
+								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization. </li></ol><br />"
+								 +"<p>To switch to another visualization (<i>Edge Bundles</i> or <i>Sankey Diagram</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
+								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
+								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
+						,
+						buttons : theButtons
+					});
+				}
+				else if(!d3.select(".edgeBundlesDiv").empty())
+				{
+					var dialog = bootbox.dialog({
+						title: 'Edge Bundles View',
+						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
+								 +"<ol><li>With a right-click on an edge (connecting lines between the competences) you can take a closer look at the data processed between those competences.</li>"
+								 +"<li>When you hover over one of the competences with the mouse, the respective input and output connections are highlighted. Input connections are highlighted in red, output connections in green.</li>"
+								 +"<li>Click right on a competence for more information, such as input/output data or a detailed tool description.</li>"
+								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization.</li></ol><br />"
+								 +"<p>To switch to another visualization (<i>Edge Bundles</i> or <i>Sankey Diagram</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
+								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
+								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
+						,
+						buttons: theButtons
+					})
+				}
+				else if(!d3.select(".sankeyDiagramDiv").empty())
+				{
+					var dialog = bootbox.dialog({
+						title: 'Sankey Diagram',
+						message: "<p><b>To interactively inspect the MDO system there are several options.</b></p>"
+								 +"<ol><li>When you hover over one of the competences with the mouse, the respective input and output connections are highlighted. Input connections are highlighted in red, output connections in green.</li>"
+								 +"<li> With a right-click on an edge (connecting arrows between the competences) you can take a closer look at the data processed between those competences.</li>"
+								 +"<li>Click right on a competence for more information, such as input/output data or a detailed tool description. You can also rearrange the layout by dragging the competences with the computer mouse.</li>"
+								 +"<li>To view the full data model, go to the \"Data model\" box and select a variable categorization.</li></ol><br />"
+								 +"<p>To switch to another visualization (<i>XDSM</i> or <i>Edge Bundles</i>), go to the navigation bar and select a graph from the drop down menu.</p>"
+								 +"<p>If you need more information on how to use the visualization package, click on the \"Tutorial\" button below.</p>"
+								 +"<p><br/>Any questions or feedback? Contact the support team with the \"Feedback\" button below!</p>"
+						,
+						buttons: theButtons
+					})
+				}
+				else
+				{
+					showTutorialPage();
+				}
+			}
+			//#####################################################################//
+			
+			//aigner: Send mail function
+			//#####################################################################//
+			function sendMail(mailText) 
+			{
+				var link = "mailto:support@agile-project.eu"
+				window.location.href = link;
+			}
+			//#####################################################################//
+			
+			//aigner: Load entire MDO data
+			//###############################################################################################################################################################################################################//
+			//#####################################################################//
+			//#####################################################################//
+			//@Imco: here the references to all files are done
+			var fileReference = {
+				Acknowledgements : "REP__Acknowledgements__REP",
+				AGILE_Icon : "REP__AGILE_Icon__REP",
+				AGILE_Logo : "REP__AGILE_Logo__REP",
+				Contact : "REP__Contact__REP",
+				Home: "REP__Home__REP",
+				RWTH_Logo : "REP__RWTH_Logo__REP",
+				TUDelft_Logo : "REP__TUDelft_Logo__REP",
+				Tutorial : "REP__Tutorial__REP",
+				VISTOMS_Label : "REP__VISTOMS_Label__REP",
+			}
+			
+			//@Imco: Here is the sellar problem example data
+			theData = REP__GRAPH_DATA__REP
+			function loadAllData(data)
+			{
+				makeKadmosMenu(data);
+				mainPage();
+			}
+			loadAllData(theData);
+			//#####################################################################//
+			//#####################################################################//
+			//###############################################################################################################################################################################################################//
+			
+			//aigner: Clear view function
+			//#####################################################################//
+			function clearView()
+			{
+				var visualizationScript = d3.select(".visualizationScript");
+				if (visualizationScript){visualizationScript.remove();}
+				var mainPage = document.getElementById("mainPage");
+				if (mainPage){mainPage.remove();}
+				var tutorial = document.getElementById("tutorial");
+				if (tutorial){tutorial.remove();}
+				var ackn = document.getElementById("acknowledgements");
+				if (ackn){ackn.remove();}
+				var xdsm = d3.select(".xdsmDiv");							
+				if (xdsm){xdsm.remove();}
+				var edgeBundles = d3.select(".edgeBundlesDiv");							
+				if (edgeBundles){edgeBundles.remove();}
+				var sankeyDiagram = d3.select(".sankeyDiagramDiv");
+				if (sankeyDiagram){sankeyDiagram.remove();}
+			}
+			//#####################################################################//
+		
+		function xdsm_script(data,graphID)
+		{
+			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+			// https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
+			(function (global, factory) {
+			  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+			  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+			  (factory((global.d3 = global.d3 || {})));
+			}(this, (function (exports) { 'use strict';
+
+			var version = "4.3.0";
+
+			var ascending = function(a, b) {
+			  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+			};
+
+			var bisector = function(compare) {
+			  if (compare.length === 1) compare = ascendingComparator(compare);
+			  return {
+				left: function(a, x, lo, hi) {
+				  if (lo == null) lo = 0;
+				  if (hi == null) hi = a.length;
+				  while (lo < hi) {
+					var mid = lo + hi >>> 1;
+					if (compare(a[mid], x) < 0) lo = mid + 1;
+					else hi = mid;
+				  }
+				  return lo;
+				},
+				right: function(a, x, lo, hi) {
+				  if (lo == null) lo = 0;
+				  if (hi == null) hi = a.length;
+				  while (lo < hi) {
+					var mid = lo + hi >>> 1;
+					if (compare(a[mid], x) > 0) hi = mid;
+					else lo = mid + 1;
+				  }
+				  return lo;
+				}
+			  };
+			};
+
+			function ascendingComparator(f) {
+			  return function(d, x) {
+				return ascending(f(d), x);
+			  };
+			}
+
+			var ascendingBisect = bisector(ascending);
+			var bisectRight = ascendingBisect.right;
+			var bisectLeft = ascendingBisect.left;
+
+			var descending = function(a, b) {
+			  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+			};
+
+			var number = function(x) {
+			  return x === null ? NaN : +x;
+			};
+
+			var variance = function(array, f) {
+			  var n = array.length,
+				  m = 0,
+				  a,
+				  d,
+				  s = 0,
+				  i = -1,
+				  j = 0;
+
+			  if (f == null) {
+				while (++i < n) {
+				  if (!isNaN(a = number(array[i]))) {
+					d = a - m;
+					m += d / ++j;
+					s += d * (a - m);
+				  }
+				}
+			  }
+
+			  else {
+				while (++i < n) {
+				  if (!isNaN(a = number(f(array[i], i, array)))) {
+					d = a - m;
+					m += d / ++j;
+					s += d * (a - m);
+				  }
+				}
+			  }
+
+			  if (j > 1) return s / (j - 1);
+			};
+
+			var deviation = function(array, f) {
+			  var v = variance(array, f);
+			  return v ? Math.sqrt(v) : v;
+			};
+
+			var extent = function(array, f) {
+			  var i = -1,
+				  n = array.length,
+				  a,
+				  b,
+				  c;
+
+			  if (f == null) {
+				while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
+				while (++i < n) if ((b = array[i]) != null) {
+				  if (a > b) a = b;
+				  if (c < b) c = b;
+				}
+			  }
+
+			  else {
+				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
+				while (++i < n) if ((b = f(array[i], i, array)) != null) {
+				  if (a > b) a = b;
+				  if (c < b) c = b;
+				}
+			  }
+
+			  return [a, c];
+			};
+
+			var array = Array.prototype;
+
+			var slice = array.slice;
+			var map = array.map;
+
+			var constant$1 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var identity = function(x) {
+			  return x;
+			};
+
+			var range = function(start, stop, step) {
+			  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+
+			  var i = -1,
+				  n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+				  range = new Array(n);
+
+			  while (++i < n) {
+				range[i] = start + i * step;
+			  }
+
+			  return range;
+			};
+
+			var e10 = Math.sqrt(50);
+			var e5 = Math.sqrt(10);
+			var e2 = Math.sqrt(2);
+
+			var ticks = function(start, stop, count) {
+			  var step = tickStep(start, stop, count);
+			  return range(
+				Math.ceil(start / step) * step,
+				Math.floor(stop / step) * step + step / 2, // inclusive
+				step
+			  );
+			};
+
+			function tickStep(start, stop, count) {
+			  var step0 = Math.abs(stop - start) / Math.max(0, count),
+				  step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+				  error = step0 / step1;
+			  if (error >= e10) step1 *= 10;
+			  else if (error >= e5) step1 *= 5;
+			  else if (error >= e2) step1 *= 2;
+			  return stop < start ? -step1 : step1;
+			}
+
+			var sturges = function(values) {
+			  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
+			};
+
+			var histogram = function() {
+			  var value = identity,
+				  domain = extent,
+				  threshold = sturges;
+
+			  function histogram(data) {
+				var i,
+					n = data.length,
+					x,
+					values = new Array(n);
+
+				for (i = 0; i < n; ++i) {
+				  values[i] = value(data[i], i, data);
+				}
+
+				var xz = domain(values),
+					x0 = xz[0],
+					x1 = xz[1],
+					tz = threshold(values, x0, x1);
+
+				// Convert number of thresholds into uniform thresholds.
+				if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
+
+				// Remove any thresholds outside the domain.
+				var m = tz.length;
+				while (tz[0] <= x0) tz.shift(), --m;
+				while (tz[m - 1] >= x1) tz.pop(), --m;
+
+				var bins = new Array(m + 1),
+					bin;
+
+				// Initialize bins.
+				for (i = 0; i <= m; ++i) {
+				  bin = bins[i] = [];
+				  bin.x0 = i > 0 ? tz[i - 1] : x0;
+				  bin.x1 = i < m ? tz[i] : x1;
+				}
+
+				// Assign data to bins by value, ignoring any outside the domain.
+				for (i = 0; i < n; ++i) {
+				  x = values[i];
+				  if (x0 <= x && x <= x1) {
+					bins[bisectRight(tz, x, 0, m)].push(data[i]);
+				  }
+				}
+
+				return bins;
+			  }
+
+			  histogram.value = function(_) {
+				return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value;
+			  };
+
+			  histogram.domain = function(_) {
+				return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain;
+			  };
+
+			  histogram.thresholds = function(_) {
+				return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold;
+			  };
+
+			  return histogram;
+			};
+
+			var threshold = function(array, p, f) {
+			  if (f == null) f = number;
+			  if (!(n = array.length)) return;
+			  if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
+			  if (p >= 1) return +f(array[n - 1], n - 1, array);
+			  var n,
+				  h = (n - 1) * p,
+				  i = Math.floor(h),
+				  a = +f(array[i], i, array),
+				  b = +f(array[i + 1], i + 1, array);
+			  return a + (b - a) * (h - i);
+			};
+
+			var freedmanDiaconis = function(values, min, max) {
+			  values = map.call(values, number).sort(ascending);
+			  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
+			};
+
+			var scott = function(values, min, max) {
+			  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
+			};
+
+			var max = function(array, f) {
+			  var i = -1,
+				  n = array.length,
+				  a,
+				  b;
+
+			  if (f == null) {
+				while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+				while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+			  }
+
+			  else {
+				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+				while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
+			  }
+
+			  return a;
+			};
+
+			var mean = function(array, f) {
+			  var s = 0,
+				  n = array.length,
+				  a,
+				  i = -1,
+				  j = n;
+
+			  if (f == null) {
+				while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
+			  }
+
+			  else {
+				while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
+			  }
+
+			  if (j) return s / j;
+			};
+
+			var median = function(array, f) {
+			  var numbers = [],
+				  n = array.length,
+				  a,
+				  i = -1;
+
+			  if (f == null) {
+				while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
+			  }
+
+			  else {
+				while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
+			  }
+
+			  return threshold(numbers.sort(ascending), 0.5);
+			};
+
+			var merge = function(arrays) {
+			  var n = arrays.length,
+				  m,
+				  i = -1,
+				  j = 0,
+				  merged,
+				  array;
+
+			  while (++i < n) j += arrays[i].length;
+			  merged = new Array(j);
+
+			  while (--n >= 0) {
+				array = arrays[n];
+				m = array.length;
+				while (--m >= 0) {
+				  merged[--j] = array[m];
+				}
+			  }
+
+			  return merged;
+			};
+
+			var min = function(array, f) {
+			  var i = -1,
+				  n = array.length,
+				  a,
+				  b;
+
+			  if (f == null) {
+				while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+				while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+			  }
+
+			  else {
+				while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+				while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
+			  }
+
+			  return a;
+			};
+
+			var pairs = function(array) {
+			  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
+			  while (i < n) pairs[i] = [p, p = array[++i]];
+			  return pairs;
+			};
+
+			var permute = function(array, indexes) {
+			  var i = indexes.length, permutes = new Array(i);
+			  while (i--) permutes[i] = array[indexes[i]];
+			  return permutes;
+			};
+
+			var scan = function(array, compare) {
+			  if (!(n = array.length)) return;
+			  var i = 0,
+				  n,
+				  j = 0,
+				  xi,
+				  xj = array[j];
+
+			  if (!compare) compare = ascending;
+
+			  while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
+
+			  if (compare(xj, xj) === 0) return j;
+			};
+
+			var shuffle = function(array, i0, i1) {
+			  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
+				  t,
+				  i;
+
+			  while (m) {
+				i = Math.random() * m-- | 0;
+				t = array[m + i0];
+				array[m + i0] = array[i + i0];
+				array[i + i0] = t;
+			  }
+
+			  return array;
+			};
+
+			var sum = function(array, f) {
+			  var s = 0,
+				  n = array.length,
+				  a,
+				  i = -1;
+
+			  if (f == null) {
+				while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
+			  }
+
+			  else {
+				while (++i < n) if (a = +f(array[i], i, array)) s += a;
+			  }
+
+			  return s;
+			};
+
+			var transpose = function(matrix) {
+			  if (!(n = matrix.length)) return [];
+			  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
+				for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+				  row[j] = matrix[j][i];
+				}
+			  }
+			  return transpose;
+			};
+
+			function length(d) {
+			  return d.length;
+			}
+
+			var zip = function() {
+			  return transpose(arguments);
+			};
+
+			var prefix = "$";
+
+			function Map() {}
+
+			Map.prototype = map$1.prototype = {
+			  constructor: Map,
+			  has: function(key) {
+				return (prefix + key) in this;
+			  },
+			  get: function(key) {
+				return this[prefix + key];
+			  },
+			  set: function(key, value) {
+				this[prefix + key] = value;
+				return this;
+			  },
+			  remove: function(key) {
+				var property = prefix + key;
+				return property in this && delete this[property];
+			  },
+			  clear: function() {
+				for (var property in this) if (property[0] === prefix) delete this[property];
+			  },
+			  keys: function() {
+				var keys = [];
+				for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
+				return keys;
+			  },
+			  values: function() {
+				var values = [];
+				for (var property in this) if (property[0] === prefix) values.push(this[property]);
+				return values;
+			  },
+			  entries: function() {
+				var entries = [];
+				for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
+				return entries;
+			  },
+			  size: function() {
+				var size = 0;
+				for (var property in this) if (property[0] === prefix) ++size;
+				return size;
+			  },
+			  empty: function() {
+				for (var property in this) if (property[0] === prefix) return false;
+				return true;
+			  },
+			  each: function(f) {
+				for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
+			  }
+			};
+
+			function map$1(object, f) {
+			  var map = new Map;
+
+			  // Copy constructor.
+			  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
+
+			  // Index array by numeric index or specified key function.
+			  else if (Array.isArray(object)) {
+				var i = -1,
+					n = object.length,
+					o;
+
+				if (f == null) while (++i < n) map.set(i, object[i]);
+				else while (++i < n) map.set(f(o = object[i], i, object), o);
+			  }
+
+			  // Convert object to map.
+			  else if (object) for (var key in object) map.set(key, object[key]);
+
+			  return map;
+			}
+
+			var nest = function() {
+			  var keys = [],
+				  sortKeys = [],
+				  sortValues,
+				  rollup,
+				  nest;
+
+			  function apply(array, depth, createResult, setResult) {
+				if (depth >= keys.length) return rollup != null
+					? rollup(array) : (sortValues != null
+					? array.sort(sortValues)
+					: array);
+
+				var i = -1,
+					n = array.length,
+					key = keys[depth++],
+					keyValue,
+					value,
+					valuesByKey = map$1(),
+					values,
+					result = createResult();
+
+				while (++i < n) {
+				  if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
+					values.push(value);
+				  } else {
+					valuesByKey.set(keyValue, [value]);
+				  }
+				}
+
+				valuesByKey.each(function(values, key) {
+				  setResult(result, key, apply(values, depth, createResult, setResult));
+				});
+
+				return result;
+			  }
+
+			  function entries(map, depth) {
+				if (++depth > keys.length) return map;
+				var array, sortKey = sortKeys[depth - 1];
+				if (rollup != null && depth >= keys.length) array = map.entries();
+				else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
+				return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
+			  }
+
+			  return nest = {
+				object: function(array) { return apply(array, 0, createObject, setObject); },
+				map: function(array) { return apply(array, 0, createMap, setMap); },
+				entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
+				key: function(d) { keys.push(d); return nest; },
+				sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
+				sortValues: function(order) { sortValues = order; return nest; },
+				rollup: function(f) { rollup = f; return nest; }
+			  };
+			};
+
+			function createObject() {
+			  return {};
+			}
+
+			function setObject(object, key, value) {
+			  object[key] = value;
+			}
+
+			function createMap() {
+			  return map$1();
+			}
+
+			function setMap(map, key, value) {
+			  map.set(key, value);
+			}
+
+			function Set() {}
+
+			var proto = map$1.prototype;
+
+			Set.prototype = set.prototype = {
+			  constructor: Set,
+			  has: proto.has,
+			  add: function(value) {
+				value += "";
+				this[prefix + value] = value;
+				return this;
+			  },
+			  remove: proto.remove,
+			  clear: proto.clear,
+			  values: proto.keys,
+			  size: proto.size,
+			  empty: proto.empty,
+			  each: proto.each
+			};
+
+			function set(object, f) {
+			  var set = new Set;
+
+			  // Copy constructor.
+			  if (object instanceof Set) object.each(function(value) { set.add(value); });
+
+			  // Otherwise, assume it’s an array.
+			  else if (object) {
+				var i = -1, n = object.length;
+				if (f == null) while (++i < n) set.add(object[i]);
+				else while (++i < n) set.add(f(object[i], i, object));
+			  }
+
+			  return set;
+			}
+
+			var keys = function(map) {
+			  var keys = [];
+			  for (var key in map) keys.push(key);
+			  return keys;
+			};
+
+			var values = function(map) {
+			  var values = [];
+			  for (var key in map) values.push(map[key]);
+			  return values;
+			};
+
+			var entries = function(map) {
+			  var entries = [];
+			  for (var key in map) entries.push({key: key, value: map[key]});
+			  return entries;
+			};
+
+			var uniform = function(min, max) {
+			  min = min == null ? 0 : +min;
+			  max = max == null ? 1 : +max;
+			  if (arguments.length === 1) max = min, min = 0;
+			  else max -= min;
+			  return function() {
+				return Math.random() * max + min;
+			  };
+			};
+
+			var normal = function(mu, sigma) {
+			  var x, r;
+			  mu = mu == null ? 0 : +mu;
+			  sigma = sigma == null ? 1 : +sigma;
+			  return function() {
+				var y;
+
+				// If available, use the second previously-generated uniform random.
+				if (x != null) y = x, x = null;
+
+				// Otherwise, generate a new x and y.
+				else do {
+				  x = Math.random() * 2 - 1;
+				  y = Math.random() * 2 - 1;
+				  r = x * x + y * y;
+				} while (!r || r > 1);
+
+				return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
+			  };
+			};
+
+			var logNormal = function() {
+			  var randomNormal = normal.apply(this, arguments);
+			  return function() {
+				return Math.exp(randomNormal());
+			  };
+			};
+
+			var irwinHall = function(n) {
+			  return function() {
+				for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
+				return sum;
+			  };
+			};
+
+			var bates = function(n) {
+			  var randomIrwinHall = irwinHall(n);
+			  return function() {
+				return randomIrwinHall() / n;
+			  };
+			};
+
+			var exponential = function(lambda) {
+			  return function() {
+				return -Math.log(1 - Math.random()) / lambda;
+			  };
+			};
+
+			function linear(t) {
+			  return +t;
+			}
+
+			function quadIn(t) {
+			  return t * t;
+			}
+
+			function quadOut(t) {
+			  return t * (2 - t);
+			}
+
+			function quadInOut(t) {
+			  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+			}
+
+			function cubicIn(t) {
+			  return t * t * t;
+			}
+
+			function cubicOut(t) {
+			  return --t * t * t + 1;
+			}
+
+			function cubicInOut(t) {
+			  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+			}
+
+			var exponent = 3;
+
+			var polyIn = (function custom(e) {
+			  e = +e;
+
+			  function polyIn(t) {
+				return Math.pow(t, e);
+			  }
+
+			  polyIn.exponent = custom;
+
+			  return polyIn;
+			})(exponent);
+
+			var polyOut = (function custom(e) {
+			  e = +e;
+
+			  function polyOut(t) {
+				return 1 - Math.pow(1 - t, e);
+			  }
+
+			  polyOut.exponent = custom;
+
+			  return polyOut;
+			})(exponent);
+
+			var polyInOut = (function custom(e) {
+			  e = +e;
+
+			  function polyInOut(t) {
+				return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+			  }
+
+			  polyInOut.exponent = custom;
+
+			  return polyInOut;
+			})(exponent);
+
+			var pi = Math.PI;
+			var halfPi = pi / 2;
+
+			function sinIn(t) {
+			  return 1 - Math.cos(t * halfPi);
+			}
+
+			function sinOut(t) {
+			  return Math.sin(t * halfPi);
+			}
+
+			function sinInOut(t) {
+			  return (1 - Math.cos(pi * t)) / 2;
+			}
+
+			function expIn(t) {
+			  return Math.pow(2, 10 * t - 10);
+			}
+
+			function expOut(t) {
+			  return 1 - Math.pow(2, -10 * t);
+			}
+
+			function expInOut(t) {
+			  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
+			}
+
+			function circleIn(t) {
+			  return 1 - Math.sqrt(1 - t * t);
+			}
+
+			function circleOut(t) {
+			  return Math.sqrt(1 - --t * t);
+			}
+
+			function circleInOut(t) {
+			  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+			}
+
+			var b1 = 4 / 11;
+			var b2 = 6 / 11;
+			var b3 = 8 / 11;
+			var b4 = 3 / 4;
+			var b5 = 9 / 11;
+			var b6 = 10 / 11;
+			var b7 = 15 / 16;
+			var b8 = 21 / 22;
+			var b9 = 63 / 64;
+			var b0 = 1 / b1 / b1;
+
+			function bounceIn(t) {
+			  return 1 - bounceOut(1 - t);
+			}
+
+			function bounceOut(t) {
+			  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+			}
+
+			function bounceInOut(t) {
+			  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+			}
+
+			var overshoot = 1.70158;
+
+			var backIn = (function custom(s) {
+			  s = +s;
+
+			  function backIn(t) {
+				return t * t * ((s + 1) * t - s);
+			  }
+
+			  backIn.overshoot = custom;
+
+			  return backIn;
+			})(overshoot);
+
+			var backOut = (function custom(s) {
+			  s = +s;
+
+			  function backOut(t) {
+				return --t * t * ((s + 1) * t + s) + 1;
+			  }
+
+			  backOut.overshoot = custom;
+
+			  return backOut;
+			})(overshoot);
+
+			var backInOut = (function custom(s) {
+			  s = +s;
+
+			  function backInOut(t) {
+				return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+			  }
+
+			  backInOut.overshoot = custom;
+
+			  return backInOut;
+			})(overshoot);
+
+			var tau = 2 * Math.PI;
+			var amplitude = 1;
+			var period = 0.3;
+
+			var elasticIn = (function custom(a, p) {
+			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+			  function elasticIn(t) {
+				return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
+			  }
+
+			  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
+			  elasticIn.period = function(p) { return custom(a, p); };
+
+			  return elasticIn;
+			})(amplitude, period);
+
+			var elasticOut = (function custom(a, p) {
+			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+			  function elasticOut(t) {
+				return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
+			  }
+
+			  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
+			  elasticOut.period = function(p) { return custom(a, p); };
+
+			  return elasticOut;
+			})(amplitude, period);
+
+			var elasticInOut = (function custom(a, p) {
+			  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+			  function elasticInOut(t) {
+				return ((t = t * 2 - 1) < 0
+					? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
+					: 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
+			  }
+
+			  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
+			  elasticInOut.period = function(p) { return custom(a, p); };
+
+			  return elasticInOut;
+			})(amplitude, period);
+
+			var area = function(polygon) {
+			  var i = -1,
+				  n = polygon.length,
+				  a,
+				  b = polygon[n - 1],
+				  area = 0;
+
+			  while (++i < n) {
+				a = b;
+				b = polygon[i];
+				area += a[1] * b[0] - a[0] * b[1];
+			  }
+
+			  return area / 2;
+			};
+
+			var centroid = function(polygon) {
+			  var i = -1,
+				  n = polygon.length,
+				  x = 0,
+				  y = 0,
+				  a,
+				  b = polygon[n - 1],
+				  c,
+				  k = 0;
+
+			  while (++i < n) {
+				a = b;
+				b = polygon[i];
+				k += c = a[0] * b[1] - b[0] * a[1];
+				x += (a[0] + b[0]) * c;
+				y += (a[1] + b[1]) * c;
+			  }
+
+			  return k *= 3, [x / k, y / k];
+			};
+
+			// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
+			// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
+			// right, +y is up). Returns a positive value if ABC is counter-clockwise,
+			// negative if clockwise, and zero if the points are collinear.
+			var cross = function(a, b, c) {
+			  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
+			};
+
+			function lexicographicOrder(a, b) {
+			  return a[0] - b[0] || a[1] - b[1];
+			}
+
+			// Computes the upper convex hull per the monotone chain algorithm.
+			// Assumes points.length >= 3, is sorted by x, unique in y.
+			// Returns an array of indices into points in left-to-right order.
+			function computeUpperHullIndexes(points) {
+			  var n = points.length,
+				  indexes = [0, 1],
+				  size = 2;
+
+			  for (var i = 2; i < n; ++i) {
+				while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
+				indexes[size++] = i;
+			  }
+
+			  return indexes.slice(0, size); // remove popped points
+			}
+
+			var hull = function(points) {
+			  if ((n = points.length) < 3) return null;
+
+			  var i,
+				  n,
+				  sortedPoints = new Array(n),
+				  flippedPoints = new Array(n);
+
+			  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
+			  sortedPoints.sort(lexicographicOrder);
+			  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
+
+			  var upperIndexes = computeUpperHullIndexes(sortedPoints),
+				  lowerIndexes = computeUpperHullIndexes(flippedPoints);
+
+			  // Construct the hull polygon, removing possible duplicate endpoints.
+			  var skipLeft = lowerIndexes[0] === upperIndexes[0],
+				  skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
+				  hull = [];
+
+			  // Add upper hull in right-to-l order.
+			  // Then add lower hull in left-to-right order.
+			  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
+			  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
+
+			  return hull;
+			};
+
+			var contains = function(polygon, point) {
+			  var n = polygon.length,
+				  p = polygon[n - 1],
+				  x = point[0], y = point[1],
+				  x0 = p[0], y0 = p[1],
+				  x1, y1,
+				  inside = false;
+
+			  for (var i = 0; i < n; ++i) {
+				p = polygon[i], x1 = p[0], y1 = p[1];
+				if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
+				x0 = x1, y0 = y1;
+			  }
+
+			  return inside;
+			};
+
+			var length$1 = function(polygon) {
+			  var i = -1,
+				  n = polygon.length,
+				  b = polygon[n - 1],
+				  xa,
+				  ya,
+				  xb = b[0],
+				  yb = b[1],
+				  perimeter = 0;
+
+			  while (++i < n) {
+				xa = xb;
+				ya = yb;
+				b = polygon[i];
+				xb = b[0];
+				yb = b[1];
+				xa -= xb;
+				ya -= yb;
+				perimeter += Math.sqrt(xa * xa + ya * ya);
+			  }
+
+			  return perimeter;
+			};
+
+			var pi$1 = Math.PI;
+			var tau$1 = 2 * pi$1;
+			var epsilon = 1e-6;
+			var tauEpsilon = tau$1 - epsilon;
+
+			function Path() {
+			  this._x0 = this._y0 = // start of current subpath
+			  this._x1 = this._y1 = null; // end of current subpath
+			  this._ = [];
+			}
+
+			function path() {
+			  return new Path;
+			}
+
+			Path.prototype = path.prototype = {
+			  constructor: Path,
+			  moveTo: function(x, y) {
+				this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
+			  },
+			  closePath: function() {
+				if (this._x1 !== null) {
+				  this._x1 = this._x0, this._y1 = this._y0;
+				  this._.push("Z");
+				}
+			  },
+			  lineTo: function(x, y) {
+				this._.push("L", this._x1 = +x, ",", this._y1 = +y);
+			  },
+			  quadraticCurveTo: function(x1, y1, x, y) {
+				this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
+			  },
+			  bezierCurveTo: function(x1, y1, x2, y2, x, y) {
+				this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
+			  },
+			  arcTo: function(x1, y1, x2, y2, r) {
+				x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+				var x0 = this._x1,
+					y0 = this._y1,
+					x21 = x2 - x1,
+					y21 = y2 - y1,
+					x01 = x0 - x1,
+					y01 = y0 - y1,
+					l01_2 = x01 * x01 + y01 * y01;
+
+				// Is the radius negative? Error.
+				if (r < 0) throw new Error("negative radius: " + r);
+
+				// Is this path empty? Move to (x1,y1).
+				if (this._x1 === null) {
+				  this._.push(
+					"M", this._x1 = x1, ",", this._y1 = y1
+				  );
+				}
+
+				// Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+				else if (!(l01_2 > epsilon)) {}
+
+				// Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+				// Equivalently, is (x1,y1) coincident with (x2,y2)?
+				// Or, is the radius zero? Line to (x1,y1).
+				else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+				  this._.push(
+					"L", this._x1 = x1, ",", this._y1 = y1
+				  );
+				}
+
+				// Otherwise, draw an arc!
+				else {
+				  var x20 = x2 - x0,
+					  y20 = y2 - y0,
+					  l21_2 = x21 * x21 + y21 * y21,
+					  l20_2 = x20 * x20 + y20 * y20,
+					  l21 = Math.sqrt(l21_2),
+					  l01 = Math.sqrt(l01_2),
+					  l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+					  t01 = l / l01,
+					  t21 = l / l21;
+
+				  // If the start tangent is not coincident with (x0,y0), line to.
+				  if (Math.abs(t01 - 1) > epsilon) {
+					this._.push(
+					  "L", x1 + t01 * x01, ",", y1 + t01 * y01
+					);
+				  }
+
+				  this._.push(
+					"A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
+				  );
+				}
+			  },
+			  arc: function(x, y, r, a0, a1, ccw) {
+				x = +x, y = +y, r = +r;
+				var dx = r * Math.cos(a0),
+					dy = r * Math.sin(a0),
+					x0 = x + dx,
+					y0 = y + dy,
+					cw = 1 ^ ccw,
+					da = ccw ? a0 - a1 : a1 - a0;
+
+				// Is the radius negative? Error.
+				if (r < 0) throw new Error("negative radius: " + r);
+
+				// Is this path empty? Move to (x0,y0).
+				if (this._x1 === null) {
+				  this._.push(
+					"M", x0, ",", y0
+				  );
+				}
+
+				// Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+				else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+				  this._.push(
+					"L", x0, ",", y0
+				  );
+				}
+
+				// Is this arc empty? We’re done.
+				if (!r) return;
+
+				// Is this a complete circle? Draw two arcs to complete the circle.
+				if (da > tauEpsilon) {
+				  this._.push(
+					"A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
+					"A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
+				  );
+				}
+
+				// Otherwise, draw an arc!
+				else {
+				  if (da < 0) da = da % tau$1 + tau$1;
+				  this._.push(
+					"A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
+				  );
+				}
+			  },
+			  rect: function(x, y, w, h) {
+				this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
+			  },
+			  toString: function() {
+				return this._.join("");
+			  }
+			};
+
+			var tree_add = function(d) {
+			  var x = +this._x.call(null, d),
+				  y = +this._y.call(null, d);
+			  return add(this.cover(x, y), x, y, d);
+			};
+
+			function add(tree, x, y, d) {
+			  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
+
+			  var parent,
+				  node = tree._root,
+				  leaf = {data: d},
+				  x0 = tree._x0,
+				  y0 = tree._y0,
+				  x1 = tree._x1,
+				  y1 = tree._y1,
+				  xm,
+				  ym,
+				  xp,
+				  yp,
+				  right,
+				  bottom,
+				  i,
+				  j;
+
+			  // If the tree is empty, initialize the root as a leaf.
+			  if (!node) return tree._root = leaf, tree;
+
+			  // Find the existing leaf for the new point, or add it.
+			  while (node.length) {
+				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+				if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
+			  }
+
+			  // Is the new point is exactly coincident with the existing point?
+			  xp = +tree._x.call(null, node.data);
+			  yp = +tree._y.call(null, node.data);
+			  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
+
+			  // Otherwise, split the leaf node until the old and new point are separated.
+			  do {
+				parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
+				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+			  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
+			  return parent[j] = node, parent[i] = leaf, tree;
+			}
+
+			function addAll(data) {
+			  var d, i, n = data.length,
+				  x,
+				  y,
+				  xz = new Array(n),
+				  yz = new Array(n),
+				  x0 = Infinity,
+				  y0 = Infinity,
+				  x1 = -Infinity,
+				  y1 = -Infinity;
+
+			  // Compute the points and their extent.
+			  for (i = 0; i < n; ++i) {
+				if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
+				xz[i] = x;
+				yz[i] = y;
+				if (x < x0) x0 = x;
+				if (x > x1) x1 = x;
+				if (y < y0) y0 = y;
+				if (y > y1) y1 = y;
+			  }
+
+			  // If there were no (valid) points, inherit the existing extent.
+			  if (x1 < x0) x0 = this._x0, x1 = this._x1;
+			  if (y1 < y0) y0 = this._y0, y1 = this._y1;
+
+			  // Expand the tree to cover the new points.
+			  this.cover(x0, y0).cover(x1, y1);
+
+			  // Add the new points.
+			  for (i = 0; i < n; ++i) {
+				add(this, xz[i], yz[i], data[i]);
+			  }
+
+			  return this;
+			}
+
+			var tree_cover = function(x, y) {
+			  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
+
+			  var x0 = this._x0,
+				  y0 = this._y0,
+				  x1 = this._x1,
+				  y1 = this._y1;
+
+			  // If the quadtree has no extent, initialize them.
+			  // Integer extent are necessary so that if we later double the extent,
+			  // the existing quadrant boundaries don’t change due to floating point error!
+			  if (isNaN(x0)) {
+				x1 = (x0 = Math.floor(x)) + 1;
+				y1 = (y0 = Math.floor(y)) + 1;
+			  }
+
+			  // Otherwise, double repeatedly to cover.
+			  else if (x0 > x || x > x1 || y0 > y || y > y1) {
+				var z = x1 - x0,
+					node = this._root,
+					parent,
+					i;
+
+				switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
+				  case 0: {
+					do parent = new Array(4), parent[i] = node, node = parent;
+					while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
+					break;
+				  }
+				  case 1: {
+					do parent = new Array(4), parent[i] = node, node = parent;
+					while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
+					break;
+				  }
+				  case 2: {
+					do parent = new Array(4), parent[i] = node, node = parent;
+					while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
+					break;
+				  }
+				  case 3: {
+					do parent = new Array(4), parent[i] = node, node = parent;
+					while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
+					break;
+				  }
+				}
+
+				if (this._root && this._root.length) this._root = node;
+			  }
+
+			  // If the quadtree covers the point already, just return.
+			  else return this;
+
+			  this._x0 = x0;
+			  this._y0 = y0;
+			  this._x1 = x1;
+			  this._y1 = y1;
+			  return this;
+			};
+
+			var tree_data = function() {
+			  var data = [];
+			  this.visit(function(node) {
+				if (!node.length) do data.push(node.data); while (node = node.next)
+			  });
+			  return data;
+			};
+
+			var tree_extent = function(_) {
+			  return arguments.length
+				  ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
+				  : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
+			};
+
+			var Quad = function(node, x0, y0, x1, y1) {
+			  this.node = node;
+			  this.x0 = x0;
+			  this.y0 = y0;
+			  this.x1 = x1;
+			  this.y1 = y1;
+			};
+
+			var tree_find = function(x, y, radius) {
+			  var data,
+				  x0 = this._x0,
+				  y0 = this._y0,
+				  x1,
+				  y1,
+				  x2,
+				  y2,
+				  x3 = this._x1,
+				  y3 = this._y1,
+				  quads = [],
+				  node = this._root,
+				  q,
+				  i;
+
+			  if (node) quads.push(new Quad(node, x0, y0, x3, y3));
+			  if (radius == null) radius = Infinity;
+			  else {
+				x0 = x - radius, y0 = y - radius;
+				x3 = x + radius, y3 = y + radius;
+				radius *= radius;
+			  }
+
+			  while (q = quads.pop()) {
+
+				// Stop searching if this quadrant can’t contain a closer node.
+				if (!(node = q.node)
+					|| (x1 = q.x0) > x3
+					|| (y1 = q.y0) > y3
+					|| (x2 = q.x1) < x0
+					|| (y2 = q.y1) < y0) continue;
+
+				// Bisect the current quadrant.
+				if (node.length) {
+				  var xm = (x1 + x2) / 2,
+					  ym = (y1 + y2) / 2;
+
+				  quads.push(
+					new Quad(node[3], xm, ym, x2, y2),
+					new Quad(node[2], x1, ym, xm, y2),
+					new Quad(node[1], xm, y1, x2, ym),
+					new Quad(node[0], x1, y1, xm, ym)
+				  );
+
+				  // Visit the closest quadrant first.
+				  if (i = (y >= ym) << 1 | (x >= xm)) {
+					q = quads[quads.length - 1];
+					quads[quads.length - 1] = quads[quads.length - 1 - i];
+					quads[quads.length - 1 - i] = q;
+				  }
+				}
+
+				// Visit this point. (Visiting coincident points isn’t necessary!)
+				else {
+				  var dx = x - +this._x.call(null, node.data),
+					  dy = y - +this._y.call(null, node.data),
+					  d2 = dx * dx + dy * dy;
+				  if (d2 < radius) {
+					var d = Math.sqrt(radius = d2);
+					x0 = x - d, y0 = y - d;
+					x3 = x + d, y3 = y + d;
+					data = node.data;
+				  }
+				}
+			  }
+
+			  return data;
+			};
+
+			var tree_remove = function(d) {
+			  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
+
+			  var parent,
+				  node = this._root,
+				  retainer,
+				  previous,
+				  next,
+				  x0 = this._x0,
+				  y0 = this._y0,
+				  x1 = this._x1,
+				  y1 = this._y1,
+				  x,
+				  y,
+				  xm,
+				  ym,
+				  right,
+				  bottom,
+				  i,
+				  j;
+
+			  // If the tree is empty, initialize the root as a leaf.
+			  if (!node) return this;
+
+			  // Find the leaf node for the point.
+			  // While descending, also retain the deepest parent with a non-removed sibling.
+			  if (node.length) while (true) {
+				if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+				if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+				if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
+				if (!node.length) break;
+				if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
+			  }
+
+			  // Find the point to remove.
+			  while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+			  if (next = node.next) delete node.next;
+
+			  // If there are multiple coincident points, remove just the point.
+			  if (previous) return (next ? previous.next = next : delete previous.next), this;
+
+			  // If this is the root point, remove it.
+			  if (!parent) return this._root = next, this;
+
+			  // Remove this leaf.
+			  next ? parent[i] = next : delete parent[i];
+
+			  // If the parent now contains exactly one leaf, collapse superfluous parents.
+			  if ((node = parent[0] || parent[1] || parent[2] || parent[3])
+				  && node === (parent[3] || parent[2] || parent[1] || parent[0])
+				  && !node.length) {
+				if (retainer) retainer[j] = node;
+				else this._root = node;
+			  }
+
+			  return this;
+			};
+
+			function removeAll(data) {
+			  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+			  return this;
+			}
+
+			var tree_root = function() {
+			  return this._root;
+			};
+
+			var tree_size = function() {
+			  var size = 0;
+			  this.visit(function(node) {
+				if (!node.length) do ++size; while (node = node.next)
+			  });
+			  return size;
+			};
+
+			var tree_visit = function(callback) {
+			  var quads = [], q, node = this._root, child, x0, y0, x1, y1;
+			  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
+			  while (q = quads.pop()) {
+				if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
+				  var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+				  if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+				  if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+				  if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+				  if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+				}
+			  }
+			  return this;
+			};
+
+			var tree_visitAfter = function(callback) {
+			  var quads = [], next = [], q;
+			  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
+			  while (q = quads.pop()) {
+				var node = q.node;
+				if (node.length) {
+				  var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+				  if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+				  if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+				  if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+				  if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+				}
+				next.push(q);
+			  }
+			  while (q = next.pop()) {
+				callback(q.node, q.x0, q.y0, q.x1, q.y1);
+			  }
+			  return this;
+			};
+
+			function defaultX(d) {
+			  return d[0];
+			}
+
+			var tree_x = function(_) {
+			  return arguments.length ? (this._x = _, this) : this._x;
+			};
+
+			function defaultY(d) {
+			  return d[1];
+			}
+
+			var tree_y = function(_) {
+			  return arguments.length ? (this._y = _, this) : this._y;
+			};
+
+			function quadtree(nodes, x, y) {
+			  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
+			  return nodes == null ? tree : tree.addAll(nodes);
+			}
+
+			function Quadtree(x, y, x0, y0, x1, y1) {
+			  this._x = x;
+			  this._y = y;
+			  this._x0 = x0;
+			  this._y0 = y0;
+			  this._x1 = x1;
+			  this._y1 = y1;
+			  this._root = undefined;
+			}
+
+			function leaf_copy(leaf) {
+			  var copy = {data: leaf.data}, next = copy;
+			  while (leaf = leaf.next) next = next.next = {data: leaf.data};
+			  return copy;
+			}
+
+			var treeProto = quadtree.prototype = Quadtree.prototype;
+
+			treeProto.copy = function() {
+			  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
+				  node = this._root,
+				  nodes,
+				  child;
+
+			  if (!node) return copy;
+
+			  if (!node.length) return copy._root = leaf_copy(node), copy;
+
+			  nodes = [{source: node, target: copy._root = new Array(4)}];
+			  while (node = nodes.pop()) {
+				for (var i = 0; i < 4; ++i) {
+				  if (child = node.source[i]) {
+					if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
+					else node.target[i] = leaf_copy(child);
+				  }
+				}
+			  }
+
+			  return copy;
+			};
+
+			treeProto.add = tree_add;
+			treeProto.addAll = addAll;
+			treeProto.cover = tree_cover;
+			treeProto.data = tree_data;
+			treeProto.extent = tree_extent;
+			treeProto.find = tree_find;
+			treeProto.remove = tree_remove;
+			treeProto.removeAll = removeAll;
+			treeProto.root = tree_root;
+			treeProto.size = tree_size;
+			treeProto.visit = tree_visit;
+			treeProto.visitAfter = tree_visitAfter;
+			treeProto.x = tree_x;
+			treeProto.y = tree_y;
+
+			var slice$1 = [].slice;
+
+			var noabort = {};
+
+			function Queue(size) {
+			  if (!(size >= 1)) throw new Error;
+			  this._size = size;
+			  this._call =
+			  this._error = null;
+			  this._tasks = [];
+			  this._data = [];
+			  this._waiting =
+			  this._active =
+			  this._ended =
+			  this._start = 0; // inside a synchronous task callback?
+			}
+
+			Queue.prototype = queue.prototype = {
+			  constructor: Queue,
+			  defer: function(callback) {
+				if (typeof callback !== "function" || this._call) throw new Error;
+				if (this._error != null) return this;
+				var t = slice$1.call(arguments, 1);
+				t.push(callback);
+				++this._waiting, this._tasks.push(t);
+				poke(this);
+				return this;
+			  },
+			  abort: function() {
+				if (this._error == null) abort(this, new Error("abort"));
+				return this;
+			  },
+			  await: function(callback) {
+				if (typeof callback !== "function" || this._call) throw new Error;
+				this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
+				maybeNotify(this);
+				return this;
+			  },
+			  awaitAll: function(callback) {
+				if (typeof callback !== "function" || this._call) throw new Error;
+				this._call = callback;
+				maybeNotify(this);
+				return this;
+			  }
+			};
+
+			function poke(q) {
+			  if (!q._start) {
+				try { start(q); } // let the current task complete
+				catch (e) {
+				  if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
+				  else if (!q._data) throw e; // await callback errored synchronously
+				}
+			  }
+			}
+
+			function start(q) {
+			  while (q._start = q._waiting && q._active < q._size) {
+				var i = q._ended + q._active,
+					t = q._tasks[i],
+					j = t.length - 1,
+					c = t[j];
+				t[j] = end(q, i);
+				--q._waiting, ++q._active;
+				t = c.apply(null, t);
+				if (!q._tasks[i]) continue; // task finished synchronously
+				q._tasks[i] = t || noabort;
+			  }
+			}
+
+			function end(q, i) {
+			  return function(e, r) {
+				if (!q._tasks[i]) return; // ignore multiple callbacks
+				--q._active, ++q._ended;
+				q._tasks[i] = null;
+				if (q._error != null) return; // ignore secondary errors
+				if (e != null) {
+				  abort(q, e);
+				} else {
+				  q._data[i] = r;
+				  if (q._waiting) poke(q);
+				  else maybeNotify(q);
+				}
+			  };
+			}
+
+			function abort(q, e) {
+			  var i = q._tasks.length, t;
+			  q._error = e; // ignore active callbacks
+			  q._data = undefined; // allow gc
+			  q._waiting = NaN; // prevent starting
+
+			  while (--i >= 0) {
+				if (t = q._tasks[i]) {
+				  q._tasks[i] = null;
+				  if (t.abort) {
+					try { t.abort(); }
+					catch (e) { /* ignore */ }
+				  }
+				}
+			  }
+
+			  q._active = NaN; // allow notification
+			  maybeNotify(q);
+			}
+
+			function maybeNotify(q) {
+			  if (!q._active && q._call) {
+				var d = q._data;
+				q._data = undefined; // allow gc
+				q._call(q._error, d);
+			  }
+			}
+
+			function queue(concurrency) {
+			  return new Queue(arguments.length ? +concurrency : Infinity);
+			}
+
+			var constant$2 = function(x) {
+			  return function constant() {
+				return x;
+			  };
+			};
+
+			var epsilon$1 = 1e-12;
+			var pi$2 = Math.PI;
+			var halfPi$1 = pi$2 / 2;
+			var tau$2 = 2 * pi$2;
+
+			function arcInnerRadius(d) {
+			  return d.innerRadius;
+			}
+
+			function arcOuterRadius(d) {
+			  return d.outerRadius;
+			}
+
+			function arcStartAngle(d) {
+			  return d.startAngle;
+			}
+
+			function arcEndAngle(d) {
+			  return d.endAngle;
+			}
+
+			function arcPadAngle(d) {
+			  return d && d.padAngle; // Note: optional!
+			}
+
+			function asin(x) {
+			  return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);
+			}
+
+			function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+			  var x10 = x1 - x0, y10 = y1 - y0,
+				  x32 = x3 - x2, y32 = y3 - y2,
+				  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
+			  return [x0 + t * x10, y0 + t * y10];
+			}
+
+			// Compute perpendicular offset line of length rc.
+			// http://mathworld.wolfram.com/Circle-LineIntersection.html
+			function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+			  var x01 = x0 - x1,
+				  y01 = y0 - y1,
+				  lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
+				  ox = lo * y01,
+				  oy = -lo * x01,
+				  x11 = x0 + ox,
+				  y11 = y0 + oy,
+				  x10 = x1 + ox,
+				  y10 = y1 + oy,
+				  x00 = (x11 + x10) / 2,
+				  y00 = (y11 + y10) / 2,
+				  dx = x10 - x11,
+				  dy = y10 - y11,
+				  d2 = dx * dx + dy * dy,
+				  r = r1 - rc,
+				  D = x11 * y10 - x10 * y11,
+				  d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
+				  cx0 = (D * dy - dx * d) / d2,
+				  cy0 = (-D * dx - dy * d) / d2,
+				  cx1 = (D * dy + dx * d) / d2,
+				  cy1 = (-D * dx + dy * d) / d2,
+				  dx0 = cx0 - x00,
+				  dy0 = cy0 - y00,
+				  dx1 = cx1 - x00,
+				  dy1 = cy1 - y00;
+
+			  // Pick the closer of the two intersection points.
+			  // TODO Is there a faster way to determine which intersection to use?
+			  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+
+			  return {
+				cx: cx0,
+				cy: cy0,
+				x01: -ox,
+				y01: -oy,
+				x11: cx0 * (r1 / r - 1),
+				y11: cy0 * (r1 / r - 1)
+			  };
+			}
+
+			var arc = function() {
+			  var innerRadius = arcInnerRadius,
+				  outerRadius = arcOuterRadius,
+				  cornerRadius = constant$2(0),
+				  padRadius = null,
+				  startAngle = arcStartAngle,
+				  endAngle = arcEndAngle,
+				  padAngle = arcPadAngle,
+				  context = null;
+
+			  function arc() {
+				var buffer,
+					r,
+					r0 = +innerRadius.apply(this, arguments),
+					r1 = +outerRadius.apply(this, arguments),
+					a0 = startAngle.apply(this, arguments) - halfPi$1,
+					a1 = endAngle.apply(this, arguments) - halfPi$1,
+					da = Math.abs(a1 - a0),
+					cw = a1 > a0;
+
+				if (!context) context = buffer = path();
+
+				// Ensure that the outer radius is always larger than the inner radius.
+				if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+				// Is it a point?
+				if (!(r1 > epsilon$1)) context.moveTo(0, 0);
+
+				// Or is it a circle or annulus?
+				else if (da > tau$2 - epsilon$1) {
+				  context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
+				  context.arc(0, 0, r1, a0, a1, !cw);
+				  if (r0 > epsilon$1) {
+					context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
+					context.arc(0, 0, r0, a1, a0, cw);
+				  }
+				}
+
+				// Or is it a circular or annular sector?
+				else {
+				  var a01 = a0,
+					  a11 = a1,
+					  a00 = a0,
+					  a10 = a1,
+					  da0 = da,
+					  da1 = da,
+					  ap = padAngle.apply(this, arguments) / 2,
+					  rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
+					  rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+					  rc0 = rc,
+					  rc1 = rc,
+					  t0,
+					  t1;
+
+				  // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+				  if (rp > epsilon$1) {
+					var p0 = asin(rp / r0 * Math.sin(ap)),
+						p1 = asin(rp / r1 * Math.sin(ap));
+					if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
+					else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+					if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
+					else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+				  }
+
+				  var x01 = r1 * Math.cos(a01),
+					  y01 = r1 * Math.sin(a01),
+					  x10 = r0 * Math.cos(a10),
+					  y10 = r0 * Math.sin(a10);
+
+				  // Apply rounded corners?
+				  if (rc > epsilon$1) {
+					var x11 = r1 * Math.cos(a11),
+						y11 = r1 * Math.sin(a11),
+						x00 = r0 * Math.cos(a00),
+						y00 = r0 * Math.sin(a00);
+
+					// Restrict the corner radius according to the sector angle.
+					if (da < pi$2) {
+					  var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
+						  ax = x01 - oc[0],
+						  ay = y01 - oc[1],
+						  bx = x11 - oc[0],
+						  by = y11 - oc[1],
+						  kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
+						  lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
+					  rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
+					  rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
+					}
+				  }
+
+				  // Is the sector collapsed to a line?
+				  if (!(da1 > epsilon$1)) context.moveTo(x01, y01);
+
+				  // Does the sector’s outer ring have rounded corners?
+				  else if (rc1 > epsilon$1) {
+					t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+					t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+
+					context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+					// Have the corners merged?
+					if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+					// Otherwise, draw the two corners and the ring.
+					else {
+					  context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+					  context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+					  context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+					}
+				  }
+
+				  // Or is the outer ring just a circular arc?
+				  else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+				  // Is there no inner ring, and it’s a circular sector?
+				  // Or perhaps it’s an annular sector collapsed due to padding?
+				  if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);
+
+				  // Does the sector’s inner ring (or point) have rounded corners?
+				  else if (rc0 > epsilon$1) {
+					t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+					t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+
+					context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+					// Have the corners merged?
+					if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+					// Otherwise, draw the two corners and the ring.
+					else {
+					  context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+					  context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+					  context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+					}
+				  }
+
+				  // Or is the inner ring just a circular arc?
+				  else context.arc(0, 0, r0, a10, a00, cw);
+				}
+
+				context.closePath();
+
+				if (buffer) return context = null, buffer + "" || null;
+			  }
+
+			  arc.centroid = function() {
+				var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+					a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;
+				return [Math.cos(a) * r, Math.sin(a) * r];
+			  };
+
+			  arc.innerRadius = function(_) {
+				return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius;
+			  };
+
+			  arc.outerRadius = function(_) {
+				return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius;
+			  };
+
+			  arc.cornerRadius = function(_) {
+				return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius;
+			  };
+
+			  arc.padRadius = function(_) {
+				return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius;
+			  };
+
+			  arc.startAngle = function(_) {
+				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle;
+			  };
+
+			  arc.endAngle = function(_) {
+				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle;
+			  };
+
+			  arc.padAngle = function(_) {
+				return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle;
+			  };
+
+			  arc.context = function(_) {
+				return arguments.length ? ((context = _ == null ? null : _), arc) : context;
+			  };
+
+			  return arc;
+			};
+
+			function Linear(context) {
+			  this._context = context;
+			}
+
+			Linear.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; // proceed
+				  default: this._context.lineTo(x, y); break;
+				}
+			  }
+			};
+
+			var curveLinear = function(context) {
+			  return new Linear(context);
+			};
+
+			function x(p) {
+			  return p[0];
+			}
+
+			function y(p) {
+			  return p[1];
+			}
+
+			var line = function() {
+			  var x$$1 = x,
+				  y$$1 = y,
+				  defined = constant$2(true),
+				  context = null,
+				  curve = curveLinear,
+				  output = null;
+
+			  function line(data) {
+				var i,
+					n = data.length,
+					d,
+					defined0 = false,
+					buffer;
+
+				if (context == null) output = curve(buffer = path());
+
+				for (i = 0; i <= n; ++i) {
+				  if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+					if (defined0 = !defined0) output.lineStart();
+					else output.lineEnd();
+				  }
+				  if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
+				}
+
+				if (buffer) return output = null, buffer + "" || null;
+			  }
+
+			  line.x = function(_) {
+				return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1;
+			  };
+
+			  line.y = function(_) {
+				return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1;
+			  };
+
+			  line.defined = function(_) {
+				return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined;
+			  };
+
+			  line.curve = function(_) {
+				return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+			  };
+
+			  line.context = function(_) {
+				return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+			  };
+
+			  return line;
+			};
+
+			var area$1 = function() {
+			  var x0 = x,
+				  x1 = null,
+				  y0 = constant$2(0),
+				  y1 = y,
+				  defined = constant$2(true),
+				  context = null,
+				  curve = curveLinear,
+				  output = null;
+
+			  function area(data) {
+				var i,
+					j,
+					k,
+					n = data.length,
+					d,
+					defined0 = false,
+					buffer,
+					x0z = new Array(n),
+					y0z = new Array(n);
+
+				if (context == null) output = curve(buffer = path());
+
+				for (i = 0; i <= n; ++i) {
+				  if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+					if (defined0 = !defined0) {
+					  j = i;
+					  output.areaStart();
+					  output.lineStart();
+					} else {
+					  output.lineEnd();
+					  output.lineStart();
+					  for (k = i - 1; k >= j; --k) {
+						output.point(x0z[k], y0z[k]);
+					  }
+					  output.lineEnd();
+					  output.areaEnd();
+					}
+				  }
+				  if (defined0) {
+					x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+					output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+				  }
+				}
+
+				if (buffer) return output = null, buffer + "" || null;
+			  }
+
+			  function arealine() {
+				return line().defined(defined).curve(curve).context(context);
+			  }
+
+			  area.x = function(_) {
+				return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0;
+			  };
+
+			  area.x0 = function(_) {
+				return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0;
+			  };
+
+			  area.x1 = function(_) {
+				return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1;
+			  };
+
+			  area.y = function(_) {
+				return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0;
+			  };
+
+			  area.y0 = function(_) {
+				return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0;
+			  };
+
+			  area.y1 = function(_) {
+				return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1;
+			  };
+
+			  area.lineX0 =
+			  area.lineY0 = function() {
+				return arealine().x(x0).y(y0);
+			  };
+
+			  area.lineY1 = function() {
+				return arealine().x(x0).y(y1);
+			  };
+
+			  area.lineX1 = function() {
+				return arealine().x(x1).y(y0);
+			  };
+
+			  area.defined = function(_) {
+				return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined;
+			  };
+
+			  area.curve = function(_) {
+				return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+			  };
+
+			  area.context = function(_) {
+				return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+			  };
+
+			  return area;
+			};
+
+			var descending$1 = function(a, b) {
+			  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+			};
+
+			var identity$1 = function(d) {
+			  return d;
+			};
+
+			var pie = function() {
+			  var value = identity$1,
+				  sortValues = descending$1,
+				  sort = null,
+				  startAngle = constant$2(0),
+				  endAngle = constant$2(tau$2),
+				  padAngle = constant$2(0);
+
+			  function pie(data) {
+				var i,
+					n = data.length,
+					j,
+					k,
+					sum = 0,
+					index = new Array(n),
+					arcs = new Array(n),
+					a0 = +startAngle.apply(this, arguments),
+					da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),
+					a1,
+					p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+					pa = p * (da < 0 ? -1 : 1),
+					v;
+
+				for (i = 0; i < n; ++i) {
+				  if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+					sum += v;
+				  }
+				}
+
+				// Optionally sort the arcs by previously-computed values or by data.
+				if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
+				else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
+
+				// Compute the arcs! They are stored in the original data's order.
+				for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+				  j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+					data: data[j],
+					index: i,
+					value: v,
+					startAngle: a0,
+					endAngle: a1,
+					padAngle: p
+				  };
+				}
+
+				return arcs;
+			  }
+
+			  pie.value = function(_) {
+				return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value;
+			  };
+
+			  pie.sortValues = function(_) {
+				return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+			  };
+
+			  pie.sort = function(_) {
+				return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+			  };
+
+			  pie.startAngle = function(_) {
+				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle;
+			  };
+
+			  pie.endAngle = function(_) {
+				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle;
+			  };
+
+			  pie.padAngle = function(_) {
+				return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle;
+			  };
+
+			  return pie;
+			};
+
+			var curveRadialLinear = curveRadial(curveLinear);
+
+			function Radial(curve) {
+			  this._curve = curve;
+			}
+
+			Radial.prototype = {
+			  areaStart: function() {
+				this._curve.areaStart();
+			  },
+			  areaEnd: function() {
+				this._curve.areaEnd();
+			  },
+			  lineStart: function() {
+				this._curve.lineStart();
+			  },
+			  lineEnd: function() {
+				this._curve.lineEnd();
+			  },
+			  point: function(a, r) {
+				this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+			  }
+			};
+
+			function curveRadial(curve) {
+
+			  function radial(context) {
+				return new Radial(curve(context));
+			  }
+
+			  radial._curve = curve;
+
+			  return radial;
+			}
+
+			function radialLine(l) {
+			  var c = l.curve;
+
+			  l.angle = l.x, delete l.x;
+			  l.radius = l.y, delete l.y;
+
+			  l.curve = function(_) {
+				return arguments.length ? c(curveRadial(_)) : c()._curve;
+			  };
+
+			  return l;
+			}
+
+			var radialLine$1 = function() {
+			  return radialLine(line().curve(curveRadialLinear));
+			};
+
+			var radialArea = function() {
+			  var a = area$1().curve(curveRadialLinear),
+				  c = a.curve,
+				  x0 = a.lineX0,
+				  x1 = a.lineX1,
+				  y0 = a.lineY0,
+				  y1 = a.lineY1;
+
+			  a.angle = a.x, delete a.x;
+			  a.startAngle = a.x0, delete a.x0;
+			  a.endAngle = a.x1, delete a.x1;
+			  a.radius = a.y, delete a.y;
+			  a.innerRadius = a.y0, delete a.y0;
+			  a.outerRadius = a.y1, delete a.y1;
+			  a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
+			  a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
+			  a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
+			  a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
+
+			  a.curve = function(_) {
+				return arguments.length ? c(curveRadial(_)) : c()._curve;
+			  };
+
+			  return a;
+			};
+
+			var circle = {
+			  draw: function(context, size) {
+				var r = Math.sqrt(size / pi$2);
+				context.moveTo(r, 0);
+				context.arc(0, 0, r, 0, tau$2);
+			  }
+			};
+
+			var cross$1 = {
+			  draw: function(context, size) {
+				var r = Math.sqrt(size / 5) / 2;
+				context.moveTo(-3 * r, -r);
+				context.lineTo(-r, -r);
+				context.lineTo(-r, -3 * r);
+				context.lineTo(r, -3 * r);
+				context.lineTo(r, -r);
+				context.lineTo(3 * r, -r);
+				context.lineTo(3 * r, r);
+				context.lineTo(r, r);
+				context.lineTo(r, 3 * r);
+				context.lineTo(-r, 3 * r);
+				context.lineTo(-r, r);
+				context.lineTo(-3 * r, r);
+				context.closePath();
+			  }
+			};
+
+			var tan30 = Math.sqrt(1 / 3);
+			var tan30_2 = tan30 * 2;
+
+			var diamond = {
+			  draw: function(context, size) {
+				var y = Math.sqrt(size / tan30_2),
+					x = y * tan30;
+				context.moveTo(0, -y);
+				context.lineTo(x, 0);
+				context.lineTo(0, y);
+				context.lineTo(-x, 0);
+				context.closePath();
+			  }
+			};
+
+			var ka = 0.89081309152928522810;
+			var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);
+			var kx = Math.sin(tau$2 / 10) * kr;
+			var ky = -Math.cos(tau$2 / 10) * kr;
+
+			var star = {
+			  draw: function(context, size) {
+				var r = Math.sqrt(size * ka),
+					x = kx * r,
+					y = ky * r;
+				context.moveTo(0, -r);
+				context.lineTo(x, y);
+				for (var i = 1; i < 5; ++i) {
+				  var a = tau$2 * i / 5,
+					  c = Math.cos(a),
+					  s = Math.sin(a);
+				  context.lineTo(s * r, -c * r);
+				  context.lineTo(c * x - s * y, s * x + c * y);
+				}
+				context.closePath();
+			  }
+			};
+
+			var square = {
+			  draw: function(context, size) {
+				var w = Math.sqrt(size),
+					x = -w / 2;
+				context.rect(x, x, w, w);
+			  }
+			};
+
+			var sqrt3 = Math.sqrt(3);
+
+			var triangle = {
+			  draw: function(context, size) {
+				var y = -Math.sqrt(size / (sqrt3 * 3));
+				context.moveTo(0, y * 2);
+				context.lineTo(-sqrt3 * y, -y);
+				context.lineTo(sqrt3 * y, -y);
+				context.closePath();
+			  }
+			};
+
+			var c = -0.5;
+			var s = Math.sqrt(3) / 2;
+			var k = 1 / Math.sqrt(12);
+			var a = (k / 2 + 1) * 3;
+
+			var wye = {
+			  draw: function(context, size) {
+				var r = Math.sqrt(size / a),
+					x0 = r / 2,
+					y0 = r * k,
+					x1 = x0,
+					y1 = r * k + r,
+					x2 = -x1,
+					y2 = y1;
+				context.moveTo(x0, y0);
+				context.lineTo(x1, y1);
+				context.lineTo(x2, y2);
+				context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+				context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+				context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+				context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+				context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+				context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+				context.closePath();
+			  }
+			};
+
+			var symbols = [
+			  circle,
+			  cross$1,
+			  diamond,
+			  square,
+			  star,
+			  triangle,
+			  wye
+			];
+
+			var symbol = function() {
+			  var type = constant$2(circle),
+				  size = constant$2(64),
+				  context = null;
+
+			  function symbol() {
+				var buffer;
+				if (!context) context = buffer = path();
+				type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+				if (buffer) return context = null, buffer + "" || null;
+			  }
+
+			  symbol.type = function(_) {
+				return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type;
+			  };
+
+			  symbol.size = function(_) {
+				return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size;
+			  };
+
+			  symbol.context = function(_) {
+				return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+			  };
+
+			  return symbol;
+			};
+
+			var noop = function() {};
+
+			function point(that, x, y) {
+			  that._context.bezierCurveTo(
+				(2 * that._x0 + that._x1) / 3,
+				(2 * that._y0 + that._y1) / 3,
+				(that._x0 + 2 * that._x1) / 3,
+				(that._y0 + 2 * that._y1) / 3,
+				(that._x0 + 4 * that._x1 + x) / 6,
+				(that._y0 + 4 * that._y1 + y) / 6
+			  );
+			}
+
+			function Basis(context) {
+			  this._context = context;
+			}
+
+			Basis.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 =
+				this._y0 = this._y1 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 3: point(this, this._x1, this._y1); // proceed
+				  case 2: this._context.lineTo(this._x1, this._y1); break;
+				}
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
+				  default: point(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = x;
+				this._y0 = this._y1, this._y1 = y;
+			  }
+			};
+
+			var basis = function(context) {
+			  return new Basis(context);
+			};
+
+			function BasisClosed(context) {
+			  this._context = context;
+			}
+
+			BasisClosed.prototype = {
+			  areaStart: noop,
+			  areaEnd: noop,
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
+				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 1: {
+					this._context.moveTo(this._x2, this._y2);
+					this._context.closePath();
+					break;
+				  }
+				  case 2: {
+					this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+					this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+					this._context.closePath();
+					break;
+				  }
+				  case 3: {
+					this.point(this._x2, this._y2);
+					this.point(this._x3, this._y3);
+					this.point(this._x4, this._y4);
+					break;
+				  }
+				}
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
+				  case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
+				  case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
+				  default: point(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = x;
+				this._y0 = this._y1, this._y1 = y;
+			  }
+			};
+
+			var basisClosed = function(context) {
+			  return new BasisClosed(context);
+			};
+
+			function BasisOpen(context) {
+			  this._context = context;
+			}
+
+			BasisOpen.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 =
+				this._y0 = this._y1 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
+				  case 3: this._point = 4; // proceed
+				  default: point(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = x;
+				this._y0 = this._y1, this._y1 = y;
+			  }
+			};
+
+			var basisOpen = function(context) {
+			  return new BasisOpen(context);
+			};
+
+			function Bundle(context, beta) {
+			  this._basis = new Basis(context);
+			  this._beta = beta;
+			}
+
+			Bundle.prototype = {
+			  lineStart: function() {
+				this._x = [];
+				this._y = [];
+				this._basis.lineStart();
+			  },
+			  lineEnd: function() {
+				var x = this._x,
+					y = this._y,
+					j = x.length - 1;
+
+				if (j > 0) {
+				  var x0 = x[0],
+					  y0 = y[0],
+					  dx = x[j] - x0,
+					  dy = y[j] - y0,
+					  i = -1,
+					  t;
+
+				  while (++i <= j) {
+					t = i / j;
+					this._basis.point(
+					  this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
+					  this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
+					);
+				  }
+				}
+
+				this._x = this._y = null;
+				this._basis.lineEnd();
+			  },
+			  point: function(x, y) {
+				this._x.push(+x);
+				this._y.push(+y);
+			  }
+			};
+
+			var bundle = (function custom(beta) {
+
+			  function bundle(context) {
+				return beta === 1 ? new Basis(context) : new Bundle(context, beta);
+			  }
+
+			  bundle.beta = function(beta) {
+				return custom(+beta);
+			  };
+
+			  return bundle;
+			})(0.85);
+
+			function point$1(that, x, y) {
+			  that._context.bezierCurveTo(
+				that._x1 + that._k * (that._x2 - that._x0),
+				that._y1 + that._k * (that._y2 - that._y0),
+				that._x2 + that._k * (that._x1 - x),
+				that._y2 + that._k * (that._y1 - y),
+				that._x2,
+				that._y2
+			  );
+			}
+
+			function Cardinal(context, tension) {
+			  this._context = context;
+			  this._k = (1 - tension) / 6;
+			}
+
+			Cardinal.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 =
+				this._y0 = this._y1 = this._y2 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 2: this._context.lineTo(this._x2, this._y2); break;
+				  case 3: point$1(this, this._x1, this._y1); break;
+				}
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
+				  case 2: this._point = 3; // proceed
+				  default: point$1(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var cardinal = (function custom(tension) {
+
+			  function cardinal(context) {
+				return new Cardinal(context, tension);
+			  }
+
+			  cardinal.tension = function(tension) {
+				return custom(+tension);
+			  };
+
+			  return cardinal;
+			})(0);
+
+			function CardinalClosed(context, tension) {
+			  this._context = context;
+			  this._k = (1 - tension) / 6;
+			}
+
+			CardinalClosed.prototype = {
+			  areaStart: noop,
+			  areaEnd: noop,
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 1: {
+					this._context.moveTo(this._x3, this._y3);
+					this._context.closePath();
+					break;
+				  }
+				  case 2: {
+					this._context.lineTo(this._x3, this._y3);
+					this._context.closePath();
+					break;
+				  }
+				  case 3: {
+					this.point(this._x3, this._y3);
+					this.point(this._x4, this._y4);
+					this.point(this._x5, this._y5);
+					break;
+				  }
+				}
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+				  case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+				  case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+				  default: point$1(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var cardinalClosed = (function custom(tension) {
+
+			  function cardinal(context) {
+				return new CardinalClosed(context, tension);
+			  }
+
+			  cardinal.tension = function(tension) {
+				return custom(+tension);
+			  };
+
+			  return cardinal;
+			})(0);
+
+			function CardinalOpen(context, tension) {
+			  this._context = context;
+			  this._k = (1 - tension) / 6;
+			}
+
+			CardinalOpen.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 =
+				this._y0 = this._y1 = this._y2 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+				  case 3: this._point = 4; // proceed
+				  default: point$1(this, x, y); break;
+				}
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var cardinalOpen = (function custom(tension) {
+
+			  function cardinal(context) {
+				return new CardinalOpen(context, tension);
+			  }
+
+			  cardinal.tension = function(tension) {
+				return custom(+tension);
+			  };
+
+			  return cardinal;
+			})(0);
+
+			function point$2(that, x, y) {
+			  var x1 = that._x1,
+				  y1 = that._y1,
+				  x2 = that._x2,
+				  y2 = that._y2;
+
+			  if (that._l01_a > epsilon$1) {
+				var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+					n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+				x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+				y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+			  }
+
+			  if (that._l23_a > epsilon$1) {
+				var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+					m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+				x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+				y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+			  }
+
+			  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+			}
+
+			function CatmullRom(context, alpha) {
+			  this._context = context;
+			  this._alpha = alpha;
+			}
+
+			CatmullRom.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 =
+				this._y0 = this._y1 = this._y2 = NaN;
+				this._l01_a = this._l12_a = this._l23_a =
+				this._l01_2a = this._l12_2a = this._l23_2a =
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 2: this._context.lineTo(this._x2, this._y2); break;
+				  case 3: this.point(this._x2, this._y2); break;
+				}
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+
+				if (this._point) {
+				  var x23 = this._x2 - x,
+					  y23 = this._y2 - y;
+				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+				}
+
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; // proceed
+				  default: point$2(this, x, y); break;
+				}
+
+				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var catmullRom = (function custom(alpha) {
+
+			  function catmullRom(context) {
+				return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
+			  }
+
+			  catmullRom.alpha = function(alpha) {
+				return custom(+alpha);
+			  };
+
+			  return catmullRom;
+			})(0.5);
+
+			function CatmullRomClosed(context, alpha) {
+			  this._context = context;
+			  this._alpha = alpha;
+			}
+
+			CatmullRomClosed.prototype = {
+			  areaStart: noop,
+			  areaEnd: noop,
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+				this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+				this._l01_a = this._l12_a = this._l23_a =
+				this._l01_2a = this._l12_2a = this._l23_2a =
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 1: {
+					this._context.moveTo(this._x3, this._y3);
+					this._context.closePath();
+					break;
+				  }
+				  case 2: {
+					this._context.lineTo(this._x3, this._y3);
+					this._context.closePath();
+					break;
+				  }
+				  case 3: {
+					this.point(this._x3, this._y3);
+					this.point(this._x4, this._y4);
+					this.point(this._x5, this._y5);
+					break;
+				  }
+				}
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+
+				if (this._point) {
+				  var x23 = this._x2 - x,
+					  y23 = this._y2 - y;
+				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+				}
+
+				switch (this._point) {
+				  case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+				  case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+				  case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+				  default: point$2(this, x, y); break;
+				}
+
+				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var catmullRomClosed = (function custom(alpha) {
+
+			  function catmullRom(context) {
+				return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
+			  }
+
+			  catmullRom.alpha = function(alpha) {
+				return custom(+alpha);
+			  };
+
+			  return catmullRom;
+			})(0.5);
+
+			function CatmullRomOpen(context, alpha) {
+			  this._context = context;
+			  this._alpha = alpha;
+			}
+
+			CatmullRomOpen.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 = this._x2 =
+				this._y0 = this._y1 = this._y2 = NaN;
+				this._l01_a = this._l12_a = this._l23_a =
+				this._l01_2a = this._l12_2a = this._l23_2a =
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+
+				if (this._point) {
+				  var x23 = this._x2 - x,
+					  y23 = this._y2 - y;
+				  this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+				}
+
+				switch (this._point) {
+				  case 0: this._point = 1; break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+				  case 3: this._point = 4; // proceed
+				  default: point$2(this, x, y); break;
+				}
+
+				this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+				this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+				this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+				this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+			  }
+			};
+
+			var catmullRomOpen = (function custom(alpha) {
+
+			  function catmullRom(context) {
+				return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
+			  }
+
+			  catmullRom.alpha = function(alpha) {
+				return custom(+alpha);
+			  };
+
+			  return catmullRom;
+			})(0.5);
+
+			function LinearClosed(context) {
+			  this._context = context;
+			}
+
+			LinearClosed.prototype = {
+			  areaStart: noop,
+			  areaEnd: noop,
+			  lineStart: function() {
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._point) this._context.closePath();
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				if (this._point) this._context.lineTo(x, y);
+				else this._point = 1, this._context.moveTo(x, y);
+			  }
+			};
+
+			var linearClosed = function(context) {
+			  return new LinearClosed(context);
+			};
+
+			function sign(x) {
+			  return x < 0 ? -1 : 1;
+			}
+
+			// Calculate the slopes of the tangents (Hermite-type interpolation) based on
+			// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+			// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+			// NOV(II), P. 443, 1990.
+			function slope3(that, x2, y2) {
+			  var h0 = that._x1 - that._x0,
+				  h1 = x2 - that._x1,
+				  s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+				  s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+				  p = (s0 * h1 + s1 * h0) / (h0 + h1);
+			  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+			}
+
+			// Calculate a one-sided slope.
+			function slope2(that, t) {
+			  var h = that._x1 - that._x0;
+			  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+			}
+
+			// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+			// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+			// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+			function point$3(that, t0, t1) {
+			  var x0 = that._x0,
+				  y0 = that._y0,
+				  x1 = that._x1,
+				  y1 = that._y1,
+				  dx = (x1 - x0) / 3;
+			  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+			}
+
+			function MonotoneX(context) {
+			  this._context = context;
+			}
+
+			MonotoneX.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x0 = this._x1 =
+				this._y0 = this._y1 =
+				this._t0 = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				switch (this._point) {
+				  case 2: this._context.lineTo(this._x1, this._y1); break;
+				  case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
+				}
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				var t1 = NaN;
+
+				x = +x, y = +y;
+				if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; break;
+				  case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
+				  default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
+				}
+
+				this._x0 = this._x1, this._x1 = x;
+				this._y0 = this._y1, this._y1 = y;
+				this._t0 = t1;
+			  }
+			};
+
+			function MonotoneY(context) {
+			  this._context = new ReflectContext(context);
+			}
+
+			(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
+			  MonotoneX.prototype.point.call(this, y, x);
+			};
+
+			function ReflectContext(context) {
+			  this._context = context;
+			}
+
+			ReflectContext.prototype = {
+			  moveTo: function(x, y) { this._context.moveTo(y, x); },
+			  closePath: function() { this._context.closePath(); },
+			  lineTo: function(x, y) { this._context.lineTo(y, x); },
+			  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
+			};
+
+			function monotoneX(context) {
+			  return new MonotoneX(context);
+			}
+
+			function monotoneY(context) {
+			  return new MonotoneY(context);
+			}
+
+			function Natural(context) {
+			  this._context = context;
+			}
+
+			Natural.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x = [];
+				this._y = [];
+			  },
+			  lineEnd: function() {
+				var x = this._x,
+					y = this._y,
+					n = x.length;
+
+				if (n) {
+				  this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+				  if (n === 2) {
+					this._context.lineTo(x[1], y[1]);
+				  } else {
+					var px = controlPoints(x),
+						py = controlPoints(y);
+					for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+					  this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+					}
+				  }
+				}
+
+				if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
+				this._line = 1 - this._line;
+				this._x = this._y = null;
+			  },
+			  point: function(x, y) {
+				this._x.push(+x);
+				this._y.push(+y);
+			  }
+			};
+
+			// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+			function controlPoints(x) {
+			  var i,
+				  n = x.length - 1,
+				  m,
+				  a = new Array(n),
+				  b = new Array(n),
+				  r = new Array(n);
+			  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+			  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+			  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+			  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+			  a[n - 1] = r[n - 1] / b[n - 1];
+			  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+			  b[n - 1] = (x[n] + a[n - 1]) / 2;
+			  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+			  return [a, b];
+			}
+
+			var natural = function(context) {
+			  return new Natural(context);
+			};
+
+			function Step(context, t) {
+			  this._context = context;
+			  this._t = t;
+			}
+
+			Step.prototype = {
+			  areaStart: function() {
+				this._line = 0;
+			  },
+			  areaEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._x = this._y = NaN;
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+				if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+				if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+			  },
+			  point: function(x, y) {
+				x = +x, y = +y;
+				switch (this._point) {
+				  case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+				  case 1: this._point = 2; // proceed
+				  default: {
+					if (this._t <= 0) {
+					  this._context.lineTo(this._x, y);
+					  this._context.lineTo(x, y);
+					} else {
+					  var x1 = this._x * (1 - this._t) + x * this._t;
+					  this._context.lineTo(x1, this._y);
+					  this._context.lineTo(x1, y);
+					}
+					break;
+				  }
+				}
+				this._x = x, this._y = y;
+			  }
+			};
+
+			var step = function(context) {
+			  return new Step(context, 0.5);
+			};
+
+			function stepBefore(context) {
+			  return new Step(context, 0);
+			}
+
+			function stepAfter(context) {
+			  return new Step(context, 1);
+			}
+
+			var slice$2 = Array.prototype.slice;
+
+			var none = function(series, order) {
+			  if (!((n = series.length) > 1)) return;
+			  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+				s0 = s1, s1 = series[order[i]];
+				for (var j = 0; j < m; ++j) {
+				  s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+				}
+			  }
+			};
+
+			var none$1 = function(series) {
+			  var n = series.length, o = new Array(n);
+			  while (--n >= 0) o[n] = n;
+			  return o;
+			};
+
+			function stackValue(d, key) {
+			  return d[key];
+			}
+
+			var stack = function() {
+			  var keys = constant$2([]),
+				  order = none$1,
+				  offset = none,
+				  value = stackValue;
+
+			  function stack(data) {
+				var kz = keys.apply(this, arguments),
+					i,
+					m = data.length,
+					n = kz.length,
+					sz = new Array(n),
+					oz;
+
+				for (i = 0; i < n; ++i) {
+				  for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
+					si[j] = sij = [0, +value(data[j], ki, j, data)];
+					sij.data = data[j];
+				  }
+				  si.key = ki;
+				}
+
+				for (i = 0, oz = order(sz); i < n; ++i) {
+				  sz[oz[i]].index = i;
+				}
+
+				offset(sz, oz);
+				return sz;
+			  }
+
+			  stack.keys = function(_) {
+				return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys;
+			  };
+
+			  stack.value = function(_) {
+				return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value;
+			  };
+
+			  stack.order = function(_) {
+				return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order;
+			  };
+
+			  stack.offset = function(_) {
+				return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
+			  };
+
+			  return stack;
+			};
+
+			var expand = function(series, order) {
+			  if (!((n = series.length) > 0)) return;
+			  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+				for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+				if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+			  }
+			  none(series, order);
+			};
+
+			var silhouette = function(series, order) {
+			  if (!((n = series.length) > 0)) return;
+			  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+				for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+				s0[j][1] += s0[j][0] = -y / 2;
+			  }
+			  none(series, order);
+			};
+
+			var wiggle = function(series, order) {
+			  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+			  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+				for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+				  var si = series[order[i]],
+					  sij0 = si[j][1] || 0,
+					  sij1 = si[j - 1][1] || 0,
+					  s3 = (sij0 - sij1) / 2;
+				  for (var k = 0; k < i; ++k) {
+					var sk = series[order[k]],
+						skj0 = sk[j][1] || 0,
+						skj1 = sk[j - 1][1] || 0;
+					s3 += skj0 - skj1;
+				  }
+				  s1 += sij0, s2 += s3 * sij0;
+				}
+				s0[j - 1][1] += s0[j - 1][0] = y;
+				if (s1) y -= s2 / s1;
+			  }
+			  s0[j - 1][1] += s0[j - 1][0] = y;
+			  none(series, order);
+			};
+
+			var ascending$1 = function(series) {
+			  var sums = series.map(sum$1);
+			  return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
+			};
+
+			function sum$1(series) {
+			  var s = 0, i = -1, n = series.length, v;
+			  while (++i < n) if (v = +series[i][1]) s += v;
+			  return s;
+			}
+
+			var descending$2 = function(series) {
+			  return ascending$1(series).reverse();
+			};
+
+			var insideOut = function(series) {
+			  var n = series.length,
+				  i,
+				  j,
+				  sums = series.map(sum$1),
+				  order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
+				  top = 0,
+				  bottom = 0,
+				  tops = [],
+				  bottoms = [];
+
+			  for (i = 0; i < n; ++i) {
+				j = order[i];
+				if (top < bottom) {
+				  top += sums[j];
+				  tops.push(j);
+				} else {
+				  bottom += sums[j];
+				  bottoms.push(j);
+				}
+			  }
+
+			  return bottoms.reverse().concat(tops);
+			};
+
+			var reverse = function(series) {
+			  return none$1(series).reverse();
+			};
+
+			var define = function(constructor, factory, prototype) {
+			  constructor.prototype = factory.prototype = prototype;
+			  prototype.constructor = constructor;
+			};
+
+			function extend(parent, definition) {
+			  var prototype = Object.create(parent.prototype);
+			  for (var key in definition) prototype[key] = definition[key];
+			  return prototype;
+			}
+
+			function Color() {}
+
+			var darker = 0.7;
+			var brighter = 1 / darker;
+
+			var reHex3 = /^#([0-9a-f]{3})$/;
+			var reHex6 = /^#([0-9a-f]{6})$/;
+			var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
+			var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+			var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+			var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+			var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+			var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+
+			var named = {
+			  aliceblue: 0xf0f8ff,
+			  antiquewhite: 0xfaebd7,
+			  aqua: 0x00ffff,
+			  aquamarine: 0x7fffd4,
+			  azure: 0xf0ffff,
+			  beige: 0xf5f5dc,
+			  bisque: 0xffe4c4,
+			  black: 0x000000,
+			  blanchedalmond: 0xffebcd,
+			  blue: 0x0000ff,
+			  blueviolet: 0x8a2be2,
+			  brown: 0xa52a2a,
+			  burlywood: 0xdeb887,
+			  cadetblue: 0x5f9ea0,
+			  chartreuse: 0x7fff00,
+			  chocolate: 0xd2691e,
+			  coral: 0xff7f50,
+			  cornflowerblue: 0x6495ed,
+			  cornsilk: 0xfff8dc,
+			  crimson: 0xdc143c,
+			  cyan: 0x00ffff,
+			  darkblue: 0x00008b,
+			  darkcyan: 0x008b8b,
+			  darkgoldenrod: 0xb8860b,
+			  darkgray: 0xa9a9a9,
+			  darkgreen: 0x006400,
+			  darkgrey: 0xa9a9a9,
+			  darkkhaki: 0xbdb76b,
+			  darkmagenta: 0x8b008b,
+			  darkolivegreen: 0x556b2f,
+			  darkorange: 0xff8c00,
+			  darkorchid: 0x9932cc,
+			  darkred: 0x8b0000,
+			  darksalmon: 0xe9967a,
+			  darkseagreen: 0x8fbc8f,
+			  darkslateblue: 0x483d8b,
+			  darkslategray: 0x2f4f4f,
+			  darkslategrey: 0x2f4f4f,
+			  darkturquoise: 0x00ced1,
+			  darkviolet: 0x9400d3,
+			  deeppink: 0xff1493,
+			  deepskyblue: 0x00bfff,
+			  dimgray: 0x696969,
+			  dimgrey: 0x696969,
+			  dodgerblue: 0x1e90ff,
+			  firebrick: 0xb22222,
+			  floralwhite: 0xfffaf0,
+			  forestgreen: 0x228b22,
+			  fuchsia: 0xff00ff,
+			  gainsboro: 0xdcdcdc,
+			  ghostwhite: 0xf8f8ff,
+			  gold: 0xffd700,
+			  goldenrod: 0xdaa520,
+			  gray: 0x808080,
+			  green: 0x008000,
+			  greenyellow: 0xadff2f,
+			  grey: 0x808080,
+			  honeydew: 0xf0fff0,
+			  hotpink: 0xff69b4,
+			  indianred: 0xcd5c5c,
+			  indigo: 0x4b0082,
+			  ivory: 0xfffff0,
+			  khaki: 0xf0e68c,
+			  lavender: 0xe6e6fa,
+			  lavenderblush: 0xfff0f5,
+			  lawngreen: 0x7cfc00,
+			  lemonchiffon: 0xfffacd,
+			  lightblue: 0xadd8e6,
+			  lightcoral: 0xf08080,
+			  lightcyan: 0xe0ffff,
+			  lightgoldenrodyellow: 0xfafad2,
+			  lightgray: 0xd3d3d3,
+			  lightgreen: 0x90ee90,
+			  lightgrey: 0xd3d3d3,
+			  lightpink: 0xffb6c1,
+			  lightsalmon: 0xffa07a,
+			  lightseagreen: 0x20b2aa,
+			  lightskyblue: 0x87cefa,
+			  lightslategray: 0x778899,
+			  lightslategrey: 0x778899,
+			  lightsteelblue: 0xb0c4de,
+			  lightyellow: 0xffffe0,
+			  lime: 0x00ff00,
+			  limegreen: 0x32cd32,
+			  linen: 0xfaf0e6,
+			  magenta: 0xff00ff,
+			  maroon: 0x800000,
+			  mediumaquamarine: 0x66cdaa,
+			  mediumblue: 0x0000cd,
+			  mediumorchid: 0xba55d3,
+			  mediumpurple: 0x9370db,
+			  mediumseagreen: 0x3cb371,
+			  mediumslateblue: 0x7b68ee,
+			  mediumspringgreen: 0x00fa9a,
+			  mediumturquoise: 0x48d1cc,
+			  mediumvioletred: 0xc71585,
+			  midnightblue: 0x191970,
+			  mintcream: 0xf5fffa,
+			  mistyrose: 0xffe4e1,
+			  moccasin: 0xffe4b5,
+			  navajowhite: 0xffdead,
+			  navy: 0x000080,
+			  oldlace: 0xfdf5e6,
+			  olive: 0x808000,
+			  olivedrab: 0x6b8e23,
+			  orange: 0xffa500,
+			  orangered: 0xff4500,
+			  orchid: 0xda70d6,
+			  palegoldenrod: 0xeee8aa,
+			  palegreen: 0x98fb98,
+			  paleturquoise: 0xafeeee,
+			  palevioletred: 0xdb7093,
+			  papayawhip: 0xffefd5,
+			  peachpuff: 0xffdab9,
+			  peru: 0xcd853f,
+			  pink: 0xffc0cb,
+			  plum: 0xdda0dd,
+			  powderblue: 0xb0e0e6,
+			  purple: 0x800080,
+			  rebeccapurple: 0x663399,
+			  red: 0xff0000,
+			  rosybrown: 0xbc8f8f,
+			  royalblue: 0x4169e1,
+			  saddlebrown: 0x8b4513,
+			  salmon: 0xfa8072,
+			  sandybrown: 0xf4a460,
+			  seagreen: 0x2e8b57,
+			  seashell: 0xfff5ee,
+			  sienna: 0xa0522d,
+			  silver: 0xc0c0c0,
+			  skyblue: 0x87ceeb,
+			  slateblue: 0x6a5acd,
+			  slategray: 0x708090,
+			  slategrey: 0x708090,
+			  snow: 0xfffafa,
+			  springgreen: 0x00ff7f,
+			  steelblue: 0x4682b4,
+			  tan: 0xd2b48c,
+			  teal: 0x008080,
+			  thistle: 0xd8bfd8,
+			  tomato: 0xff6347,
+			  turquoise: 0x40e0d0,
+			  violet: 0xee82ee,
+			  wheat: 0xf5deb3,
+			  white: 0xffffff,
+			  whitesmoke: 0xf5f5f5,
+			  yellow: 0xffff00,
+			  yellowgreen: 0x9acd32
+			};
+
+			define(Color, color, {
+			  displayable: function() {
+				return this.rgb().displayable();
+			  },
+			  toString: function() {
+				return this.rgb() + "";
+			  }
+			});
+
+			function color(format) {
+			  var m;
+			  format = (format + "").trim().toLowerCase();
+			  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
+				  : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
+				  : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+				  : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+				  : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+				  : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+				  : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+				  : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+				  : named.hasOwnProperty(format) ? rgbn(named[format])
+				  : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+				  : null;
+			}
+
+			function rgbn(n) {
+			  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+			}
+
+			function rgba(r, g, b, a) {
+			  if (a <= 0) r = g = b = NaN;
+			  return new Rgb(r, g, b, a);
+			}
+
+			function rgbConvert(o) {
+			  if (!(o instanceof Color)) o = color(o);
+			  if (!o) return new Rgb;
+			  o = o.rgb();
+			  return new Rgb(o.r, o.g, o.b, o.opacity);
+			}
+
+			function rgb(r, g, b, opacity) {
+			  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+			}
+
+			function Rgb(r, g, b, opacity) {
+			  this.r = +r;
+			  this.g = +g;
+			  this.b = +b;
+			  this.opacity = +opacity;
+			}
+
+			define(Rgb, rgb, extend(Color, {
+			  brighter: function(k) {
+				k = k == null ? brighter : Math.pow(brighter, k);
+				return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+			  },
+			  darker: function(k) {
+				k = k == null ? darker : Math.pow(darker, k);
+				return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+			  },
+			  rgb: function() {
+				return this;
+			  },
+			  displayable: function() {
+				return (0 <= this.r && this.r <= 255)
+					&& (0 <= this.g && this.g <= 255)
+					&& (0 <= this.b && this.b <= 255)
+					&& (0 <= this.opacity && this.opacity <= 1);
+			  },
+			  toString: function() {
+				var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+				return (a === 1 ? "rgb(" : "rgba(")
+					+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+					+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+					+ Math.max(0, Math.min(255, Math.round(this.b) || 0))
+					+ (a === 1 ? ")" : ", " + a + ")");
+			  }
+			}));
+
+			function hsla(h, s, l, a) {
+			  if (a <= 0) h = s = l = NaN;
+			  else if (l <= 0 || l >= 1) h = s = NaN;
+			  else if (s <= 0) h = NaN;
+			  return new Hsl(h, s, l, a);
+			}
+
+			function hslConvert(o) {
+			  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+			  if (!(o instanceof Color)) o = color(o);
+			  if (!o) return new Hsl;
+			  if (o instanceof Hsl) return o;
+			  o = o.rgb();
+			  var r = o.r / 255,
+				  g = o.g / 255,
+				  b = o.b / 255,
+				  min = Math.min(r, g, b),
+				  max = Math.max(r, g, b),
+				  h = NaN,
+				  s = max - min,
+				  l = (max + min) / 2;
+			  if (s) {
+				if (r === max) h = (g - b) / s + (g < b) * 6;
+				else if (g === max) h = (b - r) / s + 2;
+				else h = (r - g) / s + 4;
+				s /= l < 0.5 ? max + min : 2 - max - min;
+				h *= 60;
+			  } else {
+				s = l > 0 && l < 1 ? 0 : h;
+			  }
+			  return new Hsl(h, s, l, o.opacity);
+			}
+
+			function hsl(h, s, l, opacity) {
+			  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+			}
+
+			function Hsl(h, s, l, opacity) {
+			  this.h = +h;
+			  this.s = +s;
+			  this.l = +l;
+			  this.opacity = +opacity;
+			}
+
+			define(Hsl, hsl, extend(Color, {
+			  brighter: function(k) {
+				k = k == null ? brighter : Math.pow(brighter, k);
+				return new Hsl(this.h, this.s, this.l * k, this.opacity);
+			  },
+			  darker: function(k) {
+				k = k == null ? darker : Math.pow(darker, k);
+				return new Hsl(this.h, this.s, this.l * k, this.opacity);
+			  },
+			  rgb: function() {
+				var h = this.h % 360 + (this.h < 0) * 360,
+					s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+					l = this.l,
+					m2 = l + (l < 0.5 ? l : 1 - l) * s,
+					m1 = 2 * l - m2;
+				return new Rgb(
+				  hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+				  hsl2rgb(h, m1, m2),
+				  hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+				  this.opacity
+				);
+			  },
+			  displayable: function() {
+				return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+					&& (0 <= this.l && this.l <= 1)
+					&& (0 <= this.opacity && this.opacity <= 1);
+			  }
+			}));
+
+			/* From FvD 13.37, CSS Color Module Level 3 */
+			function hsl2rgb(h, m1, m2) {
+			  return (h < 60 ? m1 + (m2 - m1) * h / 60
+				  : h < 180 ? m2
+				  : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+				  : m1) * 255;
+			}
+
+			var deg2rad = Math.PI / 180;
+			var rad2deg = 180 / Math.PI;
+
+			var Kn = 18;
+			var Xn = 0.950470;
+			var Yn = 1;
+			var Zn = 1.088830;
+			var t0 = 4 / 29;
+			var t1 = 6 / 29;
+			var t2 = 3 * t1 * t1;
+			var t3 = t1 * t1 * t1;
+
+			function labConvert(o) {
+			  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+			  if (o instanceof Hcl) {
+				var h = o.h * deg2rad;
+				return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+			  }
+			  if (!(o instanceof Rgb)) o = rgbConvert(o);
+			  var b = rgb2xyz(o.r),
+				  a = rgb2xyz(o.g),
+				  l = rgb2xyz(o.b),
+				  x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
+				  y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
+				  z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
+			  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+			}
+
+			function lab(l, a, b, opacity) {
+			  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+			}
+
+			function Lab(l, a, b, opacity) {
+			  this.l = +l;
+			  this.a = +a;
+			  this.b = +b;
+			  this.opacity = +opacity;
+			}
+
+			define(Lab, lab, extend(Color, {
+			  brighter: function(k) {
+				return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+			  },
+			  darker: function(k) {
+				return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+			  },
+			  rgb: function() {
+				var y = (this.l + 16) / 116,
+					x = isNaN(this.a) ? y : y + this.a / 500,
+					z = isNaN(this.b) ? y : y - this.b / 200;
+				y = Yn * lab2xyz(y);
+				x = Xn * lab2xyz(x);
+				z = Zn * lab2xyz(z);
+				return new Rgb(
+				  xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
+				  xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
+				  xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
+				  this.opacity
+				);
+			  }
+			}));
+
+			function xyz2lab(t) {
+			  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+			}
+
+			function lab2xyz(t) {
+			  return t > t1 ? t * t * t : t2 * (t - t0);
+			}
+
+			function xyz2rgb(x) {
+			  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+			}
+
+			function rgb2xyz(x) {
+			  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+			}
+
+			function hclConvert(o) {
+			  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+			  if (!(o instanceof Lab)) o = labConvert(o);
+			  var h = Math.atan2(o.b, o.a) * rad2deg;
+			  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+			}
+
+			function hcl(h, c, l, opacity) {
+			  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+			}
+
+			function Hcl(h, c, l, opacity) {
+			  this.h = +h;
+			  this.c = +c;
+			  this.l = +l;
+			  this.opacity = +opacity;
+			}
+
+			define(Hcl, hcl, extend(Color, {
+			  brighter: function(k) {
+				return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
+			  },
+			  darker: function(k) {
+				return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
+			  },
+			  rgb: function() {
+				return labConvert(this).rgb();
+			  }
+			}));
+
+			var A = -0.14861;
+			var B = +1.78277;
+			var C = -0.29227;
+			var D = -0.90649;
+			var E = +1.97294;
+			var ED = E * D;
+			var EB = E * B;
+			var BC_DA = B * C - D * A;
+
+			function cubehelixConvert(o) {
+			  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+			  if (!(o instanceof Rgb)) o = rgbConvert(o);
+			  var r = o.r / 255,
+				  g = o.g / 255,
+				  b = o.b / 255,
+				  l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+				  bl = b - l,
+				  k = (E * (g - l) - C * bl) / D,
+				  s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+				  h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
+			  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+			}
+
+			function cubehelix(h, s, l, opacity) {
+			  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+			}
+
+			function Cubehelix(h, s, l, opacity) {
+			  this.h = +h;
+			  this.s = +s;
+			  this.l = +l;
+			  this.opacity = +opacity;
+			}
+
+			define(Cubehelix, cubehelix, extend(Color, {
+			  brighter: function(k) {
+				k = k == null ? brighter : Math.pow(brighter, k);
+				return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+			  },
+			  darker: function(k) {
+				k = k == null ? darker : Math.pow(darker, k);
+				return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+			  },
+			  rgb: function() {
+				var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
+					l = +this.l,
+					a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+					cosh = Math.cos(h),
+					sinh = Math.sin(h);
+				return new Rgb(
+				  255 * (l + a * (A * cosh + B * sinh)),
+				  255 * (l + a * (C * cosh + D * sinh)),
+				  255 * (l + a * (E * cosh)),
+				  this.opacity
+				);
+			  }
+			}));
+
+			function basis$1(t1, v0, v1, v2, v3) {
+			  var t2 = t1 * t1, t3 = t2 * t1;
+			  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+				  + (4 - 6 * t2 + 3 * t3) * v1
+				  + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+				  + t3 * v3) / 6;
+			}
+
+			var basis$2 = function(values) {
+			  var n = values.length - 1;
+			  return function(t) {
+				var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+					v1 = values[i],
+					v2 = values[i + 1],
+					v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+					v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+				return basis$1((t - i / n) * n, v0, v1, v2, v3);
+			  };
+			};
+
+			var basisClosed$1 = function(values) {
+			  var n = values.length;
+			  return function(t) {
+				var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+					v0 = values[(i + n - 1) % n],
+					v1 = values[i % n],
+					v2 = values[(i + 1) % n],
+					v3 = values[(i + 2) % n];
+				return basis$1((t - i / n) * n, v0, v1, v2, v3);
+			  };
+			};
+
+			var constant$3 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function linear$1(a, d) {
+			  return function(t) {
+				return a + t * d;
+			  };
+			}
+
+			function exponential$1(a, b, y) {
+			  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+				return Math.pow(a + t * b, y);
+			  };
+			}
+
+			function hue(a, b) {
+			  var d = b - a;
+			  return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
+			}
+
+			function gamma(y) {
+			  return (y = +y) === 1 ? nogamma : function(a, b) {
+				return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a);
+			  };
+			}
+
+			function nogamma(a, b) {
+			  var d = b - a;
+			  return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a);
+			}
+
+			var interpolateRgb = (function rgbGamma(y) {
+			  var color$$1 = gamma(y);
+
+			  function rgb$$1(start, end) {
+				var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
+					g = color$$1(start.g, end.g),
+					b = color$$1(start.b, end.b),
+					opacity = color$$1(start.opacity, end.opacity);
+				return function(t) {
+				  start.r = r(t);
+				  start.g = g(t);
+				  start.b = b(t);
+				  start.opacity = opacity(t);
+				  return start + "";
+				};
+			  }
+
+			  rgb$$1.gamma = rgbGamma;
+
+			  return rgb$$1;
+			})(1);
+
+			function rgbSpline(spline) {
+			  return function(colors) {
+				var n = colors.length,
+					r = new Array(n),
+					g = new Array(n),
+					b = new Array(n),
+					i, color$$1;
+				for (i = 0; i < n; ++i) {
+				  color$$1 = rgb(colors[i]);
+				  r[i] = color$$1.r || 0;
+				  g[i] = color$$1.g || 0;
+				  b[i] = color$$1.b || 0;
+				}
+				r = spline(r);
+				g = spline(g);
+				b = spline(b);
+				color$$1.opacity = 1;
+				return function(t) {
+				  color$$1.r = r(t);
+				  color$$1.g = g(t);
+				  color$$1.b = b(t);
+				  return color$$1 + "";
+				};
+			  };
+			}
+
+			var rgbBasis = rgbSpline(basis$2);
+			var rgbBasisClosed = rgbSpline(basisClosed$1);
+
+			var array$1 = function(a, b) {
+			  var nb = b ? b.length : 0,
+				  na = a ? Math.min(nb, a.length) : 0,
+				  x = new Array(nb),
+				  c = new Array(nb),
+				  i;
+
+			  for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
+			  for (; i < nb; ++i) c[i] = b[i];
+
+			  return function(t) {
+				for (i = 0; i < na; ++i) c[i] = x[i](t);
+				return c;
+			  };
+			};
+
+			var date = function(a, b) {
+			  var d = new Date;
+			  return a = +a, b -= a, function(t) {
+				return d.setTime(a + b * t), d;
+			  };
+			};
+
+			var interpolateNumber = function(a, b) {
+			  return a = +a, b -= a, function(t) {
+				return a + b * t;
+			  };
+			};
+
+			var object = function(a, b) {
+			  var i = {},
+				  c = {},
+				  k;
+
+			  if (a === null || typeof a !== "object") a = {};
+			  if (b === null || typeof b !== "object") b = {};
+
+			  for (k in b) {
+				if (k in a) {
+				  i[k] = interpolate(a[k], b[k]);
+				} else {
+				  c[k] = b[k];
+				}
+			  }
+
+			  return function(t) {
+				for (k in i) c[k] = i[k](t);
+				return c;
+			  };
+			};
+
+			var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
+			var reB = new RegExp(reA.source, "g");
+
+			function zero(b) {
+			  return function() {
+				return b;
+			  };
+			}
+
+			function one(b) {
+			  return function(t) {
+				return b(t) + "";
+			  };
+			}
+
+			var interpolateString = function(a, b) {
+			  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+				  am, // current match in a
+				  bm, // current match in b
+				  bs, // string preceding current number in b, if any
+				  i = -1, // index in s
+				  s = [], // string constants and placeholders
+				  q = []; // number interpolators
+
+			  // Coerce inputs to strings.
+			  a = a + "", b = b + "";
+
+			  // Interpolate pairs of numbers in a & b.
+			  while ((am = reA.exec(a))
+				  && (bm = reB.exec(b))) {
+				if ((bs = bm.index) > bi) { // a string precedes the next number in b
+				  bs = b.slice(bi, bs);
+				  if (s[i]) s[i] += bs; // coalesce with previous string
+				  else s[++i] = bs;
+				}
+				if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+				  if (s[i]) s[i] += bm; // coalesce with previous string
+				  else s[++i] = bm;
+				} else { // interpolate non-matching numbers
+				  s[++i] = null;
+				  q.push({i: i, x: interpolateNumber(am, bm)});
+				}
+				bi = reB.lastIndex;
+			  }
+
+			  // Add remains of b.
+			  if (bi < b.length) {
+				bs = b.slice(bi);
+				if (s[i]) s[i] += bs; // coalesce with previous string
+				else s[++i] = bs;
+			  }
+
+			  // Special optimization for only a single match.
+			  // Otherwise, interpolate each of the numbers and rejoin the string.
+			  return s.length < 2 ? (q[0]
+				  ? one(q[0].x)
+				  : zero(b))
+				  : (b = q.length, function(t) {
+					  for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+					  return s.join("");
+					});
+			};
+
+			var interpolate = function(a, b) {
+			  var t = typeof b, c;
+			  return b == null || t === "boolean" ? constant$3(b)
+				  : (t === "number" ? interpolateNumber
+				  : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
+				  : b instanceof color ? interpolateRgb
+				  : b instanceof Date ? date
+				  : Array.isArray(b) ? array$1
+				  : isNaN(b) ? object
+				  : interpolateNumber)(a, b);
+			};
+
+			var interpolateRound = function(a, b) {
+			  return a = +a, b -= a, function(t) {
+				return Math.round(a + b * t);
+			  };
+			};
+
+			var degrees = 180 / Math.PI;
+
+			var identity$2 = {
+			  translateX: 0,
+			  translateY: 0,
+			  rotate: 0,
+			  skewX: 0,
+			  scaleX: 1,
+			  scaleY: 1
+			};
+
+			var decompose = function(a, b, c, d, e, f) {
+			  var scaleX, scaleY, skewX;
+			  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+			  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+			  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+			  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+			  return {
+				translateX: e,
+				translateY: f,
+				rotate: Math.atan2(b, a) * degrees,
+				skewX: Math.atan(skewX) * degrees,
+				scaleX: scaleX,
+				scaleY: scaleY
+			  };
+			};
+
+			var cssNode;
+			var cssRoot;
+			var cssView;
+			var svgNode;
+
+			function parseCss(value) {
+			  if (value === "none") return identity$2;
+			  if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
+			  cssNode.style.transform = value;
+			  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
+			  cssRoot.removeChild(cssNode);
+			  value = value.slice(7, -1).split(",");
+			  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
+			}
+
+			function parseSvg(value) {
+			  if (value == null) return identity$2;
+			  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+			  svgNode.setAttribute("transform", value);
+			  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
+			  value = value.matrix;
+			  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+			}
+
+			function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+			  function pop(s) {
+				return s.length ? s.pop() + " " : "";
+			  }
+
+			  function translate(xa, ya, xb, yb, s, q) {
+				if (xa !== xb || ya !== yb) {
+				  var i = s.push("translate(", null, pxComma, null, pxParen);
+				  q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+				} else if (xb || yb) {
+				  s.push("translate(" + xb + pxComma + yb + pxParen);
+				}
+			  }
+
+			  function rotate(a, b, s, q) {
+				if (a !== b) {
+				  if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+				  q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)});
+				} else if (b) {
+				  s.push(pop(s) + "rotate(" + b + degParen);
+				}
+			  }
+
+			  function skewX(a, b, s, q) {
+				if (a !== b) {
+				  q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)});
+				} else if (b) {
+				  s.push(pop(s) + "skewX(" + b + degParen);
+				}
+			  }
+
+			  function scale(xa, ya, xb, yb, s, q) {
+				if (xa !== xb || ya !== yb) {
+				  var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+				  q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+				} else if (xb !== 1 || yb !== 1) {
+				  s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+				}
+			  }
+
+			  return function(a, b) {
+				var s = [], // string constants and placeholders
+					q = []; // number interpolators
+				a = parse(a), b = parse(b);
+				translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+				rotate(a.rotate, b.rotate, s, q);
+				skewX(a.skewX, b.skewX, s, q);
+				scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+				a = b = null; // gc
+				return function(t) {
+				  var i = -1, n = q.length, o;
+				  while (++i < n) s[(o = q[i]).i] = o.x(t);
+				  return s.join("");
+				};
+			  };
+			}
+
+			var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+			var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+			var rho = Math.SQRT2;
+			var rho2 = 2;
+			var rho4 = 4;
+			var epsilon2 = 1e-12;
+
+			function cosh(x) {
+			  return ((x = Math.exp(x)) + 1 / x) / 2;
+			}
+
+			function sinh(x) {
+			  return ((x = Math.exp(x)) - 1 / x) / 2;
+			}
+
+			function tanh(x) {
+			  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+			}
+
+			// p0 = [ux0, uy0, w0]
+			// p1 = [ux1, uy1, w1]
+			var interpolateZoom = function(p0, p1) {
+			  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+				  ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
+				  dx = ux1 - ux0,
+				  dy = uy1 - uy0,
+				  d2 = dx * dx + dy * dy,
+				  i,
+				  S;
+
+			  // Special case for u0 ≅ u1.
+			  if (d2 < epsilon2) {
+				S = Math.log(w1 / w0) / rho;
+				i = function(t) {
+				  return [
+					ux0 + t * dx,
+					uy0 + t * dy,
+					w0 * Math.exp(rho * t * S)
+				  ];
+				};
+			  }
+
+			  // General case.
+			  else {
+				var d1 = Math.sqrt(d2),
+					b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+					b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+					r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+					r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+				S = (r1 - r0) / rho;
+				i = function(t) {
+				  var s = t * S,
+					  coshr0 = cosh(r0),
+					  u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+				  return [
+					ux0 + u * dx,
+					uy0 + u * dy,
+					w0 * coshr0 / cosh(rho * s + r0)
+				  ];
+				};
+			  }
+
+			  i.duration = S * 1000;
+
+			  return i;
+			};
+
+			function hsl$1(hue$$1) {
+			  return function(start, end) {
+				var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
+					s = nogamma(start.s, end.s),
+					l = nogamma(start.l, end.l),
+					opacity = nogamma(start.opacity, end.opacity);
+				return function(t) {
+				  start.h = h(t);
+				  start.s = s(t);
+				  start.l = l(t);
+				  start.opacity = opacity(t);
+				  return start + "";
+				};
+			  }
+			}
+
+			var hsl$2 = hsl$1(hue);
+			var hslLong = hsl$1(nogamma);
+
+			function lab$1(start, end) {
+			  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
+				  a = nogamma(start.a, end.a),
+				  b = nogamma(start.b, end.b),
+				  opacity = nogamma(start.opacity, end.opacity);
+			  return function(t) {
+				start.l = l(t);
+				start.a = a(t);
+				start.b = b(t);
+				start.opacity = opacity(t);
+				return start + "";
+			  };
+			}
+
+			function hcl$1(hue$$1) {
+			  return function(start, end) {
+				var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
+					c = nogamma(start.c, end.c),
+					l = nogamma(start.l, end.l),
+					opacity = nogamma(start.opacity, end.opacity);
+				return function(t) {
+				  start.h = h(t);
+				  start.c = c(t);
+				  start.l = l(t);
+				  start.opacity = opacity(t);
+				  return start + "";
+				};
+			  }
+			}
+
+			var hcl$2 = hcl$1(hue);
+			var hclLong = hcl$1(nogamma);
+
+			function cubehelix$1(hue$$1) {
+			  return (function cubehelixGamma(y) {
+				y = +y;
+
+				function cubehelix$$1(start, end) {
+				  var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
+					  s = nogamma(start.s, end.s),
+					  l = nogamma(start.l, end.l),
+					  opacity = nogamma(start.opacity, end.opacity);
+				  return function(t) {
+					start.h = h(t);
+					start.s = s(t);
+					start.l = l(Math.pow(t, y));
+					start.opacity = opacity(t);
+					return start + "";
+				  };
+				}
+
+				cubehelix$$1.gamma = cubehelixGamma;
+
+				return cubehelix$$1;
+			  })(1);
+			}
+
+			var cubehelix$2 = cubehelix$1(hue);
+			var cubehelixLong = cubehelix$1(nogamma);
+
+			var quantize = function(interpolator, n) {
+			  var samples = new Array(n);
+			  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+			  return samples;
+			};
+
+			var noop$1 = {value: function() {}};
+
+			function dispatch() {
+			  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+				if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
+				_[t] = [];
+			  }
+			  return new Dispatch(_);
+			}
+
+			function Dispatch(_) {
+			  this._ = _;
+			}
+
+			function parseTypenames(typenames, types) {
+			  return typenames.trim().split(/^|\s+/).map(function(t) {
+				var name = "", i = t.indexOf(".");
+				if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+				if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+				return {type: t, name: name};
+			  });
+			}
+
+			Dispatch.prototype = dispatch.prototype = {
+			  constructor: Dispatch,
+			  on: function(typename, callback) {
+				var _ = this._,
+					T = parseTypenames(typename + "", _),
+					t,
+					i = -1,
+					n = T.length;
+
+				// If no callback was specified, return the callback of the given type and name.
+				if (arguments.length < 2) {
+				  while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+				  return;
+				}
+
+				// If a type was specified, set the callback for the given type and name.
+				// Otherwise, if a null callback was specified, remove callbacks of the given name.
+				if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+				while (++i < n) {
+				  if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);
+				  else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
+				}
+
+				return this;
+			  },
+			  copy: function() {
+				var copy = {}, _ = this._;
+				for (var t in _) copy[t] = _[t].slice();
+				return new Dispatch(copy);
+			  },
+			  call: function(type, that) {
+				if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+				if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+				for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+			  },
+			  apply: function(type, that, args) {
+				if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+				for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+			  }
+			};
+
+			function get(type, name) {
+			  for (var i = 0, n = type.length, c; i < n; ++i) {
+				if ((c = type[i]).name === name) {
+				  return c.value;
+				}
+			  }
+			}
+
+			function set$2(type, name, callback) {
+			  for (var i = 0, n = type.length; i < n; ++i) {
+				if (type[i].name === name) {
+				  type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
+				  break;
+				}
+			  }
+			  if (callback != null) type.push({name: name, value: callback});
+			  return type;
+			}
+
+			function objectConverter(columns) {
+			  return new Function("d", "return {" + columns.map(function(name, i) {
+				return JSON.stringify(name) + ": d[" + i + "]";
+			  }).join(",") + "}");
+			}
+
+			function customConverter(columns, f) {
+			  var object = objectConverter(columns);
+			  return function(row, i) {
+				return f(object(row), i, columns);
+			  };
+			}
+
+			// Compute unique columns in order of discovery.
+			function inferColumns(rows) {
+			  var columnSet = Object.create(null),
+				  columns = [];
+
+			  rows.forEach(function(row) {
+				for (var column in row) {
+				  if (!(column in columnSet)) {
+					columns.push(columnSet[column] = column);
+				  }
+				}
+			  });
+
+			  return columns;
+			}
+
+			var dsv = function(delimiter) {
+			  var reFormat = new RegExp("[\"" + delimiter + "\n]"),
+				  delimiterCode = delimiter.charCodeAt(0);
+
+			  function parse(text, f) {
+				var convert, columns, rows = parseRows(text, function(row, i) {
+				  if (convert) return convert(row, i - 1);
+				  columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
+				});
+				rows.columns = columns;
+				return rows;
+			  }
+
+			  function parseRows(text, f) {
+				var EOL = {}, // sentinel value for end-of-line
+					EOF = {}, // sentinel value for end-of-file
+					rows = [], // output rows
+					N = text.length,
+					I = 0, // current character index
+					n = 0, // the current line number
+					t, // the current token
+					eol; // is the current token followed by EOL?
+
+				function token() {
+				  if (I >= N) return EOF; // special case: end of file
+				  if (eol) return eol = false, EOL; // special case: end of line
+
+				  // special case: quotes
+				  var j = I, c;
+				  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;
+					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.slice(j + 1, i).replace(/""/g, "\"");
+				  }
+
+				  // common case: find next delimiter or newline
+				  while (I < N) {
+					var k = 1;
+					c = text.charCodeAt(I++);
+					if (c === 10) eol = true; // \n
+					else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
+					else if (c !== delimiterCode) continue;
+					return text.slice(j, I - k);
+				  }
+
+				  // special case: last token before EOF
+				  return text.slice(j);
+				}
+
+				while ((t = token()) !== EOF) {
+				  var a = [];
+				  while (t !== EOL && t !== EOF) {
+					a.push(t);
+					t = token();
+				  }
+				  if (f && (a = f(a, n++)) == null) continue;
+				  rows.push(a);
+				}
+
+				return rows;
+			  }
+
+			  function format(rows, columns) {
+				if (columns == null) columns = inferColumns(rows);
+				return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
+				  return columns.map(function(column) {
+					return formatValue(row[column]);
+				  }).join(delimiter);
+				})).join("\n");
+			  }
+
+			  function formatRows(rows) {
+				return rows.map(formatRow).join("\n");
+			  }
+
+			  function formatRow(row) {
+				return row.map(formatValue).join(delimiter);
+			  }
+
+			  function formatValue(text) {
+				return text == null ? ""
+					: reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+					: text;
+			  }
+
+			  return {
+				parse: parse,
+				parseRows: parseRows,
+				format: format,
+				formatRows: formatRows
+			  };
+			};
+
+			var csv = dsv(",");
+
+			var csvParse = csv.parse;
+			var csvParseRows = csv.parseRows;
+			var csvFormat = csv.format;
+			var csvFormatRows = csv.formatRows;
+
+			var tsv = dsv("\t");
+
+			var tsvParse = tsv.parse;
+			var tsvParseRows = tsv.parseRows;
+			var tsvFormat = tsv.format;
+			var tsvFormatRows = tsv.formatRows;
+
+			var request = function(url, callback) {
+			  var request,
+				  event = dispatch("beforesend", "progress", "load", "error"),
+				  mimeType,
+				  headers = map$1(),
+				  xhr = new XMLHttpRequest,
+				  user = null,
+				  password = null,
+				  response,
+				  responseType,
+				  timeout = 0;
+
+			  // If IE does not support CORS, use XDomainRequest.
+			  if (typeof XDomainRequest !== "undefined"
+				  && !("withCredentials" in xhr)
+				  && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
+
+			  "onload" in xhr
+				  ? xhr.onload = xhr.onerror = xhr.ontimeout = respond
+				  : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
+
+			  function respond(o) {
+				var status = xhr.status, result;
+				if (!status && hasResponse(xhr)
+					|| status >= 200 && status < 300
+					|| status === 304) {
+				  if (response) {
+					try {
+					  result = response.call(request, xhr);
+					} catch (e) {
+					  event.call("error", request, e);
+					  return;
+					}
+				  } else {
+					result = xhr;
+				  }
+				  event.call("load", request, result);
+				} else {
+				  event.call("error", request, o);
+				}
+			  }
+
+			  xhr.onprogress = function(e) {
+				event.call("progress", request, e);
+			  };
+
+			  request = {
+				header: function(name, value) {
+				  name = (name + "").toLowerCase();
+				  if (arguments.length < 2) return headers.get(name);
+				  if (value == null) headers.remove(name);
+				  else headers.set(name, value + "");
+				  return request;
+				},
+
+				// If mimeType is non-null and no Accept header is set, a default is used.
+				mimeType: function(value) {
+				  if (!arguments.length) return mimeType;
+				  mimeType = value == null ? null : value + "";
+				  return request;
+				},
+
+				// Specifies what type the response value should take;
+				// for instance, arraybuffer, blob, document, or text.
+				responseType: function(value) {
+				  if (!arguments.length) return responseType;
+				  responseType = value;
+				  return request;
+				},
+
+				timeout: function(value) {
+				  if (!arguments.length) return timeout;
+				  timeout = +value;
+				  return request;
+				},
+
+				user: function(value) {
+				  return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
+				},
+
+				password: function(value) {
+				  return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
+				},
+
+				// Specify how to convert the response content to a specific type;
+				// changes the callback value on "load" events.
+				response: function(value) {
+				  response = value;
+				  return request;
+				},
+
+				// Alias for send("GET", …).
+				get: function(data, callback) {
+				  return request.send("GET", data, callback);
+				},
+
+				// Alias for send("POST", …).
+				post: function(data, callback) {
+				  return request.send("POST", data, callback);
+				},
+
+				// If callback is non-null, it will be used for error and load events.
+				send: function(method, data, callback) {
+				  xhr.open(method, url, true, user, password);
+				  if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
+				  if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
+				  if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
+				  if (responseType != null) xhr.responseType = responseType;
+				  if (timeout > 0) xhr.timeout = timeout;
+				  if (callback == null && typeof data === "function") callback = data, data = null;
+				  if (callback != null && callback.length === 1) callback = fixCallback(callback);
+				  if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
+				  event.call("beforesend", request, xhr);
+				  xhr.send(data == null ? null : data);
+				  return request;
+				},
+
+				abort: function() {
+				  xhr.abort();
+				  return request;
+				},
+
+				on: function() {
+				  var value = event.on.apply(event, arguments);
+				  return value === event ? request : value;
+				}
+			  };
+
+			  if (callback != null) {
+				if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+				return request.get(callback);
+			  }
+
+			  return request;
+			};
+
+			function fixCallback(callback) {
+			  return function(error, xhr) {
+				callback(error == null ? xhr : null);
+			  };
+			}
+
+			function hasResponse(xhr) {
+			  var type = xhr.responseType;
+			  return type && type !== "text"
+				  ? xhr.response // null on error
+				  : xhr.responseText; // "" on error
+			}
+
+			var type = function(defaultMimeType, response) {
+			  return function(url, callback) {
+				var r = request(url).mimeType(defaultMimeType).response(response);
+				if (callback != null) {
+				  if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+				  return r.get(callback);
+				}
+				return r;
+			  };
+			};
+
+			var html = type("text/html", function(xhr) {
+			  return document.createRange().createContextualFragment(xhr.responseText);
+			});
+
+			var json = type("application/json", function(xhr) {
+			  return JSON.parse(xhr.responseText);
+			});
+
+			var text = type("text/plain", function(xhr) {
+			  return xhr.responseText;
+			});
+
+			var xml = type("application/xml", function(xhr) {
+			  var xml = xhr.responseXML;
+			  if (!xml) throw new Error("parse error");
+			  return xml;
+			});
+
+			var dsv$1 = function(defaultMimeType, parse) {
+			  return function(url, row, callback) {
+				if (arguments.length < 3) callback = row, row = null;
+				var r = request(url).mimeType(defaultMimeType);
+				r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
+				r.row(row);
+				return callback ? r.get(callback) : r;
+			  };
+			};
+
+			function responseOf(parse, row) {
+			  return function(request$$1) {
+				return parse(request$$1.responseText, row);
+			  };
+			}
+
+			var csv$1 = dsv$1("text/csv", csvParse);
+
+			var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
+
+			var frame = 0;
+			var timeout = 0;
+			var interval = 0;
+			var pokeDelay = 1000;
+			var taskHead;
+			var taskTail;
+			var clockLast = 0;
+			var clockNow = 0;
+			var clockSkew = 0;
+			var clock = typeof performance === "object" && performance.now ? performance : Date;
+			var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
+
+			function now() {
+			  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+			}
+
+			function clearNow() {
+			  clockNow = 0;
+			}
+
+			function Timer() {
+			  this._call =
+			  this._time =
+			  this._next = null;
+			}
+
+			Timer.prototype = timer.prototype = {
+			  constructor: Timer,
+			  restart: function(callback, delay, time) {
+				if (typeof callback !== "function") throw new TypeError("callback is not a function");
+				time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+				if (!this._next && taskTail !== this) {
+				  if (taskTail) taskTail._next = this;
+				  else taskHead = this;
+				  taskTail = this;
+				}
+				this._call = callback;
+				this._time = time;
+				sleep();
+			  },
+			  stop: function() {
+				if (this._call) {
+				  this._call = null;
+				  this._time = Infinity;
+				  sleep();
+				}
+			  }
+			};
+
+			function timer(callback, delay, time) {
+			  var t = new Timer;
+			  t.restart(callback, delay, time);
+			  return t;
+			}
+
+			function timerFlush() {
+			  now(); // Get the current time, if not already set.
+			  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+			  var t = taskHead, e;
+			  while (t) {
+				if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
+				t = t._next;
+			  }
+			  --frame;
+			}
+
+			function wake() {
+			  clockNow = (clockLast = clock.now()) + clockSkew;
+			  frame = timeout = 0;
+			  try {
+				timerFlush();
+			  } finally {
+				frame = 0;
+				nap();
+				clockNow = 0;
+			  }
+			}
+
+			function poke$1() {
+			  var now = clock.now(), delay = now - clockLast;
+			  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+			}
+
+			function nap() {
+			  var t0, t1 = taskHead, t2, time = Infinity;
+			  while (t1) {
+				if (t1._call) {
+				  if (time > t1._time) time = t1._time;
+				  t0 = t1, t1 = t1._next;
+				} else {
+				  t2 = t1._next, t1._next = null;
+				  t1 = t0 ? t0._next = t2 : taskHead = t2;
+				}
+			  }
+			  taskTail = t0;
+			  sleep(time);
+			}
+
+			function sleep(time) {
+			  if (frame) return; // Soonest alarm already set, or will be.
+			  if (timeout) timeout = clearTimeout(timeout);
+			  var delay = time - clockNow;
+			  if (delay > 24) {
+				if (time < Infinity) timeout = setTimeout(wake, delay);
+				if (interval) interval = clearInterval(interval);
+			  } else {
+				if (!interval) interval = setInterval(poke$1, pokeDelay);
+				frame = 1, setFrame(wake);
+			  }
+			}
+
+			var timeout$1 = function(callback, delay, time) {
+			  var t = new Timer;
+			  delay = delay == null ? 0 : +delay;
+			  t.restart(function(elapsed) {
+				t.stop();
+				callback(elapsed + delay);
+			  }, delay, time);
+			  return t;
+			};
+
+			var interval$1 = function(callback, delay, time) {
+			  var t = new Timer, total = delay;
+			  if (delay == null) return t.restart(callback, delay, time), t;
+			  delay = +delay, time = time == null ? now() : +time;
+			  t.restart(function tick(elapsed) {
+				elapsed += total;
+				t.restart(tick, total += delay, time);
+				callback(elapsed);
+			  }, delay, time);
+			  return t;
+			};
+
+			var t0$1 = new Date;
+			var t1$1 = new Date;
+
+			function newInterval(floori, offseti, count, field) {
+
+			  function interval(date) {
+				return floori(date = new Date(+date)), date;
+			  }
+
+			  interval.floor = interval;
+
+			  interval.ceil = function(date) {
+				return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+			  };
+
+			  interval.round = function(date) {
+				var d0 = interval(date),
+					d1 = interval.ceil(date);
+				return date - d0 < d1 - date ? d0 : d1;
+			  };
+
+			  interval.offset = function(date, step) {
+				return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+			  };
+
+			  interval.range = function(start, stop, step) {
+				var range = [];
+				start = interval.ceil(start);
+				step = step == null ? 1 : Math.floor(step);
+				if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+				do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
+				return range;
+			  };
+
+			  interval.filter = function(test) {
+				return newInterval(function(date) {
+				  if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+				}, function(date, step) {
+				  if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
+				});
+			  };
+
+			  if (count) {
+				interval.count = function(start, end) {
+				  t0$1.setTime(+start), t1$1.setTime(+end);
+				  floori(t0$1), floori(t1$1);
+				  return Math.floor(count(t0$1, t1$1));
+				};
+
+				interval.every = function(step) {
+				  step = Math.floor(step);
+				  return !isFinite(step) || !(step > 0) ? null
+					  : !(step > 1) ? interval
+					  : interval.filter(field
+						  ? function(d) { return field(d) % step === 0; }
+						  : function(d) { return interval.count(0, d) % step === 0; });
+				};
+			  }
+
+			  return interval;
+			}
+
+			var millisecond = newInterval(function() {
+			  // noop
+			}, function(date, step) {
+			  date.setTime(+date + step);
+			}, function(start, end) {
+			  return end - start;
+			});
+
+			// An optimized implementation for this simple case.
+			millisecond.every = function(k) {
+			  k = Math.floor(k);
+			  if (!isFinite(k) || !(k > 0)) return null;
+			  if (!(k > 1)) return millisecond;
+			  return newInterval(function(date) {
+				date.setTime(Math.floor(date / k) * k);
+			  }, function(date, step) {
+				date.setTime(+date + step * k);
+			  }, function(start, end) {
+				return (end - start) / k;
+			  });
+			};
+
+			var milliseconds = millisecond.range;
+
+			var durationSecond = 1e3;
+			var durationMinute = 6e4;
+			var durationHour = 36e5;
+			var durationDay = 864e5;
+			var durationWeek = 6048e5;
+
+			var second = newInterval(function(date) {
+			  date.setTime(Math.floor(date / durationSecond) * durationSecond);
+			}, function(date, step) {
+			  date.setTime(+date + step * durationSecond);
+			}, function(start, end) {
+			  return (end - start) / durationSecond;
+			}, function(date) {
+			  return date.getUTCSeconds();
+			});
+
+			var seconds = second.range;
+
+			var minute = newInterval(function(date) {
+			  date.setTime(Math.floor(date / durationMinute) * durationMinute);
+			}, function(date, step) {
+			  date.setTime(+date + step * durationMinute);
+			}, function(start, end) {
+			  return (end - start) / durationMinute;
+			}, function(date) {
+			  return date.getMinutes();
+			});
+
+			var minutes = minute.range;
+
+			var hour = newInterval(function(date) {
+			  var offset = date.getTimezoneOffset() * durationMinute % durationHour;
+			  if (offset < 0) offset += durationHour;
+			  date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
+			}, function(date, step) {
+			  date.setTime(+date + step * durationHour);
+			}, function(start, end) {
+			  return (end - start) / durationHour;
+			}, function(date) {
+			  return date.getHours();
+			});
+
+			var hours = hour.range;
+
+			var day = newInterval(function(date) {
+			  date.setHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setDate(date.getDate() + step);
+			}, function(start, end) {
+			  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
+			}, function(date) {
+			  return date.getDate() - 1;
+			});
+
+			var days = day.range;
+
+			function weekday(i) {
+			  return newInterval(function(date) {
+				date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+				date.setHours(0, 0, 0, 0);
+			  }, function(date, step) {
+				date.setDate(date.getDate() + step * 7);
+			  }, function(start, end) {
+				return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+			  });
+			}
+
+			var sunday = weekday(0);
+			var monday = weekday(1);
+			var tuesday = weekday(2);
+			var wednesday = weekday(3);
+			var thursday = weekday(4);
+			var friday = weekday(5);
+			var saturday = weekday(6);
+
+			var sundays = sunday.range;
+			var mondays = monday.range;
+			var tuesdays = tuesday.range;
+			var wednesdays = wednesday.range;
+			var thursdays = thursday.range;
+			var fridays = friday.range;
+			var saturdays = saturday.range;
+
+			var month = newInterval(function(date) {
+			  date.setDate(1);
+			  date.setHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setMonth(date.getMonth() + step);
+			}, function(start, end) {
+			  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+			}, function(date) {
+			  return date.getMonth();
+			});
+
+			var months = month.range;
+
+			var year = newInterval(function(date) {
+			  date.setMonth(0, 1);
+			  date.setHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setFullYear(date.getFullYear() + step);
+			}, function(start, end) {
+			  return end.getFullYear() - start.getFullYear();
+			}, function(date) {
+			  return date.getFullYear();
+			});
+
+			// An optimized implementation for this simple case.
+			year.every = function(k) {
+			  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+				date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+				date.setMonth(0, 1);
+				date.setHours(0, 0, 0, 0);
+			  }, function(date, step) {
+				date.setFullYear(date.getFullYear() + step * k);
+			  });
+			};
+
+			var years = year.range;
+
+			var utcMinute = newInterval(function(date) {
+			  date.setUTCSeconds(0, 0);
+			}, function(date, step) {
+			  date.setTime(+date + step * durationMinute);
+			}, function(start, end) {
+			  return (end - start) / durationMinute;
+			}, function(date) {
+			  return date.getUTCMinutes();
+			});
+
+			var utcMinutes = utcMinute.range;
+
+			var utcHour = newInterval(function(date) {
+			  date.setUTCMinutes(0, 0, 0);
+			}, function(date, step) {
+			  date.setTime(+date + step * durationHour);
+			}, function(start, end) {
+			  return (end - start) / durationHour;
+			}, function(date) {
+			  return date.getUTCHours();
+			});
+
+			var utcHours = utcHour.range;
+
+			var utcDay = newInterval(function(date) {
+			  date.setUTCHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setUTCDate(date.getUTCDate() + step);
+			}, function(start, end) {
+			  return (end - start) / durationDay;
+			}, function(date) {
+			  return date.getUTCDate() - 1;
+			});
+
+			var utcDays = utcDay.range;
+
+			function utcWeekday(i) {
+			  return newInterval(function(date) {
+				date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+				date.setUTCHours(0, 0, 0, 0);
+			  }, function(date, step) {
+				date.setUTCDate(date.getUTCDate() + step * 7);
+			  }, function(start, end) {
+				return (end - start) / durationWeek;
+			  });
+			}
+
+			var utcSunday = utcWeekday(0);
+			var utcMonday = utcWeekday(1);
+			var utcTuesday = utcWeekday(2);
+			var utcWednesday = utcWeekday(3);
+			var utcThursday = utcWeekday(4);
+			var utcFriday = utcWeekday(5);
+			var utcSaturday = utcWeekday(6);
+
+			var utcSundays = utcSunday.range;
+			var utcMondays = utcMonday.range;
+			var utcTuesdays = utcTuesday.range;
+			var utcWednesdays = utcWednesday.range;
+			var utcThursdays = utcThursday.range;
+			var utcFridays = utcFriday.range;
+			var utcSaturdays = utcSaturday.range;
+
+			var utcMonth = newInterval(function(date) {
+			  date.setUTCDate(1);
+			  date.setUTCHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setUTCMonth(date.getUTCMonth() + step);
+			}, function(start, end) {
+			  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+			}, function(date) {
+			  return date.getUTCMonth();
+			});
+
+			var utcMonths = utcMonth.range;
+
+			var utcYear = newInterval(function(date) {
+			  date.setUTCMonth(0, 1);
+			  date.setUTCHours(0, 0, 0, 0);
+			}, function(date, step) {
+			  date.setUTCFullYear(date.getUTCFullYear() + step);
+			}, function(start, end) {
+			  return end.getUTCFullYear() - start.getUTCFullYear();
+			}, function(date) {
+			  return date.getUTCFullYear();
+			});
+
+			// An optimized implementation for this simple case.
+			utcYear.every = function(k) {
+			  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+				date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+				date.setUTCMonth(0, 1);
+				date.setUTCHours(0, 0, 0, 0);
+			  }, function(date, step) {
+				date.setUTCFullYear(date.getUTCFullYear() + step * k);
+			  });
+			};
+
+			var utcYears = utcYear.range;
+
+			// Computes the decimal coefficient and exponent of the specified number x with
+			// significant digits p, where x is positive and p is in [1, 21] or undefined.
+			// For example, formatDecimal(1.23) returns ["123", 0].
+			var formatDecimal = function(x, p) {
+			  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+			  var i, coefficient = x.slice(0, i);
+
+			  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+			  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+			  return [
+				coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+				+x.slice(i + 1)
+			  ];
+			};
+
+			var exponent$1 = function(x) {
+			  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
+			};
+
+			var formatGroup = function(grouping, thousands) {
+			  return function(value, width) {
+				var i = value.length,
+					t = [],
+					j = 0,
+					g = grouping[0],
+					length = 0;
+
+				while (i > 0 && g > 0) {
+				  if (length + g + 1 > width) g = Math.max(1, width - length);
+				  t.push(value.substring(i -= g, i + g));
+				  if ((length += g + 1) > width) break;
+				  g = grouping[j = (j + 1) % grouping.length];
+				}
+
+				return t.reverse().join(thousands);
+			  };
+			};
+
+			var formatDefault = function(x, p) {
+			  x = x.toPrecision(p);
+
+			  out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
+				switch (x[i]) {
+				  case ".": i0 = i1 = i; break;
+				  case "0": if (i0 === 0) i0 = i; i1 = i; break;
+				  case "e": break out;
+				  default: if (i0 > 0) i0 = 0; break;
+				}
+			  }
+
+			  return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
+			};
+
+			var prefixExponent;
+
+			var formatPrefixAuto = function(x, p) {
+			  var d = formatDecimal(x, p);
+			  if (!d) return x + "";
+			  var coefficient = d[0],
+				  exponent = d[1],
+				  i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+				  n = coefficient.length;
+			  return i === n ? coefficient
+				  : i > n ? coefficient + new Array(i - n + 1).join("0")
+				  : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+				  : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+			};
+
+			var formatRounded = function(x, p) {
+			  var d = formatDecimal(x, p);
+			  if (!d) return x + "";
+			  var coefficient = d[0],
+				  exponent = d[1];
+			  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
+				  : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+				  : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+			};
+
+			var formatTypes = {
+			  "": formatDefault,
+			  "%": function(x, p) { return (x * 100).toFixed(p); },
+			  "b": function(x) { return Math.round(x).toString(2); },
+			  "c": function(x) { return x + ""; },
+			  "d": function(x) { return Math.round(x).toString(10); },
+			  "e": function(x, p) { return x.toExponential(p); },
+			  "f": function(x, p) { return x.toFixed(p); },
+			  "g": function(x, p) { return x.toPrecision(p); },
+			  "o": function(x) { return Math.round(x).toString(8); },
+			  "p": function(x, p) { return formatRounded(x * 100, p); },
+			  "r": formatRounded,
+			  "s": formatPrefixAuto,
+			  "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
+			  "x": function(x) { return Math.round(x).toString(16); }
+			};
+
+			// [[fill]align][sign][symbol][0][width][,][.precision][type]
+			var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
+
+			var formatSpecifier = function(specifier) {
+			  return new FormatSpecifier(specifier);
+			};
+
+			function FormatSpecifier(specifier) {
+			  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+
+			  var match,
+				  fill = match[1] || " ",
+				  align = match[2] || ">",
+				  sign = match[3] || "-",
+				  symbol = match[4] || "",
+				  zero = !!match[5],
+				  width = match[6] && +match[6],
+				  comma = !!match[7],
+				  precision = match[8] && +match[8].slice(1),
+				  type = match[9] || "";
+
+			  // The "n" type is an alias for ",g".
+			  if (type === "n") comma = true, type = "g";
+
+			  // Map invalid types to the default format.
+			  else if (!formatTypes[type]) type = "";
+
+			  // If zero fill is specified, padding goes after sign and before digits.
+			  if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
+
+			  this.fill = fill;
+			  this.align = align;
+			  this.sign = sign;
+			  this.symbol = symbol;
+			  this.zero = zero;
+			  this.width = width;
+			  this.comma = comma;
+			  this.precision = precision;
+			  this.type = type;
+			}
+
+			FormatSpecifier.prototype.toString = function() {
+			  return this.fill
+				  + this.align
+				  + this.sign
+				  + this.symbol
+				  + (this.zero ? "0" : "")
+				  + (this.width == null ? "" : Math.max(1, this.width | 0))
+				  + (this.comma ? "," : "")
+				  + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
+				  + this.type;
+			};
+
+			var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
+
+			function identity$3(x) {
+			  return x;
+			}
+
+			var formatLocale = function(locale) {
+			  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
+				  currency = locale.currency,
+				  decimal = locale.decimal;
+
+			  function newFormat(specifier) {
+				specifier = formatSpecifier(specifier);
+
+				var fill = specifier.fill,
+					align = specifier.align,
+					sign = specifier.sign,
+					symbol = specifier.symbol,
+					zero = specifier.zero,
+					width = specifier.width,
+					comma = specifier.comma,
+					precision = specifier.precision,
+					type = specifier.type;
+
+				// Compute the prefix and suffix.
+				// For SI-prefix, the suffix is lazily computed.
+				var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+					suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
+
+				// What format function should we use?
+				// Is this an integer type?
+				// Can this type generate exponential notation?
+				var formatType = formatTypes[type],
+					maybeSuffix = !type || /[defgprs%]/.test(type);
+
+				// Set the default precision if not specified,
+				// or clamp the specified precision to the supported range.
+				// For significant precision, it must be in [1, 21].
+				// For fixed precision, it must be in [0, 20].
+				precision = precision == null ? (type ? 6 : 12)
+					: /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
+					: Math.max(0, Math.min(20, precision));
+
+				function format(value) {
+				  var valuePrefix = prefix,
+					  valueSuffix = suffix,
+					  i, n, c;
+
+				  if (type === "c") {
+					valueSuffix = formatType(value) + valueSuffix;
+					value = "";
+				  } else {
+					value = +value;
+
+					// Convert negative to positive, and compute the prefix.
+					// Note that -0 is not less than 0, but 1 / -0 is!
+					var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
+
+					// Perform the initial formatting.
+					value = formatType(value, precision);
+
+					// If the original value was negative, it may be rounded to zero during
+					// formatting; treat this as (positive) zero.
+					if (valueNegative) {
+					  i = -1, n = value.length;
+					  valueNegative = false;
+					  while (++i < n) {
+						if (c = value.charCodeAt(i), (48 < c && c < 58)
+							|| (type === "x" && 96 < c && c < 103)
+							|| (type === "X" && 64 < c && c < 71)) {
+						  valueNegative = true;
+						  break;
+						}
+					  }
+					}
+
+					// Compute the prefix and suffix.
+					valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+					valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
+
+					// Break the formatted value into the integer “value” part that can be
+					// grouped, and fractional or exponential “suffix” part that is not.
+					if (maybeSuffix) {
+					  i = -1, n = value.length;
+					  while (++i < n) {
+						if (c = value.charCodeAt(i), 48 > c || c > 57) {
+						  valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+						  value = value.slice(0, i);
+						  break;
+						}
+					  }
+					}
+				  }
+
+				  // If the fill character is not "0", grouping is applied before padding.
+				  if (comma && !zero) value = group(value, Infinity);
+
+				  // Compute the padding.
+				  var length = valuePrefix.length + value.length + valueSuffix.length,
+					  padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+				  // If the fill character is "0", grouping is applied after padding.
+				  if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+				  // Reconstruct the final output based on the desired alignment.
+				  switch (align) {
+					case "<": return valuePrefix + value + valueSuffix + padding;
+					case "=": return valuePrefix + padding + value + valueSuffix;
+					case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
+				  }
+				  return padding + valuePrefix + value + valueSuffix;
+				}
+
+				format.toString = function() {
+				  return specifier + "";
+				};
+
+				return format;
+			  }
+
+			  function formatPrefix(specifier, value) {
+				var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
+					e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
+					k = Math.pow(10, -e),
+					prefix = prefixes[8 + e / 3];
+				return function(value) {
+				  return f(k * value) + prefix;
+				};
+			  }
+
+			  return {
+				format: newFormat,
+				formatPrefix: formatPrefix
+			  };
+			};
+
+			var locale$1;
+
+
+
+			defaultLocale({
+			  decimal: ".",
+			  thousands: ",",
+			  grouping: [3],
+			  currency: ["$", ""]
+			});
+
+			function defaultLocale(definition) {
+			  locale$1 = formatLocale(definition);
+			  exports.format = locale$1.format;
+			  exports.formatPrefix = locale$1.formatPrefix;
+			  return locale$1;
+			}
+
+			var precisionFixed = function(step) {
+			  return Math.max(0, -exponent$1(Math.abs(step)));
+			};
+
+			var precisionPrefix = function(step, value) {
+			  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
+			};
+
+			var precisionRound = function(step, max) {
+			  step = Math.abs(step), max = Math.abs(max) - step;
+			  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
+			};
+
+			function localDate(d) {
+			  if (0 <= d.y && d.y < 100) {
+				var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+				date.setFullYear(d.y);
+				return date;
+			  }
+			  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+			}
+
+			function utcDate(d) {
+			  if (0 <= d.y && d.y < 100) {
+				var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+				date.setUTCFullYear(d.y);
+				return date;
+			  }
+			  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+			}
+
+			function newYear(y) {
+			  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
+			}
+
+			function formatLocale$1(locale) {
+			  var locale_dateTime = locale.dateTime,
+				  locale_date = locale.date,
+				  locale_time = locale.time,
+				  locale_periods = locale.periods,
+				  locale_weekdays = locale.days,
+				  locale_shortWeekdays = locale.shortDays,
+				  locale_months = locale.months,
+				  locale_shortMonths = locale.shortMonths;
+
+			  var periodRe = formatRe(locale_periods),
+				  periodLookup = formatLookup(locale_periods),
+				  weekdayRe = formatRe(locale_weekdays),
+				  weekdayLookup = formatLookup(locale_weekdays),
+				  shortWeekdayRe = formatRe(locale_shortWeekdays),
+				  shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+				  monthRe = formatRe(locale_months),
+				  monthLookup = formatLookup(locale_months),
+				  shortMonthRe = formatRe(locale_shortMonths),
+				  shortMonthLookup = formatLookup(locale_shortMonths);
+
+			  var formats = {
+				"a": formatShortWeekday,
+				"A": formatWeekday,
+				"b": formatShortMonth,
+				"B": formatMonth,
+				"c": null,
+				"d": formatDayOfMonth,
+				"e": formatDayOfMonth,
+				"H": formatHour24,
+				"I": formatHour12,
+				"j": formatDayOfYear,
+				"L": formatMilliseconds,
+				"m": formatMonthNumber,
+				"M": formatMinutes,
+				"p": formatPeriod,
+				"S": formatSeconds,
+				"U": formatWeekNumberSunday,
+				"w": formatWeekdayNumber,
+				"W": formatWeekNumberMonday,
+				"x": null,
+				"X": null,
+				"y": formatYear,
+				"Y": formatFullYear,
+				"Z": formatZone,
+				"%": formatLiteralPercent
+			  };
+
+			  var utcFormats = {
+				"a": formatUTCShortWeekday,
+				"A": formatUTCWeekday,
+				"b": formatUTCShortMonth,
+				"B": formatUTCMonth,
+				"c": null,
+				"d": formatUTCDayOfMonth,
+				"e": formatUTCDayOfMonth,
+				"H": formatUTCHour24,
+				"I": formatUTCHour12,
+				"j": formatUTCDayOfYear,
+				"L": formatUTCMilliseconds,
+				"m": formatUTCMonthNumber,
+				"M": formatUTCMinutes,
+				"p": formatUTCPeriod,
+				"S": formatUTCSeconds,
+				"U": formatUTCWeekNumberSunday,
+				"w": formatUTCWeekdayNumber,
+				"W": formatUTCWeekNumberMonday,
+				"x": null,
+				"X": null,
+				"y": formatUTCYear,
+				"Y": formatUTCFullYear,
+				"Z": formatUTCZone,
+				"%": formatLiteralPercent
+			  };
+
+			  var parses = {
+				"a": parseShortWeekday,
+				"A": parseWeekday,
+				"b": parseShortMonth,
+				"B": parseMonth,
+				"c": parseLocaleDateTime,
+				"d": parseDayOfMonth,
+				"e": parseDayOfMonth,
+				"H": parseHour24,
+				"I": parseHour24,
+				"j": parseDayOfYear,
+				"L": parseMilliseconds,
+				"m": parseMonthNumber,
+				"M": parseMinutes,
+				"p": parsePeriod,
+				"S": parseSeconds,
+				"U": parseWeekNumberSunday,
+				"w": parseWeekdayNumber,
+				"W": parseWeekNumberMonday,
+				"x": parseLocaleDate,
+				"X": parseLocaleTime,
+				"y": parseYear,
+				"Y": parseFullYear,
+				"Z": parseZone,
+				"%": parseLiteralPercent
+			  };
+
+			  // These recursive directive definitions must be deferred.
+			  formats.x = newFormat(locale_date, formats);
+			  formats.X = newFormat(locale_time, formats);
+			  formats.c = newFormat(locale_dateTime, formats);
+			  utcFormats.x = newFormat(locale_date, utcFormats);
+			  utcFormats.X = newFormat(locale_time, utcFormats);
+			  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+			  function newFormat(specifier, formats) {
+				return function(date) {
+				  var string = [],
+					  i = -1,
+					  j = 0,
+					  n = specifier.length,
+					  c,
+					  pad,
+					  format;
+
+				  if (!(date instanceof Date)) date = new Date(+date);
+
+				  while (++i < n) {
+					if (specifier.charCodeAt(i) === 37) {
+					  string.push(specifier.slice(j, i));
+					  if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
+					  else pad = c === "e" ? " " : "0";
+					  if (format = formats[c]) c = format(date, pad);
+					  string.push(c);
+					  j = i + 1;
+					}
+				  }
+
+				  string.push(specifier.slice(j, i));
+				  return string.join("");
+				};
+			  }
+
+			  function newParse(specifier, newDate) {
+				return function(string) {
+				  var d = newYear(1900),
+					  i = parseSpecifier(d, specifier, string += "", 0);
+				  if (i != string.length) return null;
+
+				  // The am-pm flag is 0 for AM, and 1 for PM.
+				  if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+				  // Convert day-of-week and week-of-year to day-of-year.
+				  if ("W" in d || "U" in d) {
+					if (!("w" in d)) d.w = "W" in d ? 1 : 0;
+					var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
+					d.m = 0;
+					d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
+				  }
+
+				  // If a time zone is specified, all fields are interpreted as UTC and then
+				  // offset according to the specified time zone.
+				  if ("Z" in d) {
+					d.H += d.Z / 100 | 0;
+					d.M += d.Z % 100;
+					return utcDate(d);
+				  }
+
+				  // Otherwise, all fields are in local time.
+				  return newDate(d);
+				};
+			  }
+
+			  function parseSpecifier(d, specifier, string, j) {
+				var i = 0,
+					n = specifier.length,
+					m = string.length,
+					c,
+					parse;
+
+				while (i < n) {
+				  if (j >= m) return -1;
+				  c = specifier.charCodeAt(i++);
+				  if (c === 37) {
+					c = specifier.charAt(i++);
+					parse = parses[c in pads ? specifier.charAt(i++) : c];
+					if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
+				  } else if (c != string.charCodeAt(j++)) {
+					return -1;
+				  }
+				}
+
+				return j;
+			  }
+
+			  function parsePeriod(d, string, i) {
+				var n = periodRe.exec(string.slice(i));
+				return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+			  }
+
+			  function parseShortWeekday(d, string, i) {
+				var n = shortWeekdayRe.exec(string.slice(i));
+				return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+			  }
+
+			  function parseWeekday(d, string, i) {
+				var n = weekdayRe.exec(string.slice(i));
+				return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+			  }
+
+			  function parseShortMonth(d, string, i) {
+				var n = shortMonthRe.exec(string.slice(i));
+				return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+			  }
+
+			  function parseMonth(d, string, i) {
+				var n = monthRe.exec(string.slice(i));
+				return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+			  }
+
+			  function parseLocaleDateTime(d, string, i) {
+				return parseSpecifier(d, locale_dateTime, string, i);
+			  }
+
+			  function parseLocaleDate(d, string, i) {
+				return parseSpecifier(d, locale_date, string, i);
+			  }
+
+			  function parseLocaleTime(d, string, i) {
+				return parseSpecifier(d, locale_time, string, i);
+			  }
+
+			  function formatShortWeekday(d) {
+				return locale_shortWeekdays[d.getDay()];
+			  }
+
+			  function formatWeekday(d) {
+				return locale_weekdays[d.getDay()];
+			  }
+
+			  function formatShortMonth(d) {
+				return locale_shortMonths[d.getMonth()];
+			  }
+
+			  function formatMonth(d) {
+				return locale_months[d.getMonth()];
+			  }
+
+			  function formatPeriod(d) {
+				return locale_periods[+(d.getHours() >= 12)];
+			  }
+
+			  function formatUTCShortWeekday(d) {
+				return locale_shortWeekdays[d.getUTCDay()];
+			  }
+
+			  function formatUTCWeekday(d) {
+				return locale_weekdays[d.getUTCDay()];
+			  }
+
+			  function formatUTCShortMonth(d) {
+				return locale_shortMonths[d.getUTCMonth()];
+			  }
+
+			  function formatUTCMonth(d) {
+				return locale_months[d.getUTCMonth()];
+			  }
+
+			  function formatUTCPeriod(d) {
+				return locale_periods[+(d.getUTCHours() >= 12)];
+			  }
+
+			  return {
+				format: function(specifier) {
+				  var f = newFormat(specifier += "", formats);
+				  f.toString = function() { return specifier; };
+				  return f;
+				},
+				parse: function(specifier) {
+				  var p = newParse(specifier += "", localDate);
+				  p.toString = function() { return specifier; };
+				  return p;
+				},
+				utcFormat: function(specifier) {
+				  var f = newFormat(specifier += "", utcFormats);
+				  f.toString = function() { return specifier; };
+				  return f;
+				},
+				utcParse: function(specifier) {
+				  var p = newParse(specifier, utcDate);
+				  p.toString = function() { return specifier; };
+				  return p;
+				}
+			  };
+			}
+
+			var pads = {"-": "", "_": " ", "0": "0"};
+			var numberRe = /^\s*\d+/;
+			var percentRe = /^%/;
+			var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+			function pad(value, fill, width) {
+			  var sign = value < 0 ? "-" : "",
+				  string = (sign ? -value : value) + "",
+				  length = string.length;
+			  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+			}
+
+			function requote(s) {
+			  return s.replace(requoteRe, "\\$&");
+			}
+
+			function formatRe(names) {
+			  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+			}
+
+			function formatLookup(names) {
+			  var map = {}, i = -1, n = names.length;
+			  while (++i < n) map[names[i].toLowerCase()] = i;
+			  return map;
+			}
+
+			function parseWeekdayNumber(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 1));
+			  return n ? (d.w = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseWeekNumberSunday(d, string, i) {
+			  var n = numberRe.exec(string.slice(i));
+			  return n ? (d.U = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseWeekNumberMonday(d, string, i) {
+			  var n = numberRe.exec(string.slice(i));
+			  return n ? (d.W = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseFullYear(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 4));
+			  return n ? (d.y = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseYear(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+			}
+
+			function parseZone(d, string, i) {
+			  var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
+			  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+			}
+
+			function parseMonthNumber(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+			}
+
+			function parseDayOfMonth(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.d = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseDayOfYear(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 3));
+			  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseHour24(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.H = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseMinutes(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.M = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseSeconds(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 2));
+			  return n ? (d.S = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseMilliseconds(d, string, i) {
+			  var n = numberRe.exec(string.slice(i, i + 3));
+			  return n ? (d.L = +n[0], i + n[0].length) : -1;
+			}
+
+			function parseLiteralPercent(d, string, i) {
+			  var n = percentRe.exec(string.slice(i, i + 1));
+			  return n ? i + n[0].length : -1;
+			}
+
+			function formatDayOfMonth(d, p) {
+			  return pad(d.getDate(), p, 2);
+			}
+
+			function formatHour24(d, p) {
+			  return pad(d.getHours(), p, 2);
+			}
+
+			function formatHour12(d, p) {
+			  return pad(d.getHours() % 12 || 12, p, 2);
+			}
+
+			function formatDayOfYear(d, p) {
+			  return pad(1 + day.count(year(d), d), p, 3);
+			}
+
+			function formatMilliseconds(d, p) {
+			  return pad(d.getMilliseconds(), p, 3);
+			}
+
+			function formatMonthNumber(d, p) {
+			  return pad(d.getMonth() + 1, p, 2);
+			}
+
+			function formatMinutes(d, p) {
+			  return pad(d.getMinutes(), p, 2);
+			}
+
+			function formatSeconds(d, p) {
+			  return pad(d.getSeconds(), p, 2);
+			}
+
+			function formatWeekNumberSunday(d, p) {
+			  return pad(sunday.count(year(d), d), p, 2);
+			}
+
+			function formatWeekdayNumber(d) {
+			  return d.getDay();
+			}
+
+			function formatWeekNumberMonday(d, p) {
+			  return pad(monday.count(year(d), d), p, 2);
+			}
+
+			function formatYear(d, p) {
+			  return pad(d.getFullYear() % 100, p, 2);
+			}
+
+			function formatFullYear(d, p) {
+			  return pad(d.getFullYear() % 10000, p, 4);
+			}
+
+			function formatZone(d) {
+			  var z = d.getTimezoneOffset();
+			  return (z > 0 ? "-" : (z *= -1, "+"))
+				  + pad(z / 60 | 0, "0", 2)
+				  + pad(z % 60, "0", 2);
+			}
+
+			function formatUTCDayOfMonth(d, p) {
+			  return pad(d.getUTCDate(), p, 2);
+			}
+
+			function formatUTCHour24(d, p) {
+			  return pad(d.getUTCHours(), p, 2);
+			}
+
+			function formatUTCHour12(d, p) {
+			  return pad(d.getUTCHours() % 12 || 12, p, 2);
+			}
+
+			function formatUTCDayOfYear(d, p) {
+			  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
+			}
+
+			function formatUTCMilliseconds(d, p) {
+			  return pad(d.getUTCMilliseconds(), p, 3);
+			}
+
+			function formatUTCMonthNumber(d, p) {
+			  return pad(d.getUTCMonth() + 1, p, 2);
+			}
+
+			function formatUTCMinutes(d, p) {
+			  return pad(d.getUTCMinutes(), p, 2);
+			}
+
+			function formatUTCSeconds(d, p) {
+			  return pad(d.getUTCSeconds(), p, 2);
+			}
+
+			function formatUTCWeekNumberSunday(d, p) {
+			  return pad(utcSunday.count(utcYear(d), d), p, 2);
+			}
+
+			function formatUTCWeekdayNumber(d) {
+			  return d.getUTCDay();
+			}
+
+			function formatUTCWeekNumberMonday(d, p) {
+			  return pad(utcMonday.count(utcYear(d), d), p, 2);
+			}
+
+			function formatUTCYear(d, p) {
+			  return pad(d.getUTCFullYear() % 100, p, 2);
+			}
+
+			function formatUTCFullYear(d, p) {
+			  return pad(d.getUTCFullYear() % 10000, p, 4);
+			}
+
+			function formatUTCZone() {
+			  return "+0000";
+			}
+
+			function formatLiteralPercent() {
+			  return "%";
+			}
+
+			var locale$2;
+
+
+
+
+
+			defaultLocale$1({
+			  dateTime: "%x, %X",
+			  date: "%-m/%-d/%Y",
+			  time: "%-I:%M:%S %p",
+			  periods: ["AM", "PM"],
+			  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+			  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+			  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+			  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+			});
+
+			function defaultLocale$1(definition) {
+			  locale$2 = formatLocale$1(definition);
+			  exports.timeFormat = locale$2.format;
+			  exports.timeParse = locale$2.parse;
+			  exports.utcFormat = locale$2.utcFormat;
+			  exports.utcParse = locale$2.utcParse;
+			  return locale$2;
+			}
+
+			var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+			function formatIsoNative(date) {
+			  return date.toISOString();
+			}
+
+			var formatIso = Date.prototype.toISOString
+				? formatIsoNative
+				: exports.utcFormat(isoSpecifier);
+
+			function parseIsoNative(string) {
+			  var date = new Date(string);
+			  return isNaN(date) ? null : date;
+			}
+
+			var parseIso = +new Date("2000-01-01T00:00:00.000Z")
+				? parseIsoNative
+				: exports.utcParse(isoSpecifier);
+
+			var array$2 = Array.prototype;
+
+			var map$3 = array$2.map;
+			var slice$3 = array$2.slice;
+
+			var implicit = {name: "implicit"};
+
+			function ordinal(range) {
+			  var index = map$1(),
+				  domain = [],
+				  unknown = implicit;
+
+			  range = range == null ? [] : slice$3.call(range);
+
+			  function scale(d) {
+				var key = d + "", i = index.get(key);
+				if (!i) {
+				  if (unknown !== implicit) return unknown;
+				  index.set(key, i = domain.push(d));
+				}
+				return range[(i - 1) % range.length];
+			  }
+
+			  scale.domain = function(_) {
+				if (!arguments.length) return domain.slice();
+				domain = [], index = map$1();
+				var i = -1, n = _.length, d, key;
+				while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
+				return scale;
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (range = slice$3.call(_), scale) : range.slice();
+			  };
+
+			  scale.unknown = function(_) {
+				return arguments.length ? (unknown = _, scale) : unknown;
+			  };
+
+			  scale.copy = function() {
+				return ordinal()
+					.domain(domain)
+					.range(range)
+					.unknown(unknown);
+			  };
+
+			  return scale;
+			}
+
+			function band() {
+			  var scale = ordinal().unknown(undefined),
+				  domain = scale.domain,
+				  ordinalRange = scale.range,
+				  range$$1 = [0, 1],
+				  step,
+				  bandwidth,
+				  round = false,
+				  paddingInner = 0,
+				  paddingOuter = 0,
+				  align = 0.5;
+
+			  delete scale.unknown;
+
+			  function rescale() {
+				var n = domain().length,
+					reverse = range$$1[1] < range$$1[0],
+					start = range$$1[reverse - 0],
+					stop = range$$1[1 - reverse];
+				step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+				if (round) step = Math.floor(step);
+				start += (stop - start - step * (n - paddingInner)) * align;
+				bandwidth = step * (1 - paddingInner);
+				if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+				var values = range(n).map(function(i) { return start + step * i; });
+				return ordinalRange(reverse ? values.reverse() : values);
+			  }
+
+			  scale.domain = function(_) {
+				return arguments.length ? (domain(_), rescale()) : domain();
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
+			  };
+
+			  scale.rangeRound = function(_) {
+				return range$$1 = [+_[0], +_[1]], round = true, rescale();
+			  };
+
+			  scale.bandwidth = function() {
+				return bandwidth;
+			  };
+
+			  scale.step = function() {
+				return step;
+			  };
+
+			  scale.round = function(_) {
+				return arguments.length ? (round = !!_, rescale()) : round;
+			  };
+
+			  scale.padding = function(_) {
+				return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+			  };
+
+			  scale.paddingInner = function(_) {
+				return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+			  };
+
+			  scale.paddingOuter = function(_) {
+				return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
+			  };
+
+			  scale.align = function(_) {
+				return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+			  };
+
+			  scale.copy = function() {
+				return band()
+					.domain(domain())
+					.range(range$$1)
+					.round(round)
+					.paddingInner(paddingInner)
+					.paddingOuter(paddingOuter)
+					.align(align);
+			  };
+
+			  return rescale();
+			}
+
+			function pointish(scale) {
+			  var copy = scale.copy;
+
+			  scale.padding = scale.paddingOuter;
+			  delete scale.paddingInner;
+			  delete scale.paddingOuter;
+
+			  scale.copy = function() {
+				return pointish(copy());
+			  };
+
+			  return scale;
+			}
+
+			function point$4() {
+			  return pointish(band().paddingInner(1));
+			}
+
+			var constant$4 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var number$1 = function(x) {
+			  return +x;
+			};
+
+			var unit = [0, 1];
+
+			function deinterpolateLinear(a, b) {
+			  return (b -= (a = +a))
+				  ? function(x) { return (x - a) / b; }
+				  : constant$4(b);
+			}
+
+			function deinterpolateClamp(deinterpolate) {
+			  return function(a, b) {
+				var d = deinterpolate(a = +a, b = +b);
+				return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
+			  };
+			}
+
+			function reinterpolateClamp(reinterpolate) {
+			  return function(a, b) {
+				var r = reinterpolate(a = +a, b = +b);
+				return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
+			  };
+			}
+
+			function bimap(domain, range$$1, deinterpolate, reinterpolate) {
+			  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
+			  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
+			  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
+			  return function(x) { return r0(d0(x)); };
+			}
+
+			function polymap(domain, range$$1, deinterpolate, reinterpolate) {
+			  var j = Math.min(domain.length, range$$1.length) - 1,
+				  d = new Array(j),
+				  r = new Array(j),
+				  i = -1;
+
+			  // Reverse descending domains.
+			  if (domain[j] < domain[0]) {
+				domain = domain.slice().reverse();
+				range$$1 = range$$1.slice().reverse();
+			  }
+
+			  while (++i < j) {
+				d[i] = deinterpolate(domain[i], domain[i + 1]);
+				r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
+			  }
+
+			  return function(x) {
+				var i = bisectRight(domain, x, 1, j) - 1;
+				return r[i](d[i](x));
+			  };
+			}
+
+			function copy(source, target) {
+			  return target
+				  .domain(source.domain())
+				  .range(source.range())
+				  .interpolate(source.interpolate())
+				  .clamp(source.clamp());
+			}
+
+			// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+			// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
+			function continuous(deinterpolate, reinterpolate) {
+			  var domain = unit,
+				  range$$1 = unit,
+				  interpolate$$1 = interpolate,
+				  clamp = false,
+				  piecewise,
+				  output,
+				  input;
+
+			  function rescale() {
+				piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
+				output = input = null;
+				return scale;
+			  }
+
+			  function scale(x) {
+				return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
+			  }
+
+			  scale.invert = function(y) {
+				return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
+			  };
+
+			  scale.domain = function(_) {
+				return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+			  };
+
+			  scale.rangeRound = function(_) {
+				return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale();
+			  };
+
+			  scale.clamp = function(_) {
+				return arguments.length ? (clamp = !!_, rescale()) : clamp;
+			  };
+
+			  scale.interpolate = function(_) {
+				return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
+			  };
+
+			  return rescale();
+			}
+
+			var tickFormat = function(domain, count, specifier) {
+			  var start = domain[0],
+				  stop = domain[domain.length - 1],
+				  step = tickStep(start, stop, count == null ? 10 : count),
+				  precision;
+			  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
+			  switch (specifier.type) {
+				case "s": {
+				  var value = Math.max(Math.abs(start), Math.abs(stop));
+				  if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
+				  return exports.formatPrefix(specifier, value);
+				}
+				case "":
+				case "e":
+				case "g":
+				case "p":
+				case "r": {
+				  if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+				  break;
+				}
+				case "f":
+				case "%": {
+				  if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+				  break;
+				}
+			  }
+			  return exports.format(specifier);
+			};
+
+			function linearish(scale) {
+			  var domain = scale.domain;
+
+			  scale.ticks = function(count) {
+				var d = domain();
+				return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+			  };
+
+			  scale.tickFormat = function(count, specifier) {
+				return tickFormat(domain(), count, specifier);
+			  };
+
+			  scale.nice = function(count) {
+				var d = domain(),
+					i = d.length - 1,
+					n = count == null ? 10 : count,
+					start = d[0],
+					stop = d[i],
+					step = tickStep(start, stop, n);
+
+				if (step) {
+				  step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
+				  d[0] = Math.floor(start / step) * step;
+				  d[i] = Math.ceil(stop / step) * step;
+				  domain(d);
+				}
+
+				return scale;
+			  };
+
+			  return scale;
+			}
+
+			function linear$2() {
+			  var scale = continuous(deinterpolateLinear, interpolateNumber);
+
+			  scale.copy = function() {
+				return copy(scale, linear$2());
+			  };
+
+			  return linearish(scale);
+			}
+
+			function identity$4() {
+			  var domain = [0, 1];
+
+			  function scale(x) {
+				return +x;
+			  }
+
+			  scale.invert = scale;
+
+			  scale.domain = scale.range = function(_) {
+				return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
+			  };
+
+			  scale.copy = function() {
+				return identity$4().domain(domain);
+			  };
+
+			  return linearish(scale);
+			}
+
+			var nice = function(domain, interval) {
+			  domain = domain.slice();
+
+			  var i0 = 0,
+				  i1 = domain.length - 1,
+				  x0 = domain[i0],
+				  x1 = domain[i1],
+				  t;
+
+			  if (x1 < x0) {
+				t = i0, i0 = i1, i1 = t;
+				t = x0, x0 = x1, x1 = t;
+			  }
+
+			  domain[i0] = interval.floor(x0);
+			  domain[i1] = interval.ceil(x1);
+			  return domain;
+			};
+
+			function deinterpolate(a, b) {
+			  return (b = Math.log(b / a))
+				  ? function(x) { return Math.log(x / a) / b; }
+				  : constant$4(b);
+			}
+
+			function reinterpolate(a, b) {
+			  return a < 0
+				  ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
+				  : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
+			}
+
+			function pow10(x) {
+			  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+			}
+
+			function powp(base) {
+			  return base === 10 ? pow10
+				  : base === Math.E ? Math.exp
+				  : function(x) { return Math.pow(base, x); };
+			}
+
+			function logp(base) {
+			  return base === Math.E ? Math.log
+				  : base === 10 && Math.log10
+				  || base === 2 && Math.log2
+				  || (base = Math.log(base), function(x) { return Math.log(x) / base; });
+			}
+
+			function reflect(f) {
+			  return function(x) {
+				return -f(-x);
+			  };
+			}
+
+			function log() {
+			  var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
+				  domain = scale.domain,
+				  base = 10,
+				  logs = logp(10),
+				  pows = powp(10);
+
+			  function rescale() {
+				logs = logp(base), pows = powp(base);
+				if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
+				return scale;
+			  }
+
+			  scale.base = function(_) {
+				return arguments.length ? (base = +_, rescale()) : base;
+			  };
+
+			  scale.domain = function(_) {
+				return arguments.length ? (domain(_), rescale()) : domain();
+			  };
+
+			  scale.ticks = function(count) {
+				var d = domain(),
+					u = d[0],
+					v = d[d.length - 1],
+					r;
+
+				if (r = v < u) i = u, u = v, v = i;
+
+				var i = logs(u),
+					j = logs(v),
+					p,
+					k,
+					t,
+					n = count == null ? 10 : +count,
+					z = [];
+
+				if (!(base % 1) && j - i < n) {
+				  i = Math.round(i) - 1, j = Math.round(j) + 1;
+				  if (u > 0) for (; i < j; ++i) {
+					for (k = 1, p = pows(i); k < base; ++k) {
+					  t = p * k;
+					  if (t < u) continue;
+					  if (t > v) break;
+					  z.push(t);
+					}
+				  } else for (; i < j; ++i) {
+					for (k = base - 1, p = pows(i); k >= 1; --k) {
+					  t = p * k;
+					  if (t < u) continue;
+					  if (t > v) break;
+					  z.push(t);
+					}
+				  }
+				} else {
+				  z = ticks(i, j, Math.min(j - i, n)).map(pows);
+				}
+
+				return r ? z.reverse() : z;
+			  };
+
+			  scale.tickFormat = function(count, specifier) {
+				if (specifier == null) specifier = base === 10 ? ".0e" : ",";
+				if (typeof specifier !== "function") specifier = exports.format(specifier);
+				if (count === Infinity) return specifier;
+				if (count == null) count = 10;
+				var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+				return function(d) {
+				  var i = d / pows(Math.round(logs(d)));
+				  if (i * base < base - 0.5) i *= base;
+				  return i <= k ? specifier(d) : "";
+				};
+			  };
+
+			  scale.nice = function() {
+				return domain(nice(domain(), {
+				  floor: function(x) { return pows(Math.floor(logs(x))); },
+				  ceil: function(x) { return pows(Math.ceil(logs(x))); }
+				}));
+			  };
+
+			  scale.copy = function() {
+				return copy(scale, log().base(base));
+			  };
+
+			  return scale;
+			}
+
+			function raise(x, exponent) {
+			  return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+			}
+
+			function pow() {
+			  var exponent = 1,
+				  scale = continuous(deinterpolate, reinterpolate),
+				  domain = scale.domain;
+
+			  function deinterpolate(a, b) {
+				return (b = raise(b, exponent) - (a = raise(a, exponent)))
+					? function(x) { return (raise(x, exponent) - a) / b; }
+					: constant$4(b);
+			  }
+
+			  function reinterpolate(a, b) {
+				b = raise(b, exponent) - (a = raise(a, exponent));
+				return function(t) { return raise(a + b * t, 1 / exponent); };
+			  }
+
+			  scale.exponent = function(_) {
+				return arguments.length ? (exponent = +_, domain(domain())) : exponent;
+			  };
+
+			  scale.copy = function() {
+				return copy(scale, pow().exponent(exponent));
+			  };
+
+			  return linearish(scale);
+			}
+
+			function sqrt() {
+			  return pow().exponent(0.5);
+			}
+
+			function quantile$$1() {
+			  var domain = [],
+				  range$$1 = [],
+				  thresholds = [];
+
+			  function rescale() {
+				var i = 0, n = Math.max(1, range$$1.length);
+				thresholds = new Array(n - 1);
+				while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
+				return scale;
+			  }
+
+			  function scale(x) {
+				if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
+			  }
+
+			  scale.invertExtent = function(y) {
+				var i = range$$1.indexOf(y);
+				return i < 0 ? [NaN, NaN] : [
+				  i > 0 ? thresholds[i - 1] : domain[0],
+				  i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
+				];
+			  };
+
+			  scale.domain = function(_) {
+				if (!arguments.length) return domain.slice();
+				domain = [];
+				for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
+				domain.sort(ascending);
+				return rescale();
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+			  };
+
+			  scale.quantiles = function() {
+				return thresholds.slice();
+			  };
+
+			  scale.copy = function() {
+				return quantile$$1()
+					.domain(domain)
+					.range(range$$1);
+			  };
+
+			  return scale;
+			}
+
+			function quantize$1() {
+			  var x0 = 0,
+				  x1 = 1,
+				  n = 1,
+				  domain = [0.5],
+				  range$$1 = [0, 1];
+
+			  function scale(x) {
+				if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+			  }
+
+			  function rescale() {
+				var i = -1;
+				domain = new Array(n);
+				while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+				return scale;
+			  }
+
+			  scale.domain = function(_) {
+				return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice();
+			  };
+
+			  scale.invertExtent = function(y) {
+				var i = range$$1.indexOf(y);
+				return i < 0 ? [NaN, NaN]
+					: i < 1 ? [x0, domain[0]]
+					: i >= n ? [domain[n - 1], x1]
+					: [domain[i - 1], domain[i]];
+			  };
+
+			  scale.copy = function() {
+				return quantize$1()
+					.domain([x0, x1])
+					.range(range$$1);
+			  };
+
+			  return linearish(scale);
+			}
+
+			function threshold$1() {
+			  var domain = [0.5],
+				  range$$1 = [0, 1],
+				  n = 1;
+
+			  function scale(x) {
+				if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+			  }
+
+			  scale.domain = function(_) {
+				return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
+			  };
+
+			  scale.range = function(_) {
+				return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
+			  };
+
+			  scale.invertExtent = function(y) {
+				var i = range$$1.indexOf(y);
+				return [domain[i - 1], domain[i]];
+			  };
+
+			  scale.copy = function() {
+				return threshold$1()
+					.domain(domain)
+					.range(range$$1);
+			  };
+
+			  return scale;
+			}
+
+			var durationSecond$1 = 1000;
+			var durationMinute$1 = durationSecond$1 * 60;
+			var durationHour$1 = durationMinute$1 * 60;
+			var durationDay$1 = durationHour$1 * 24;
+			var durationWeek$1 = durationDay$1 * 7;
+			var durationMonth = durationDay$1 * 30;
+			var durationYear = durationDay$1 * 365;
+
+			function date$1(t) {
+			  return new Date(t);
+			}
+
+			function number$2(t) {
+			  return t instanceof Date ? +t : +new Date(+t);
+			}
+
+			function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
+			  var scale = continuous(deinterpolateLinear, interpolateNumber),
+				  invert = scale.invert,
+				  domain = scale.domain;
+
+			  var formatMillisecond = format(".%L"),
+				  formatSecond = format(":%S"),
+				  formatMinute = format("%I:%M"),
+				  formatHour = format("%I %p"),
+				  formatDay = format("%a %d"),
+				  formatWeek = format("%b %d"),
+				  formatMonth = format("%B"),
+				  formatYear = format("%Y");
+
+			  var tickIntervals = [
+				[second$$1,  1,      durationSecond$1],
+				[second$$1,  5,  5 * durationSecond$1],
+				[second$$1, 15, 15 * durationSecond$1],
+				[second$$1, 30, 30 * durationSecond$1],
+				[minute$$1,  1,      durationMinute$1],
+				[minute$$1,  5,  5 * durationMinute$1],
+				[minute$$1, 15, 15 * durationMinute$1],
+				[minute$$1, 30, 30 * durationMinute$1],
+				[  hour$$1,  1,      durationHour$1  ],
+				[  hour$$1,  3,  3 * durationHour$1  ],
+				[  hour$$1,  6,  6 * durationHour$1  ],
+				[  hour$$1, 12, 12 * durationHour$1  ],
+				[   day$$1,  1,      durationDay$1   ],
+				[   day$$1,  2,  2 * durationDay$1   ],
+				[  week,  1,      durationWeek$1  ],
+				[ month$$1,  1,      durationMonth ],
+				[ month$$1,  3,  3 * durationMonth ],
+				[  year$$1,  1,      durationYear  ]
+			  ];
+
+			  function tickFormat(date) {
+				return (second$$1(date) < date ? formatMillisecond
+					: minute$$1(date) < date ? formatSecond
+					: hour$$1(date) < date ? formatMinute
+					: day$$1(date) < date ? formatHour
+					: month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
+					: year$$1(date) < date ? formatMonth
+					: formatYear)(date);
+			  }
+
+			  function tickInterval(interval, start, stop, step) {
+				if (interval == null) interval = 10;
+
+				// If a desired tick count is specified, pick a reasonable tick interval
+				// based on the extent of the domain and a rough estimate of tick size.
+				// Otherwise, assume interval is already a time interval and use it.
+				if (typeof interval === "number") {
+				  var target = Math.abs(stop - start) / interval,
+					  i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
+				  if (i === tickIntervals.length) {
+					step = tickStep(start / durationYear, stop / durationYear, interval);
+					interval = year$$1;
+				  } else if (i) {
+					i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+					step = i[1];
+					interval = i[0];
+				  } else {
+					step = tickStep(start, stop, interval);
+					interval = millisecond$$1;
+				  }
+				}
+
+				return step == null ? interval : interval.every(step);
+			  }
+
+			  scale.invert = function(y) {
+				return new Date(invert(y));
+			  };
+
+			  scale.domain = function(_) {
+				return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
+			  };
+
+			  scale.ticks = function(interval, step) {
+				var d = domain(),
+					t0 = d[0],
+					t1 = d[d.length - 1],
+					r = t1 < t0,
+					t;
+				if (r) t = t0, t0 = t1, t1 = t;
+				t = tickInterval(interval, t0, t1, step);
+				t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
+				return r ? t.reverse() : t;
+			  };
+
+			  scale.tickFormat = function(count, specifier) {
+				return specifier == null ? tickFormat : format(specifier);
+			  };
+
+			  scale.nice = function(interval, step) {
+				var d = domain();
+				return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
+					? domain(nice(d, interval))
+					: scale;
+			  };
+
+			  scale.copy = function() {
+				return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
+			  };
+
+			  return scale;
+			}
+
+			var time = function() {
+			  return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
+			};
+
+			var utcTime = function() {
+			  return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
+			};
+
+			var colors = function(s) {
+			  return s.match(/.{6}/g).map(function(x) {
+				return "#" + x;
+			  });
+			};
+
+			var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
+
+			var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
+
+			var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
+
+			var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
+
+			var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
+
+			var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+			var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+			var rainbow = cubehelix();
+
+			var rainbow$1 = function(t) {
+			  if (t < 0 || t > 1) t -= Math.floor(t);
+			  var ts = Math.abs(t - 0.5);
+			  rainbow.h = 360 * t - 100;
+			  rainbow.s = 1.5 - 1.5 * ts;
+			  rainbow.l = 0.8 - 0.9 * ts;
+			  return rainbow + "";
+			};
+
+			function ramp(range) {
+			  var n = range.length;
+			  return function(t) {
+				return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+			  };
+			}
+
+			var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
+
+			var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
+
+			var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
+
+			var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
+
+			function sequential(interpolator) {
+			  var x0 = 0,
+				  x1 = 1,
+				  clamp = false;
+
+			  function scale(x) {
+				var t = (x - x0) / (x1 - x0);
+				return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
+			  }
+
+			  scale.domain = function(_) {
+				return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
+			  };
+
+			  scale.clamp = function(_) {
+				return arguments.length ? (clamp = !!_, scale) : clamp;
+			  };
+
+			  scale.interpolator = function(_) {
+				return arguments.length ? (interpolator = _, scale) : interpolator;
+			  };
+
+			  scale.copy = function() {
+				return sequential(interpolator).domain([x0, x1]).clamp(clamp);
+			  };
+
+			  return linearish(scale);
+			}
+
+			var xhtml = "http://www.w3.org/1999/xhtml";
+
+			var namespaces = {
+			  svg: "http://www.w3.org/2000/svg",
+			  xhtml: xhtml,
+			  xlink: "http://www.w3.org/1999/xlink",
+			  xml: "http://www.w3.org/XML/1998/namespace",
+			  xmlns: "http://www.w3.org/2000/xmlns/"
+			};
+
+			var namespace = function(name) {
+			  var prefix = name += "", i = prefix.indexOf(":");
+			  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
+			  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
+			};
+
+			function creatorInherit(name) {
+			  return function() {
+				var document = this.ownerDocument,
+					uri = this.namespaceURI;
+				return uri === xhtml && document.documentElement.namespaceURI === xhtml
+					? document.createElement(name)
+					: document.createElementNS(uri, name);
+			  };
+			}
+
+			function creatorFixed(fullname) {
+			  return function() {
+				return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+			  };
+			}
+
+			var creator = function(name) {
+			  var fullname = namespace(name);
+			  return (fullname.local
+				  ? creatorFixed
+				  : creatorInherit)(fullname);
+			};
+
+			var nextId = 0;
+
+			function local() {
+			  return new Local;
+			}
+
+			function Local() {
+			  this._ = "@" + (++nextId).toString(36);
+			}
+
+			Local.prototype = local.prototype = {
+			  constructor: Local,
+			  get: function(node) {
+				var id = this._;
+				while (!(id in node)) if (!(node = node.parentNode)) return;
+				return node[id];
+			  },
+			  set: function(node, value) {
+				return node[this._] = value;
+			  },
+			  remove: function(node) {
+				return this._ in node && delete node[this._];
+			  },
+			  toString: function() {
+				return this._;
+			  }
+			};
+
+			var matcher = function(selector) {
+			  return function() {
+				return this.matches(selector);
+			  };
+			};
+
+			if (typeof document !== "undefined") {
+			  var element = document.documentElement;
+			  if (!element.matches) {
+				var vendorMatches = element.webkitMatchesSelector
+					|| element.msMatchesSelector
+					|| element.mozMatchesSelector
+					|| element.oMatchesSelector;
+				matcher = function(selector) {
+				  return function() {
+					return vendorMatches.call(this, selector);
+				  };
+				};
+			  }
+			}
+
+			var matcher$1 = matcher;
+
+			var filterEvents = {};
+
+			exports.event = null;
+
+			if (typeof document !== "undefined") {
+			  var element$1 = document.documentElement;
+			  if (!("onmouseenter" in element$1)) {
+				filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
+			  }
+			}
+
+			function filterContextListener(listener, index, group) {
+			  listener = contextListener(listener, index, group);
+			  return function(event) {
+				var related = event.relatedTarget;
+				if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
+				  listener.call(this, event);
+				}
+			  };
+			}
+
+			function contextListener(listener, index, group) {
+			  return function(event1) {
+				var event0 = exports.event; // Events can be reentrant (e.g., focus).
+				exports.event = event1;
+				try {
+				  listener.call(this, this.__data__, index, group);
+				} finally {
+				  exports.event = event0;
+				}
+			  };
+			}
+
+			function parseTypenames$1(typenames) {
+			  return typenames.trim().split(/^|\s+/).map(function(t) {
+				var name = "", i = t.indexOf(".");
+				if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+				return {type: t, name: name};
+			  });
+			}
+
+			function onRemove(typename) {
+			  return function() {
+				var on = this.__on;
+				if (!on) return;
+				for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+				  if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
+					this.removeEventListener(o.type, o.listener, o.capture);
+				  } else {
+					on[++i] = o;
+				  }
+				}
+				if (++i) on.length = i;
+				else delete this.__on;
+			  };
+			}
+
+			function onAdd(typename, value, capture) {
+			  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
+			  return function(d, i, group) {
+				var on = this.__on, o, listener = wrap(value, i, group);
+				if (on) for (var j = 0, m = on.length; j < m; ++j) {
+				  if ((o = on[j]).type === typename.type && o.name === typename.name) {
+					this.removeEventListener(o.type, o.listener, o.capture);
+					this.addEventListener(o.type, o.listener = listener, o.capture = capture);
+					o.value = value;
+					return;
+				  }
+				}
+				this.addEventListener(typename.type, listener, capture);
+				o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
+				if (!on) this.__on = [o];
+				else on.push(o);
+			  };
+			}
+
+			var selection_on = function(typename, value, capture) {
+			  var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
+
+			  if (arguments.length < 2) {
+				var on = this.node().__on;
+				if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
+				  for (i = 0, o = on[j]; i < n; ++i) {
+					if ((t = typenames[i]).type === o.type && t.name === o.name) {
+					  return o.value;
+					}
+				  }
+				}
+				return;
+			  }
+
+			  on = value ? onAdd : onRemove;
+			  if (capture == null) capture = false;
+			  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
+			  return this;
+			};
+
+			function customEvent(event1, listener, that, args) {
+			  var event0 = exports.event;
+			  event1.sourceEvent = exports.event;
+			  exports.event = event1;
+			  try {
+				return listener.apply(that, args);
+			  } finally {
+				exports.event = event0;
+			  }
+			}
+
+			var sourceEvent = function() {
+			  var current = exports.event, source;
+			  while (source = current.sourceEvent) current = source;
+			  return current;
+			};
+
+			var point$5 = function(node, event) {
+			  var svg = node.ownerSVGElement || node;
+
+			  if (svg.createSVGPoint) {
+				var point = svg.createSVGPoint();
+				point.x = event.clientX, point.y = event.clientY;
+				point = point.matrixTransform(node.getScreenCTM().inverse());
+				return [point.x, point.y];
+			  }
+
+			  var rect = node.getBoundingClientRect();
+			  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
+			};
+
+			var mouse = function(node) {
+			  var event = sourceEvent();
+			  if (event.changedTouches) event = event.changedTouches[0];
+			  return point$5(node, event);
+			};
+
+			function none$2() {}
+
+			var selector = function(selector) {
+			  return selector == null ? none$2 : function() {
+				return this.querySelector(selector);
+			  };
+			};
+
+			var selection_select = function(select) {
+			  if (typeof select !== "function") select = selector(select);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+				  if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+					if ("__data__" in node) subnode.__data__ = node.__data__;
+					subgroup[i] = subnode;
+				  }
+				}
+			  }
+
+			  return new Selection(subgroups, this._parents);
+			};
+
+			function empty() {
+			  return [];
+			}
+
+			var selectorAll = function(selector) {
+			  return selector == null ? empty : function() {
+				return this.querySelectorAll(selector);
+			  };
+			};
+
+			var selection_selectAll = function(select) {
+			  if (typeof select !== "function") select = selectorAll(select);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+				  if (node = group[i]) {
+					subgroups.push(select.call(node, node.__data__, i, group));
+					parents.push(node);
+				  }
+				}
+			  }
+
+			  return new Selection(subgroups, parents);
+			};
+
+			var selection_filter = function(match) {
+			  if (typeof match !== "function") match = matcher$1(match);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+				  if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+					subgroup.push(node);
+				  }
+				}
+			  }
+
+			  return new Selection(subgroups, this._parents);
+			};
+
+			var sparse = function(update) {
+			  return new Array(update.length);
+			};
+
+			var selection_enter = function() {
+			  return new Selection(this._enter || this._groups.map(sparse), this._parents);
+			};
+
+			function EnterNode(parent, datum) {
+			  this.ownerDocument = parent.ownerDocument;
+			  this.namespaceURI = parent.namespaceURI;
+			  this._next = null;
+			  this._parent = parent;
+			  this.__data__ = datum;
+			}
+
+			EnterNode.prototype = {
+			  constructor: EnterNode,
+			  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
+			  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
+			  querySelector: function(selector) { return this._parent.querySelector(selector); },
+			  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
+			};
+
+			var constant$5 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var keyPrefix = "$"; // Protect against keys like “__proto__”.
+
+			function bindIndex(parent, group, enter, update, exit, data) {
+			  var i = 0,
+				  node,
+				  groupLength = group.length,
+				  dataLength = data.length;
+
+			  // Put any non-null nodes that fit into update.
+			  // Put any null nodes into enter.
+			  // Put any remaining data into enter.
+			  for (; i < dataLength; ++i) {
+				if (node = group[i]) {
+				  node.__data__ = data[i];
+				  update[i] = node;
+				} else {
+				  enter[i] = new EnterNode(parent, data[i]);
+				}
+			  }
+
+			  // Put any non-null nodes that don’t fit into exit.
+			  for (; i < groupLength; ++i) {
+				if (node = group[i]) {
+				  exit[i] = node;
+				}
+			  }
+			}
+
+			function bindKey(parent, group, enter, update, exit, data, key) {
+			  var i,
+				  node,
+				  nodeByKeyValue = {},
+				  groupLength = group.length,
+				  dataLength = data.length,
+				  keyValues = new Array(groupLength),
+				  keyValue;
+
+			  // Compute the key for each node.
+			  // If multiple nodes have the same key, the duplicates are added to exit.
+			  for (i = 0; i < groupLength; ++i) {
+				if (node = group[i]) {
+				  keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
+				  if (keyValue in nodeByKeyValue) {
+					exit[i] = node;
+				  } else {
+					nodeByKeyValue[keyValue] = node;
+				  }
+				}
+			  }
+
+			  // Compute the key for each datum.
+			  // If there a node associated with this key, join and add it to update.
+			  // If there is not (or the key is a duplicate), add it to enter.
+			  for (i = 0; i < dataLength; ++i) {
+				keyValue = keyPrefix + key.call(parent, data[i], i, data);
+				if (node = nodeByKeyValue[keyValue]) {
+				  update[i] = node;
+				  node.__data__ = data[i];
+				  nodeByKeyValue[keyValue] = null;
+				} else {
+				  enter[i] = new EnterNode(parent, data[i]);
+				}
+			  }
+
+			  // Add any remaining nodes that were not bound to data to exit.
+			  for (i = 0; i < groupLength; ++i) {
+				if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
+				  exit[i] = node;
+				}
+			  }
+			}
+
+			var selection_data = function(value, key) {
+			  if (!value) {
+				data = new Array(this.size()), j = -1;
+				this.each(function(d) { data[++j] = d; });
+				return data;
+			  }
+
+			  var bind = key ? bindKey : bindIndex,
+				  parents = this._parents,
+				  groups = this._groups;
+
+			  if (typeof value !== "function") value = constant$5(value);
+
+			  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
+				var parent = parents[j],
+					group = groups[j],
+					groupLength = group.length,
+					data = value.call(parent, parent && parent.__data__, j, parents),
+					dataLength = data.length,
+					enterGroup = enter[j] = new Array(dataLength),
+					updateGroup = update[j] = new Array(dataLength),
+					exitGroup = exit[j] = new Array(groupLength);
+
+				bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+				// Now connect the enter nodes to their following update node, such that
+				// appendChild can insert the materialized enter node before this node,
+				// rather than at the end of the parent node.
+				for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+				  if (previous = enterGroup[i0]) {
+					if (i0 >= i1) i1 = i0 + 1;
+					while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+					previous._next = next || null;
+				  }
+				}
+			  }
+
+			  update = new Selection(update, parents);
+			  update._enter = enter;
+			  update._exit = exit;
+			  return update;
+			};
+
+			var selection_exit = function() {
+			  return new Selection(this._exit || this._groups.map(sparse), this._parents);
+			};
+
+			var selection_merge = function(selection) {
+
+			  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+				for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+				  if (node = group0[i] || group1[i]) {
+					merge[i] = node;
+				  }
+				}
+			  }
+
+			  for (; j < m0; ++j) {
+				merges[j] = groups0[j];
+			  }
+
+			  return new Selection(merges, this._parents);
+			};
+
+			var selection_order = function() {
+
+			  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
+				for (var group = groups[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;
+			};
+
+			var selection_sort = function(compare) {
+			  if (!compare) compare = ascending$2;
+
+			  function compareNode(a, b) {
+				return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+			  }
+
+			  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
+				  if (node = group[i]) {
+					sortgroup[i] = node;
+				  }
+				}
+				sortgroup.sort(compareNode);
+			  }
+
+			  return new Selection(sortgroups, this._parents).order();
+			};
+
+			function ascending$2(a, b) {
+			  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+			}
+
+			var selection_call = function() {
+			  var callback = arguments[0];
+			  arguments[0] = this;
+			  callback.apply(null, arguments);
+			  return this;
+			};
+
+			var selection_nodes = function() {
+			  var nodes = new Array(this.size()), i = -1;
+			  this.each(function() { nodes[++i] = this; });
+			  return nodes;
+			};
+
+			var selection_node = function() {
+
+			  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+				for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+				  var node = group[i];
+				  if (node) return node;
+				}
+			  }
+
+			  return null;
+			};
+
+			var selection_size = function() {
+			  var size = 0;
+			  this.each(function() { ++size; });
+			  return size;
+			};
+
+			var selection_empty = function() {
+			  return !this.node();
+			};
+
+			var selection_each = function(callback) {
+
+			  for (var groups = this._groups, 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.call(node, node.__data__, i, group);
+				}
+			  }
+
+			  return this;
+			};
+
+			function attrRemove(name) {
+			  return function() {
+				this.removeAttribute(name);
+			  };
+			}
+
+			function attrRemoveNS(fullname) {
+			  return function() {
+				this.removeAttributeNS(fullname.space, fullname.local);
+			  };
+			}
+
+			function attrConstant(name, value) {
+			  return function() {
+				this.setAttribute(name, value);
+			  };
+			}
+
+			function attrConstantNS(fullname, value) {
+			  return function() {
+				this.setAttributeNS(fullname.space, fullname.local, value);
+			  };
+			}
+
+			function attrFunction(name, value) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				if (v == null) this.removeAttribute(name);
+				else this.setAttribute(name, v);
+			  };
+			}
+
+			function attrFunctionNS(fullname, value) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+				else this.setAttributeNS(fullname.space, fullname.local, v);
+			  };
+			}
+
+			var selection_attr = function(name, value) {
+			  var fullname = namespace(name);
+
+			  if (arguments.length < 2) {
+				var node = this.node();
+				return fullname.local
+					? node.getAttributeNS(fullname.space, fullname.local)
+					: node.getAttribute(fullname);
+			  }
+
+			  return this.each((value == null
+				  ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
+				  ? (fullname.local ? attrFunctionNS : attrFunction)
+				  : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
+			};
+
+			var window = function(node) {
+			  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
+				  || (node.document && node) // node is a Window
+				  || node.defaultView; // node is a Document
+			};
+
+			function styleRemove(name) {
+			  return function() {
+				this.style.removeProperty(name);
+			  };
+			}
+
+			function styleConstant(name, value, priority) {
+			  return function() {
+				this.style.setProperty(name, value, priority);
+			  };
+			}
+
+			function styleFunction(name, value, priority) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				if (v == null) this.style.removeProperty(name);
+				else this.style.setProperty(name, v, priority);
+			  };
+			}
+
+			var selection_style = function(name, value, priority) {
+			  var node;
+			  return arguments.length > 1
+				  ? this.each((value == null
+						? styleRemove : typeof value === "function"
+						? styleFunction
+						: styleConstant)(name, value, priority == null ? "" : priority))
+				  : window(node = this.node())
+					  .getComputedStyle(node, null)
+					  .getPropertyValue(name);
+			};
+
+			function propertyRemove(name) {
+			  return function() {
+				delete this[name];
+			  };
+			}
+
+			function propertyConstant(name, value) {
+			  return function() {
+				this[name] = value;
+			  };
+			}
+
+			function propertyFunction(name, value) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				if (v == null) delete this[name];
+				else this[name] = v;
+			  };
+			}
+
+			var selection_property = function(name, value) {
+			  return arguments.length > 1
+				  ? this.each((value == null
+					  ? propertyRemove : typeof value === "function"
+					  ? propertyFunction
+					  : propertyConstant)(name, value))
+				  : this.node()[name];
+			};
+
+			function classArray(string) {
+			  return string.trim().split(/^|\s+/);
+			}
+
+			function classList(node) {
+			  return node.classList || new ClassList(node);
+			}
+
+			function ClassList(node) {
+			  this._node = node;
+			  this._names = classArray(node.getAttribute("class") || "");
+			}
+
+			ClassList.prototype = {
+			  add: function(name) {
+				var i = this._names.indexOf(name);
+				if (i < 0) {
+				  this._names.push(name);
+				  this._node.setAttribute("class", this._names.join(" "));
+				}
+			  },
+			  remove: function(name) {
+				var i = this._names.indexOf(name);
+				if (i >= 0) {
+				  this._names.splice(i, 1);
+				  this._node.setAttribute("class", this._names.join(" "));
+				}
+			  },
+			  contains: function(name) {
+				return this._names.indexOf(name) >= 0;
+			  }
+			};
+
+			function classedAdd(node, names) {
+			  var list = classList(node), i = -1, n = names.length;
+			  while (++i < n) list.add(names[i]);
+			}
+
+			function classedRemove(node, names) {
+			  var list = classList(node), i = -1, n = names.length;
+			  while (++i < n) list.remove(names[i]);
+			}
+
+			function classedTrue(names) {
+			  return function() {
+				classedAdd(this, names);
+			  };
+			}
+
+			function classedFalse(names) {
+			  return function() {
+				classedRemove(this, names);
+			  };
+			}
+
+			function classedFunction(names, value) {
+			  return function() {
+				(value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+			  };
+			}
+
+			var selection_classed = function(name, value) {
+			  var names = classArray(name + "");
+
+			  if (arguments.length < 2) {
+				var list = classList(this.node()), i = -1, n = names.length;
+				while (++i < n) if (!list.contains(names[i])) return false;
+				return true;
+			  }
+
+			  return this.each((typeof value === "function"
+				  ? classedFunction : value
+				  ? classedTrue
+				  : classedFalse)(names, value));
+			};
+
+			function textRemove() {
+			  this.textContent = "";
+			}
+
+			function textConstant(value) {
+			  return function() {
+				this.textContent = value;
+			  };
+			}
+
+			function textFunction(value) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				this.textContent = v == null ? "" : v;
+			  };
+			}
+
+			var selection_text = function(value) {
+			  return arguments.length
+				  ? this.each(value == null
+					  ? textRemove : (typeof value === "function"
+					  ? textFunction
+					  : textConstant)(value))
+				  : this.node().textContent;
+			};
+
+			function htmlRemove() {
+			  this.innerHTML = "";
+			}
+
+			function htmlConstant(value) {
+			  return function() {
+				this.innerHTML = value;
+			  };
+			}
+
+			function htmlFunction(value) {
+			  return function() {
+				var v = value.apply(this, arguments);
+				this.innerHTML = v == null ? "" : v;
+			  };
+			}
+
+			var selection_html = function(value) {
+			  return arguments.length
+				  ? this.each(value == null
+					  ? htmlRemove : (typeof value === "function"
+					  ? htmlFunction
+					  : htmlConstant)(value))
+				  : this.node().innerHTML;
+			};
+
+			function raise$1() {
+			  if (this.nextSibling) this.parentNode.appendChild(this);
+			}
+
+			var selection_raise = function() {
+			  return this.each(raise$1);
+			};
+
+			function lower() {
+			  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+			}
+
+			var selection_lower = function() {
+			  return this.each(lower);
+			};
+
+			var selection_append = function(name) {
+			  var create = typeof name === "function" ? name : creator(name);
+			  return this.select(function() {
+				return this.appendChild(create.apply(this, arguments));
+			  });
+			};
+
+			function constantNull() {
+			  return null;
+			}
+
+			var selection_insert = function(name, before) {
+			  var create = typeof name === "function" ? name : creator(name),
+				  select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
+			  return this.select(function() {
+				return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
+			  });
+			};
+
+			function remove() {
+			  var parent = this.parentNode;
+			  if (parent) parent.removeChild(this);
+			}
+
+			var selection_remove = function() {
+			  return this.each(remove);
+			};
+
+			var selection_datum = function(value) {
+			  return arguments.length
+				  ? this.property("__data__", value)
+				  : this.node().__data__;
+			};
+
+			function dispatchEvent(node, type, params) {
+			  var window$$1 = window(node),
+				  event = window$$1.CustomEvent;
+
+			  if (event) {
+				event = new event(type, params);
+			  } else {
+				event = window$$1.document.createEvent("Event");
+				if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
+				else event.initEvent(type, false, false);
+			  }
+
+			  node.dispatchEvent(event);
+			}
+
+			function dispatchConstant(type, params) {
+			  return function() {
+				return dispatchEvent(this, type, params);
+			  };
+			}
+
+			function dispatchFunction(type, params) {
+			  return function() {
+				return dispatchEvent(this, type, params.apply(this, arguments));
+			  };
+			}
+
+			var selection_dispatch = function(type, params) {
+			  return this.each((typeof params === "function"
+				  ? dispatchFunction
+				  : dispatchConstant)(type, params));
+			};
+
+			var root = [null];
+
+			function Selection(groups, parents) {
+			  this._groups = groups;
+			  this._parents = parents;
+			}
+
+			function selection() {
+			  return new Selection([[document.documentElement]], root);
+			}
+
+			Selection.prototype = selection.prototype = {
+			  constructor: Selection,
+			  select: selection_select,
+			  selectAll: selection_selectAll,
+			  filter: selection_filter,
+			  data: selection_data,
+			  enter: selection_enter,
+			  exit: selection_exit,
+			  merge: selection_merge,
+			  order: selection_order,
+			  sort: selection_sort,
+			  call: selection_call,
+			  nodes: selection_nodes,
+			  node: selection_node,
+			  size: selection_size,
+			  empty: selection_empty,
+			  each: selection_each,
+			  attr: selection_attr,
+			  style: selection_style,
+			  property: selection_property,
+			  classed: selection_classed,
+			  text: selection_text,
+			  html: selection_html,
+			  raise: selection_raise,
+			  lower: selection_lower,
+			  append: selection_append,
+			  insert: selection_insert,
+			  remove: selection_remove,
+			  datum: selection_datum,
+			  on: selection_on,
+			  dispatch: selection_dispatch
+			};
+
+			var select = function(selector) {
+			  return typeof selector === "string"
+				  ? new Selection([[document.querySelector(selector)]], [document.documentElement])
+				  : new Selection([[selector]], root);
+			};
+
+			var selectAll = function(selector) {
+			  return typeof selector === "string"
+				  ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
+				  : new Selection([selector == null ? [] : selector], root);
+			};
+
+			var touch = function(node, touches, identifier) {
+			  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
+
+			  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
+				if ((touch = touches[i]).identifier === identifier) {
+				  return point$5(node, touch);
+				}
+			  }
+
+			  return null;
+			};
+
+			var touches = function(node, touches) {
+			  if (touches == null) touches = sourceEvent().touches;
+
+			  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
+				points[i] = point$5(node, touches[i]);
+			  }
+
+			  return points;
+			};
+
+			var emptyOn = dispatch("start", "end", "interrupt");
+			var emptyTween = [];
+
+			var CREATED = 0;
+			var SCHEDULED = 1;
+			var STARTING = 2;
+			var STARTED = 3;
+			var RUNNING = 4;
+			var ENDING = 5;
+			var ENDED = 6;
+
+			var schedule = function(node, name, id, index, group, timing) {
+			  var schedules = node.__transition;
+			  if (!schedules) node.__transition = {};
+			  else if (id in schedules) return;
+			  create(node, id, {
+				name: name,
+				index: index, // For context during callback.
+				group: group, // For context during callback.
+				on: emptyOn,
+				tween: emptyTween,
+				time: timing.time,
+				delay: timing.delay,
+				duration: timing.duration,
+				ease: timing.ease,
+				timer: null,
+				state: CREATED
+			  });
+			};
+
+			function init(node, id) {
+			  var schedule = node.__transition;
+			  if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
+			  return schedule;
+			}
+
+			function set$3(node, id) {
+			  var schedule = node.__transition;
+			  if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
+			  return schedule;
+			}
+
+			function get$1(node, id) {
+			  var schedule = node.__transition;
+			  if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
+			  return schedule;
+			}
+
+			function create(node, id, self) {
+			  var schedules = node.__transition,
+				  tween;
+
+			  // Initialize the self timer when the transition is created.
+			  // Note the actual delay is not known until the first callback!
+			  schedules[id] = self;
+			  self.timer = timer(schedule, 0, self.time);
+
+			  function schedule(elapsed) {
+				self.state = SCHEDULED;
+				self.timer.restart(start, self.delay, self.time);
+
+				// If the elapsed delay is less than our first sleep, start immediately.
+				if (self.delay <= elapsed) start(elapsed - self.delay);
+			  }
+
+			  function start(elapsed) {
+				var i, j, n, o;
+
+				// If the state is not SCHEDULED, then we previously errored on start.
+				if (self.state !== SCHEDULED) return stop();
+
+				for (i in schedules) {
+				  o = schedules[i];
+				  if (o.name !== self.name) continue;
+
+				  // While this element already has a starting transition during this frame,
+				  // defer starting an interrupting transition until that transition has a
+				  // chance to tick (and possibly end); see d3/d3-transition#54!
+				  if (o.state === STARTED) return timeout$1(start);
+
+				  // Interrupt the active transition, if any.
+				  // Dispatch the interrupt event.
+				  if (o.state === RUNNING) {
+					o.state = ENDED;
+					o.timer.stop();
+					o.on.call("interrupt", node, node.__data__, o.index, o.group);
+					delete schedules[i];
+				  }
+
+				  // Cancel any pre-empted transitions. No interrupt event is dispatched
+				  // because the cancelled transitions never started. Note that this also
+				  // removes this transition from the pending list!
+				  else if (+i < id) {
+					o.state = ENDED;
+					o.timer.stop();
+					delete schedules[i];
+				  }
+				}
+
+				// Defer the first tick to end of the current frame; see d3/d3#1576.
+				// Note the transition may be canceled after start and before the first tick!
+				// Note this must be scheduled before the start event; see d3/d3-transition#16!
+				// Assuming this is successful, subsequent callbacks go straight to tick.
+				timeout$1(function() {
+				  if (self.state === STARTED) {
+					self.state = RUNNING;
+					self.timer.restart(tick, self.delay, self.time);
+					tick(elapsed);
+				  }
+				});
+
+				// Dispatch the start event.
+				// Note this must be done before the tween are initialized.
+				self.state = STARTING;
+				self.on.call("start", node, node.__data__, self.index, self.group);
+				if (self.state !== STARTING) return; // interrupted
+				self.state = STARTED;
+
+				// Initialize the tween, deleting null tween.
+				tween = new Array(n = self.tween.length);
+				for (i = 0, j = -1; i < n; ++i) {
+				  if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
+					tween[++j] = o;
+				  }
+				}
+				tween.length = j + 1;
+			  }
+
+			  function tick(elapsed) {
+				var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
+					i = -1,
+					n = tween.length;
+
+				while (++i < n) {
+				  tween[i].call(null, t);
+				}
+
+				// Dispatch the end event.
+				if (self.state === ENDING) {
+				  self.on.call("end", node, node.__data__, self.index, self.group);
+				  stop();
+				}
+			  }
+
+			  function stop() {
+				self.state = ENDED;
+				self.timer.stop();
+				delete schedules[id];
+				for (var i in schedules) return; // eslint-disable-line no-unused-vars
+				delete node.__transition;
+			  }
+			}
+
+			var interrupt = function(node, name) {
+			  var schedules = node.__transition,
+				  schedule,
+				  active,
+				  empty = true,
+				  i;
+
+			  if (!schedules) return;
+
+			  name = name == null ? null : name + "";
+
+			  for (i in schedules) {
+				if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
+				active = schedule.state > STARTING && schedule.state < ENDING;
+				schedule.state = ENDED;
+				schedule.timer.stop();
+				if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
+				delete schedules[i];
+			  }
+
+			  if (empty) delete node.__transition;
+			};
+
+			var selection_interrupt = function(name) {
+			  return this.each(function() {
+				interrupt(this, name);
+			  });
+			};
+
+			function tweenRemove(id, name) {
+			  var tween0, tween1;
+			  return function() {
+				var schedule = set$3(this, id),
+					tween = schedule.tween;
+
+				// If this node shared tween with the previous node,
+				// just assign the updated shared tween and we’re done!
+				// Otherwise, copy-on-write.
+				if (tween !== tween0) {
+				  tween1 = tween0 = tween;
+				  for (var i = 0, n = tween1.length; i < n; ++i) {
+					if (tween1[i].name === name) {
+					  tween1 = tween1.slice();
+					  tween1.splice(i, 1);
+					  break;
+					}
+				  }
+				}
+
+				schedule.tween = tween1;
+			  };
+			}
+
+			function tweenFunction(id, name, value) {
+			  var tween0, tween1;
+			  if (typeof value !== "function") throw new Error;
+			  return function() {
+				var schedule = set$3(this, id),
+					tween = schedule.tween;
+
+				// If this node shared tween with the previous node,
+				// just assign the updated shared tween and we’re done!
+				// Otherwise, copy-on-write.
+				if (tween !== tween0) {
+				  tween1 = (tween0 = tween).slice();
+				  for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
+					if (tween1[i].name === name) {
+					  tween1[i] = t;
+					  break;
+					}
+				  }
+				  if (i === n) tween1.push(t);
+				}
+
+				schedule.tween = tween1;
+			  };
+			}
+
+			var transition_tween = function(name, value) {
+			  var id = this._id;
+
+			  name += "";
+
+			  if (arguments.length < 2) {
+				var tween = get$1(this.node(), id).tween;
+				for (var i = 0, n = tween.length, t; i < n; ++i) {
+				  if ((t = tween[i]).name === name) {
+					return t.value;
+				  }
+				}
+				return null;
+			  }
+
+			  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
+			};
+
+			function tweenValue(transition, name, value) {
+			  var id = transition._id;
+
+			  transition.each(function() {
+				var schedule = set$3(this, id);
+				(schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+			  });
+
+			  return function(node) {
+				return get$1(node, id).value[name];
+			  };
+			}
+
+			var interpolate$1 = function(a, b) {
+			  var c;
+			  return (typeof b === "number" ? interpolateNumber
+				  : b instanceof color ? interpolateRgb
+				  : (c = color(b)) ? (b = c, interpolateRgb)
+				  : interpolateString)(a, b);
+			};
+
+			function attrRemove$1(name) {
+			  return function() {
+				this.removeAttribute(name);
+			  };
+			}
+
+			function attrRemoveNS$1(fullname) {
+			  return function() {
+				this.removeAttributeNS(fullname.space, fullname.local);
+			  };
+			}
+
+			function attrConstant$1(name, interpolate$$1, value1) {
+			  var value00,
+				  interpolate0;
+			  return function() {
+				var value0 = this.getAttribute(name);
+				return value0 === value1 ? null
+					: value0 === value00 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value1);
+			  };
+			}
+
+			function attrConstantNS$1(fullname, interpolate$$1, value1) {
+			  var value00,
+				  interpolate0;
+			  return function() {
+				var value0 = this.getAttributeNS(fullname.space, fullname.local);
+				return value0 === value1 ? null
+					: value0 === value00 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value1);
+			  };
+			}
+
+			function attrFunction$1(name, interpolate$$1, value) {
+			  var value00,
+				  value10,
+				  interpolate0;
+			  return function() {
+				var value0, value1 = value(this);
+				if (value1 == null) return void this.removeAttribute(name);
+				value0 = this.getAttribute(name);
+				return value0 === value1 ? null
+					: value0 === value00 && value1 === value10 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+			  };
+			}
+
+			function attrFunctionNS$1(fullname, interpolate$$1, value) {
+			  var value00,
+				  value10,
+				  interpolate0;
+			  return function() {
+				var value0, value1 = value(this);
+				if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
+				value0 = this.getAttributeNS(fullname.space, fullname.local);
+				return value0 === value1 ? null
+					: value0 === value00 && value1 === value10 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+			  };
+			}
+
+			var transition_attr = function(name, value) {
+			  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1;
+			  return this.attrTween(name, typeof value === "function"
+				  ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
+				  : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
+				  : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
+			};
+
+			function attrTweenNS(fullname, value) {
+			  function tween() {
+				var node = this, i = value.apply(node, arguments);
+				return i && function(t) {
+				  node.setAttributeNS(fullname.space, fullname.local, i(t));
+				};
+			  }
+			  tween._value = value;
+			  return tween;
+			}
+
+			function attrTween(name, value) {
+			  function tween() {
+				var node = this, i = value.apply(node, arguments);
+				return i && function(t) {
+				  node.setAttribute(name, i(t));
+				};
+			  }
+			  tween._value = value;
+			  return tween;
+			}
+
+			var transition_attrTween = function(name, value) {
+			  var key = "attr." + name;
+			  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+			  if (value == null) return this.tween(key, null);
+			  if (typeof value !== "function") throw new Error;
+			  var fullname = namespace(name);
+			  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+			};
+
+			function delayFunction(id, value) {
+			  return function() {
+				init(this, id).delay = +value.apply(this, arguments);
+			  };
+			}
+
+			function delayConstant(id, value) {
+			  return value = +value, function() {
+				init(this, id).delay = value;
+			  };
+			}
+
+			var transition_delay = function(value) {
+			  var id = this._id;
+
+			  return arguments.length
+				  ? this.each((typeof value === "function"
+					  ? delayFunction
+					  : delayConstant)(id, value))
+				  : get$1(this.node(), id).delay;
+			};
+
+			function durationFunction(id, value) {
+			  return function() {
+				set$3(this, id).duration = +value.apply(this, arguments);
+			  };
+			}
+
+			function durationConstant(id, value) {
+			  return value = +value, function() {
+				set$3(this, id).duration = value;
+			  };
+			}
+
+			var transition_duration = function(value) {
+			  var id = this._id;
+
+			  return arguments.length
+				  ? this.each((typeof value === "function"
+					  ? durationFunction
+					  : durationConstant)(id, value))
+				  : get$1(this.node(), id).duration;
+			};
+
+			function easeConstant(id, value) {
+			  if (typeof value !== "function") throw new Error;
+			  return function() {
+				set$3(this, id).ease = value;
+			  };
+			}
+
+			var transition_ease = function(value) {
+			  var id = this._id;
+
+			  return arguments.length
+				  ? this.each(easeConstant(id, value))
+				  : get$1(this.node(), id).ease;
+			};
+
+			var transition_filter = function(match) {
+			  if (typeof match !== "function") match = matcher$1(match);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+				  if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+					subgroup.push(node);
+				  }
+				}
+			  }
+
+			  return new Transition(subgroups, this._parents, this._name, this._id);
+			};
+
+			var transition_merge = function(transition) {
+			  if (transition._id !== this._id) throw new Error;
+
+			  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+				for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+				  if (node = group0[i] || group1[i]) {
+					merge[i] = node;
+				  }
+				}
+			  }
+
+			  for (; j < m0; ++j) {
+				merges[j] = groups0[j];
+			  }
+
+			  return new Transition(merges, this._parents, this._name, this._id);
+			};
+
+			function start$1(name) {
+			  return (name + "").trim().split(/^|\s+/).every(function(t) {
+				var i = t.indexOf(".");
+				if (i >= 0) t = t.slice(0, i);
+				return !t || t === "start";
+			  });
+			}
+
+			function onFunction(id, name, listener) {
+			  var on0, on1, sit = start$1(name) ? init : set$3;
+			  return function() {
+				var schedule = sit(this, id),
+					on = schedule.on;
+
+				// If this node shared a dispatch with the previous node,
+				// just assign the updated shared dispatch and we’re done!
+				// Otherwise, copy-on-write.
+				if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+
+				schedule.on = on1;
+			  };
+			}
+
+			var transition_on = function(name, listener) {
+			  var id = this._id;
+
+			  return arguments.length < 2
+				  ? get$1(this.node(), id).on.on(name)
+				  : this.each(onFunction(id, name, listener));
+			};
+
+			function removeFunction(id) {
+			  return function() {
+				var parent = this.parentNode;
+				for (var i in this.__transition) if (+i !== id) return;
+				if (parent) parent.removeChild(this);
+			  };
+			}
+
+			var transition_remove = function() {
+			  return this.on("end.remove", removeFunction(this._id));
+			};
+
+			var transition_select = function(select$$1) {
+			  var name = this._name,
+				  id = this._id;
+
+			  if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+				  if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
+					if ("__data__" in node) subnode.__data__ = node.__data__;
+					subgroup[i] = subnode;
+					schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
+				  }
+				}
+			  }
+
+			  return new Transition(subgroups, this._parents, name, id);
+			};
+
+			var transition_selectAll = function(select$$1) {
+			  var name = this._name,
+				  id = this._id;
+
+			  if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
+
+			  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+				  if (node = group[i]) {
+					for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
+					  if (child = children[k]) {
+						schedule(child, name, id, k, children, inherit);
+					  }
+					}
+					subgroups.push(children);
+					parents.push(node);
+				  }
+				}
+			  }
+
+			  return new Transition(subgroups, parents, name, id);
+			};
+
+			var Selection$1 = selection.prototype.constructor;
+
+			var transition_selection = function() {
+			  return new Selection$1(this._groups, this._parents);
+			};
+
+			function styleRemove$1(name, interpolate$$1) {
+			  var value00,
+				  value10,
+				  interpolate0;
+			  return function() {
+				var style = window(this).getComputedStyle(this, null),
+					value0 = style.getPropertyValue(name),
+					value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+				return value0 === value1 ? null
+					: value0 === value00 && value1 === value10 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+			  };
+			}
+
+			function styleRemoveEnd(name) {
+			  return function() {
+				this.style.removeProperty(name);
+			  };
+			}
+
+			function styleConstant$1(name, interpolate$$1, value1) {
+			  var value00,
+				  interpolate0;
+			  return function() {
+				var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);
+				return value0 === value1 ? null
+					: value0 === value00 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value1);
+			  };
+			}
+
+			function styleFunction$1(name, interpolate$$1, value) {
+			  var value00,
+				  value10,
+				  interpolate0;
+			  return function() {
+				var style = window(this).getComputedStyle(this, null),
+					value0 = style.getPropertyValue(name),
+					value1 = value(this);
+				if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+				return value0 === value1 ? null
+					: value0 === value00 && value1 === value10 ? interpolate0
+					: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+			  };
+			}
+
+			var transition_style = function(name, value, priority) {
+			  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1;
+			  return value == null ? this
+					  .styleTween(name, styleRemove$1(name, i))
+					  .on("end.style." + name, styleRemoveEnd(name))
+				  : this.styleTween(name, typeof value === "function"
+					  ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
+					  : styleConstant$1(name, i, value), priority);
+			};
+
+			function styleTween(name, value, priority) {
+			  function tween() {
+				var node = this, i = value.apply(node, arguments);
+				return i && function(t) {
+				  node.style.setProperty(name, i(t), priority);
+				};
+			  }
+			  tween._value = value;
+			  return tween;
+			}
+
+			var transition_styleTween = function(name, value, priority) {
+			  var key = "style." + (name += "");
+			  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+			  if (value == null) return this.tween(key, null);
+			  if (typeof value !== "function") throw new Error;
+			  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+			};
+
+			function textConstant$1(value) {
+			  return function() {
+				this.textContent = value;
+			  };
+			}
+
+			function textFunction$1(value) {
+			  return function() {
+				var value1 = value(this);
+				this.textContent = value1 == null ? "" : value1;
+			  };
+			}
+
+			var transition_text = function(value) {
+			  return this.tween("text", typeof value === "function"
+				  ? textFunction$1(tweenValue(this, "text", value))
+				  : textConstant$1(value == null ? "" : value + ""));
+			};
+
+			var transition_transition = function() {
+			  var name = this._name,
+				  id0 = this._id,
+				  id1 = newId();
+
+			  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+				  if (node = group[i]) {
+					var inherit = get$1(node, id0);
+					schedule(node, name, id1, i, group, {
+					  time: inherit.time + inherit.delay + inherit.duration,
+					  delay: 0,
+					  duration: inherit.duration,
+					  ease: inherit.ease
+					});
+				  }
+				}
+			  }
+
+			  return new Transition(groups, this._parents, name, id1);
+			};
+
+			var id = 0;
+
+			function Transition(groups, parents, name, id) {
+			  this._groups = groups;
+			  this._parents = parents;
+			  this._name = name;
+			  this._id = id;
+			}
+
+			function transition(name) {
+			  return selection().transition(name);
+			}
+
+			function newId() {
+			  return ++id;
+			}
+
+			var selection_prototype = selection.prototype;
+
+			Transition.prototype = transition.prototype = {
+			  constructor: Transition,
+			  select: transition_select,
+			  selectAll: transition_selectAll,
+			  filter: transition_filter,
+			  merge: transition_merge,
+			  selection: transition_selection,
+			  transition: transition_transition,
+			  call: selection_prototype.call,
+			  nodes: selection_prototype.nodes,
+			  node: selection_prototype.node,
+			  size: selection_prototype.size,
+			  empty: selection_prototype.empty,
+			  each: selection_prototype.each,
+			  on: transition_on,
+			  attr: transition_attr,
+			  attrTween: transition_attrTween,
+			  style: transition_style,
+			  styleTween: transition_styleTween,
+			  text: transition_text,
+			  remove: transition_remove,
+			  tween: transition_tween,
+			  delay: transition_delay,
+			  duration: transition_duration,
+			  ease: transition_ease
+			};
+
+			var defaultTiming = {
+			  time: null, // Set on use.
+			  delay: 0,
+			  duration: 250,
+			  ease: cubicInOut
+			};
+
+			function inherit(node, id) {
+			  var timing;
+			  while (!(timing = node.__transition) || !(timing = timing[id])) {
+				if (!(node = node.parentNode)) {
+				  return defaultTiming.time = now(), defaultTiming;
+				}
+			  }
+			  return timing;
+			}
+
+			var selection_transition = function(name) {
+			  var id,
+				  timing;
+
+			  if (name instanceof Transition) {
+				id = name._id, name = name._name;
+			  } else {
+				id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
+			  }
+
+			  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+				for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+				  if (node = group[i]) {
+					schedule(node, name, id, i, group, timing || inherit(node, id));
+				  }
+				}
+			  }
+
+			  return new Transition(groups, this._parents, name, id);
+			};
+
+			selection.prototype.interrupt = selection_interrupt;
+			selection.prototype.transition = selection_transition;
+
+			var root$1 = [null];
+
+			var active = function(node, name) {
+			  var schedules = node.__transition,
+				  schedule,
+				  i;
+
+			  if (schedules) {
+				name = name == null ? null : name + "";
+				for (i in schedules) {
+				  if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
+					return new Transition([[node]], root$1, name, +i);
+				  }
+				}
+			  }
+
+			  return null;
+			};
+
+			var slice$4 = Array.prototype.slice;
+
+			var identity$5 = function(x) {
+			  return x;
+			};
+
+			var top = 1;
+			var right = 2;
+			var bottom = 3;
+			var left = 4;
+			var epsilon$2 = 1e-6;
+
+			function translateX(scale0, scale1, d) {
+			  var x = scale0(d);
+			  return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
+			}
+
+			function translateY(scale0, scale1, d) {
+			  var y = scale0(d);
+			  return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
+			}
+
+			function center(scale) {
+			  var offset = scale.bandwidth() / 2;
+			  if (scale.round()) offset = Math.round(offset);
+			  return function(d) {
+				return scale(d) + offset;
+			  };
+			}
+
+			function entering() {
+			  return !this.__axis;
+			}
+
+			function axis(orient, scale) {
+			  var tickArguments = [],
+				  tickValues = null,
+				  tickFormat = null,
+				  tickSizeInner = 6,
+				  tickSizeOuter = 6,
+				  tickPadding = 3;
+
+			  function axis(context) {
+				var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
+					format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,
+					spacing = Math.max(tickSizeInner, 0) + tickPadding,
+					transform = orient === top || orient === bottom ? translateX : translateY,
+					range = scale.range(),
+					range0 = range[0] + 0.5,
+					range1 = range[range.length - 1] + 0.5,
+					position = (scale.bandwidth ? center : identity$5)(scale.copy()),
+					selection = context.selection ? context.selection() : context,
+					path = selection.selectAll(".domain").data([null]),
+					tick = selection.selectAll(".tick").data(values, scale).order(),
+					tickExit = tick.exit(),
+					tickEnter = tick.enter().append("g").attr("class", "tick"),
+					line = tick.select("line"),
+					text = tick.select("text"),
+					k = orient === top || orient === left ? -1 : 1,
+					x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
+
+				path = path.merge(path.enter().insert("path", ".tick")
+					.attr("class", "domain")
+					.attr("stroke", "#000"));
+
+				tick = tick.merge(tickEnter);
+
+				line = line.merge(tickEnter.append("line")
+					.attr("stroke", "#000")
+					.attr(x + "2", k * tickSizeInner)
+					.attr(y + "1", 0.5)
+					.attr(y + "2", 0.5));
+
+				text = text.merge(tickEnter.append("text")
+					.attr("fill", "#000")
+					.attr(x, k * spacing)
+					.attr(y, 0.5)
+					.attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
+
+				if (context !== selection) {
+				  path = path.transition(context);
+				  tick = tick.transition(context);
+				  line = line.transition(context);
+				  text = text.transition(context);
+
+				  tickExit = tickExit.transition(context)
+					  .attr("opacity", epsilon$2)
+					  .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
+
+				  tickEnter
+					  .attr("opacity", epsilon$2)
+					  .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
+				}
+
+				tickExit.remove();
+
+				path
+					.attr("d", orient === left || orient == right
+						? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
+						: "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
+
+				tick
+					.attr("opacity", 1)
+					.attr("transform", function(d) { return transform(position, position, d); });
+
+				line
+					.attr(x + "2", k * tickSizeInner);
+
+				text
+					.attr(x, k * spacing)
+					.text(format);
+
+				selection.filter(entering)
+					.attr("fill", "none")
+					.attr("font-size", 10)
+					.attr("font-family", "sans-serif")
+					.attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
+
+				selection
+					.each(function() { this.__axis = position; });
+			  }
+
+			  axis.scale = function(_) {
+				return arguments.length ? (scale = _, axis) : scale;
+			  };
+
+			  axis.ticks = function() {
+				return tickArguments = slice$4.call(arguments), axis;
+			  };
+
+			  axis.tickArguments = function(_) {
+				return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();
+			  };
+
+			  axis.tickValues = function(_) {
+				return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();
+			  };
+
+			  axis.tickFormat = function(_) {
+				return arguments.length ? (tickFormat = _, axis) : tickFormat;
+			  };
+
+			  axis.tickSize = function(_) {
+				return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
+			  };
+
+			  axis.tickSizeInner = function(_) {
+				return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
+			  };
+
+			  axis.tickSizeOuter = function(_) {
+				return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
+			  };
+
+			  axis.tickPadding = function(_) {
+				return arguments.length ? (tickPadding = +_, axis) : tickPadding;
+			  };
+
+			  return axis;
+			}
+
+			function axisTop(scale) {
+			  return axis(top, scale);
+			}
+
+			function axisRight(scale) {
+			  return axis(right, scale);
+			}
+
+			function axisBottom(scale) {
+			  return axis(bottom, scale);
+			}
+
+			function axisLeft(scale) {
+			  return axis(left, scale);
+			}
+
+			function defaultSeparation(a, b) {
+			  return a.parent === b.parent ? 1 : 2;
+			}
+
+			function meanX(children) {
+			  return children.reduce(meanXReduce, 0) / children.length;
+			}
+
+			function meanXReduce(x, c) {
+			  return x + c.x;
+			}
+
+			function maxY(children) {
+			  return 1 + children.reduce(maxYReduce, 0);
+			}
+
+			function maxYReduce(y, c) {
+			  return Math.max(y, c.y);
+			}
+
+			function leafLeft(node) {
+			  var children;
+			  while (children = node.children) node = children[0];
+			  return node;
+			}
+
+			function leafRight(node) {
+			  var children;
+			  while (children = node.children) node = children[children.length - 1];
+			  return node;
+			}
+
+			var cluster = function() {
+			  var separation = defaultSeparation,
+				  dx = 1,
+				  dy = 1,
+				  nodeSize = false;
+
+			  function cluster(root) {
+				var previousNode,
+					x = 0;
+
+				// First walk, computing the initial x & y values.
+				root.eachAfter(function(node) {
+				  var children = node.children;
+				  if (children) {
+					node.x = meanX(children);
+					node.y = maxY(children);
+				  } else {
+					node.x = previousNode ? x += separation(node, previousNode) : 0;
+					node.y = 0;
+					previousNode = node;
+				  }
+				});
+
+				var left = leafLeft(root),
+					right = leafRight(root),
+					x0 = left.x - separation(left, right) / 2,
+					x1 = right.x + separation(right, left) / 2;
+
+				// Second walk, normalizing x & y to the desired size.
+				return root.eachAfter(nodeSize ? function(node) {
+				  node.x = (node.x - root.x) * dx;
+				  node.y = (root.y - node.y) * dy;
+				} : function(node) {
+				  node.x = (node.x - x0) / (x1 - x0) * dx;
+				  node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
+				});
+			  }
+
+			  cluster.separation = function(x) {
+				return arguments.length ? (separation = x, cluster) : separation;
+			  };
+
+			  cluster.size = function(x) {
+				return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
+			  };
+
+			  cluster.nodeSize = function(x) {
+				return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
+			  };
+
+			  return cluster;
+			};
+
+			var node_each = function(callback) {
+			  var node = this, current, next = [node], children, i, n;
+			  do {
+				current = next.reverse(), next = [];
+				while (node = current.pop()) {
+				  callback(node), children = node.children;
+				  if (children) for (i = 0, n = children.length; i < n; ++i) {
+					next.push(children[i]);
+				  }
+				}
+			  } while (next.length);
+			  return this;
+			};
+
+			var node_eachBefore = function(callback) {
+			  var node = this, nodes = [node], children, i;
+			  while (node = nodes.pop()) {
+				callback(node), children = node.children;
+				if (children) for (i = children.length - 1; i >= 0; --i) {
+				  nodes.push(children[i]);
+				}
+			  }
+			  return this;
+			};
+
+			var node_eachAfter = function(callback) {
+			  var node = this, nodes = [node], next = [], children, i, n;
+			  while (node = nodes.pop()) {
+				next.push(node), children = node.children;
+				if (children) for (i = 0, n = children.length; i < n; ++i) {
+				  nodes.push(children[i]);
+				}
+			  }
+			  while (node = next.pop()) {
+				callback(node);
+			  }
+			  return this;
+			};
+
+			var node_sum = function(value) {
+			  return this.eachAfter(function(node) {
+				var sum = +value(node.data) || 0,
+					children = node.children,
+					i = children && children.length;
+				while (--i >= 0) sum += children[i].value;
+				node.value = sum;
+			  });
+			};
+
+			var node_sort = function(compare) {
+			  return this.eachBefore(function(node) {
+				if (node.children) {
+				  node.children.sort(compare);
+				}
+			  });
+			};
+
+			var node_path = function(end) {
+			  var start = this,
+				  ancestor = leastCommonAncestor(start, end),
+				  nodes = [start];
+			  while (start !== ancestor) {
+				start = start.parent;
+				nodes.push(start);
+			  }
+			  var k = nodes.length;
+			  while (end !== ancestor) {
+				nodes.splice(k, 0, end);
+				end = end.parent;
+			  }
+			  return nodes;
+			};
+
+			function leastCommonAncestor(a, b) {
+			  if (a === b) return a;
+			  var aNodes = a.ancestors(),
+				  bNodes = b.ancestors(),
+				  c = null;
+			  a = aNodes.pop();
+			  b = bNodes.pop();
+			  while (a === b) {
+				c = a;
+				a = aNodes.pop();
+				b = bNodes.pop();
+			  }
+			  return c;
+			}
+
+			var node_ancestors = function() {
+			  var node = this, nodes = [node];
+			  while (node = node.parent) {
+				nodes.push(node);
+			  }
+			  return nodes;
+			};
+
+			var node_descendants = function() {
+			  var nodes = [];
+			  this.each(function(node) {
+				nodes.push(node);
+			  });
+			  return nodes;
+			};
+
+			var node_leaves = function() {
+			  var leaves = [];
+			  this.eachBefore(function(node) {
+				if (!node.children) {
+				  leaves.push(node);
+				}
+			  });
+			  return leaves;
+			};
+
+			var node_links = function() {
+			  var root = this, links = [];
+			  root.each(function(node) {
+				if (node !== root) { // Don’t include the root’s parent, if any.
+				  links.push({source: node.parent, target: node});
+				}
+			  });
+			  return links;
+			};
+
+			function hierarchy(data, children) {
+			  var root = new Node(data),
+				  valued = +data.value && (root.value = data.value),
+				  node,
+				  nodes = [root],
+				  child,
+				  childs,
+				  i,
+				  n;
+
+			  if (children == null) children = defaultChildren;
+
+			  while (node = nodes.pop()) {
+				if (valued) node.value = +node.data.value;
+				if ((childs = children(node.data)) && (n = childs.length)) {
+				  node.children = new Array(n);
+				  for (i = n - 1; i >= 0; --i) {
+					nodes.push(child = node.children[i] = new Node(childs[i]));
+					child.parent = node;
+					child.depth = node.depth + 1;
+				  }
+				}
+			  }
+
+			  return root.eachBefore(computeHeight);
+			}
+
+			function node_copy() {
+			  return hierarchy(this).eachBefore(copyData);
+			}
+
+			function defaultChildren(d) {
+			  return d.children;
+			}
+
+			function copyData(node) {
+			  node.data = node.data.data;
+			}
+
+			function computeHeight(node) {
+			  var height = 0;
+			  do node.height = height;
+			  while ((node = node.parent) && (node.height < ++height));
+			}
+
+			function Node(data) {
+			  this.data = data;
+			  this.depth =
+			  this.height = 0;
+			  this.parent = null;
+			}
+
+			Node.prototype = hierarchy.prototype = {
+			  constructor: Node,
+			  each: node_each,
+			  eachAfter: node_eachAfter,
+			  eachBefore: node_eachBefore,
+			  sum: node_sum,
+			  sort: node_sort,
+			  path: node_path,
+			  ancestors: node_ancestors,
+			  descendants: node_descendants,
+			  leaves: node_leaves,
+			  links: node_links,
+			  copy: node_copy
+			};
+
+			function Node$2(value) {
+			  this._ = value;
+			  this.next = null;
+			}
+
+			var shuffle$1 = function(array) {
+			  var i,
+				  n = (array = array.slice()).length,
+				  head = null,
+				  node = head;
+
+			  while (n) {
+				var next = new Node$2(array[n - 1]);
+				if (node) node = node.next = next;
+				else node = head = next;
+				array[i] = array[--n];
+			  }
+
+			  return {
+				head: head,
+				tail: node
+			  };
+			};
+
+			var enclose = function(circles) {
+			  return encloseN(shuffle$1(circles), []);
+			};
+
+			function encloses(a, b) {
+			  var dx = b.x - a.x,
+				  dy = b.y - a.y,
+				  dr = a.r - b.r;
+			  return dr * dr + 1e-6 > dx * dx + dy * dy;
+			}
+
+			// Returns the smallest circle that contains circles L and intersects circles B.
+			function encloseN(L, B) {
+			  var circle,
+				  l0 = null,
+				  l1 = L.head,
+				  l2,
+				  p1;
+
+			  switch (B.length) {
+				case 1: circle = enclose1(B[0]); break;
+				case 2: circle = enclose2(B[0], B[1]); break;
+				case 3: circle = enclose3(B[0], B[1], B[2]); break;
+			  }
+
+			  while (l1) {
+				p1 = l1._, l2 = l1.next;
+				if (!circle || !encloses(circle, p1)) {
+
+				  // Temporarily truncate L before l1.
+				  if (l0) L.tail = l0, l0.next = null;
+				  else L.head = L.tail = null;
+
+				  B.push(p1);
+				  circle = encloseN(L, B); // Note: reorders L!
+				  B.pop();
+
+				  // Move l1 to the front of L and reconnect the truncated list L.
+				  if (L.head) l1.next = L.head, L.head = l1;
+				  else l1.next = null, L.head = L.tail = l1;
+				  l0 = L.tail, l0.next = l2;
+
+				} else {
+				  l0 = l1;
+				}
+				l1 = l2;
+			  }
+
+			  L.tail = l0;
+			  return circle;
+			}
+
+			function enclose1(a) {
+			  return {
+				x: a.x,
+				y: a.y,
+				r: a.r
+			  };
+			}
+
+			function enclose2(a, b) {
+			  var x1 = a.x, y1 = a.y, r1 = a.r,
+				  x2 = b.x, y2 = b.y, r2 = b.r,
+				  x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
+				  l = Math.sqrt(x21 * x21 + y21 * y21);
+			  return {
+				x: (x1 + x2 + x21 / l * r21) / 2,
+				y: (y1 + y2 + y21 / l * r21) / 2,
+				r: (l + r1 + r2) / 2
+			  };
+			}
+
+			function enclose3(a, b, c) {
+			  var x1 = a.x, y1 = a.y, r1 = a.r,
+				  x2 = b.x, y2 = b.y, r2 = b.r,
+				  x3 = c.x, y3 = c.y, r3 = c.r,
+				  a2 = 2 * (x1 - x2),
+				  b2 = 2 * (y1 - y2),
+				  c2 = 2 * (r2 - r1),
+				  d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
+				  a3 = 2 * (x1 - x3),
+				  b3 = 2 * (y1 - y3),
+				  c3 = 2 * (r3 - r1),
+				  d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
+				  ab = a3 * b2 - a2 * b3,
+				  xa = (b2 * d3 - b3 * d2) / ab - x1,
+				  xb = (b3 * c2 - b2 * c3) / ab,
+				  ya = (a3 * d2 - a2 * d3) / ab - y1,
+				  yb = (a2 * c3 - a3 * c2) / ab,
+				  A = xb * xb + yb * yb - 1,
+				  B = 2 * (xa * xb + ya * yb + r1),
+				  C = xa * xa + ya * ya - r1 * r1,
+				  r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
+			  return {
+				x: xa + xb * r + x1,
+				y: ya + yb * r + y1,
+				r: r
+			  };
+			}
+
+			function place(a, b, c) {
+			  var ax = a.x,
+				  ay = a.y,
+				  da = b.r + c.r,
+				  db = a.r + c.r,
+				  dx = b.x - ax,
+				  dy = b.y - ay,
+				  dc = dx * dx + dy * dy;
+			  if (dc) {
+				var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
+					y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
+				c.x = ax + x * dx + y * dy;
+				c.y = ay + x * dy - y * dx;
+			  } else {
+				c.x = ax + db;
+				c.y = ay;
+			  }
+			}
+
+			function intersects(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;
+			}
+
+			function distance2(circle, x, y) {
+			  var dx = circle.x - x,
+				  dy = circle.y - y;
+			  return dx * dx + dy * dy;
+			}
+
+			function Node$1(circle) {
+			  this._ = circle;
+			  this.next = null;
+			  this.previous = null;
+			}
+
+			function packEnclose(circles) {
+			  if (!(n = circles.length)) return 0;
+
+			  var a, b, c, n;
+
+			  // Place the first circle.
+			  a = circles[0], a.x = 0, a.y = 0;
+			  if (!(n > 1)) return a.r;
+
+			  // Place the second circle.
+			  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
+			  if (!(n > 2)) return a.r + b.r;
+
+			  // Place the third circle.
+			  place(b, a, c = circles[2]);
+
+			  // Initialize the weighted centroid.
+			  var aa = a.r * a.r,
+				  ba = b.r * b.r,
+				  ca = c.r * c.r,
+				  oa = aa + ba + ca,
+				  ox = aa * a.x + ba * b.x + ca * c.x,
+				  oy = aa * a.y + ba * b.y + ca * c.y,
+				  cx, cy, i, j, k, sj, sk;
+
+			  // Initialize the front-chain using the first three circles a, b and c.
+			  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
+			  a.next = c.previous = b;
+			  b.next = a.previous = c;
+			  c.next = b.previous = a;
+
+			  // Attempt to place each remaining circle…
+			  pack: for (i = 3; i < n; ++i) {
+				place(a._, b._, c = circles[i]), c = new Node$1(c);
+
+				// If there are only three elements in the front-chain…
+				if ((k = a.previous) === (j = b.next)) {
+				  // If the new circle intersects the third circle,
+				  // rotate the front chain to try the next position.
+				  if (intersects(j._, c._)) {
+					a = b, b = j, --i;
+					continue pack;
+				  }
+				}
+
+				// Find the closest intersecting circle on the front-chain, if any.
+				else {
+				  sj = j._.r, sk = k._.r;
+				  do {
+					if (sj <= sk) {
+					  if (intersects(j._, c._)) {
+						b = j, a.next = b, b.previous = a, --i;
+						continue pack;
+					  }
+					  j = j.next, sj += j._.r;
+					} else {
+					  if (intersects(k._, c._)) {
+						a = k, a.next = b, b.previous = a, --i;
+						continue pack;
+					  }
+					  k = k.previous, sk += k._.r;
+					}
+				  } while (j !== k.next);
+				}
+
+				// Success! Insert the new circle c between a and b.
+				c.previous = a, c.next = b, a.next = b.previous = b = c;
+
+				// Update the weighted centroid.
+				oa += ca = c._.r * c._.r;
+				ox += ca * c._.x;
+				oy += ca * c._.y;
+
+				// Compute the new closest circle a to centroid.
+				aa = distance2(a._, cx = ox / oa, cy = oy / oa);
+				while ((c = c.next) !== b) {
+				  if ((ca = distance2(c._, cx, cy)) < aa) {
+					a = c, aa = ca;
+				  }
+				}
+				b = a.next;
+			  }
+
+			  // Compute the enclosing circle of the front chain.
+			  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
+
+			  // Translate the circles to put the enclosing circle around the origin.
+			  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
+
+			  return c.r;
+			}
+
+			var siblings = function(circles) {
+			  packEnclose(circles);
+			  return circles;
+			};
+
+			function optional(f) {
+			  return f == null ? null : required(f);
+			}
+
+			function required(f) {
+			  if (typeof f !== "function") throw new Error;
+			  return f;
+			}
+
+			function constantZero() {
+			  return 0;
+			}
+
+			var constant$6 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function defaultRadius(d) {
+			  return Math.sqrt(d.value);
+			}
+
+			var index = function() {
+			  var radius = null,
+				  dx = 1,
+				  dy = 1,
+				  padding = constantZero;
+
+			  function pack(root) {
+				root.x = dx / 2, root.y = dy / 2;
+				if (radius) {
+				  root.eachBefore(radiusLeaf(radius))
+					  .eachAfter(packChildren(padding, 0.5))
+					  .eachBefore(translateChild(1));
+				} else {
+				  root.eachBefore(radiusLeaf(defaultRadius))
+					  .eachAfter(packChildren(constantZero, 1))
+					  .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
+					  .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
+				}
+				return root;
+			  }
+
+			  pack.radius = function(x) {
+				return arguments.length ? (radius = optional(x), pack) : radius;
+			  };
+
+			  pack.size = function(x) {
+				return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
+			  };
+
+			  pack.padding = function(x) {
+				return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding;
+			  };
+
+			  return pack;
+			};
+
+			function radiusLeaf(radius) {
+			  return function(node) {
+				if (!node.children) {
+				  node.r = Math.max(0, +radius(node) || 0);
+				}
+			  };
+			}
+
+			function packChildren(padding, k) {
+			  return function(node) {
+				if (children = node.children) {
+				  var children,
+					  i,
+					  n = children.length,
+					  r = padding(node) * k || 0,
+					  e;
+
+				  if (r) for (i = 0; i < n; ++i) children[i].r += r;
+				  e = packEnclose(children);
+				  if (r) for (i = 0; i < n; ++i) children[i].r -= r;
+				  node.r = e + r;
+				}
+			  };
+			}
+
+			function translateChild(k) {
+			  return function(node) {
+				var parent = node.parent;
+				node.r *= k;
+				if (parent) {
+				  node.x = parent.x + k * node.x;
+				  node.y = parent.y + k * node.y;
+				}
+			  };
+			}
+
+			var roundNode = function(node) {
+			  node.x0 = Math.round(node.x0);
+			  node.y0 = Math.round(node.y0);
+			  node.x1 = Math.round(node.x1);
+			  node.y1 = Math.round(node.y1);
+			};
+
+			var treemapDice = function(parent, x0, y0, x1, y1) {
+			  var nodes = parent.children,
+				  node,
+				  i = -1,
+				  n = nodes.length,
+				  k = parent.value && (x1 - x0) / parent.value;
+
+			  while (++i < n) {
+				node = nodes[i], node.y0 = y0, node.y1 = y1;
+				node.x0 = x0, node.x1 = x0 += node.value * k;
+			  }
+			};
+
+			var partition = function() {
+			  var dx = 1,
+				  dy = 1,
+				  padding = 0,
+				  round = false;
+
+			  function partition(root) {
+				var n = root.height + 1;
+				root.x0 =
+				root.y0 = padding;
+				root.x1 = dx;
+				root.y1 = dy / n;
+				root.eachBefore(positionNode(dy, n));
+				if (round) root.eachBefore(roundNode);
+				return root;
+			  }
+
+			  function positionNode(dy, n) {
+				return function(node) {
+				  if (node.children) {
+					treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
+				  }
+				  var x0 = node.x0,
+					  y0 = node.y0,
+					  x1 = node.x1 - padding,
+					  y1 = node.y1 - padding;
+				  if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+				  if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+				  node.x0 = x0;
+				  node.y0 = y0;
+				  node.x1 = x1;
+				  node.y1 = y1;
+				};
+			  }
+
+			  partition.round = function(x) {
+				return arguments.length ? (round = !!x, partition) : round;
+			  };
+
+			  partition.size = function(x) {
+				return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
+			  };
+
+			  partition.padding = function(x) {
+				return arguments.length ? (padding = +x, partition) : padding;
+			  };
+
+			  return partition;
+			};
+
+			var keyPrefix$1 = "$";
+			var preroot = {depth: -1};
+			var ambiguous = {};
+
+			function defaultId(d) {
+			  return d.id;
+			}
+
+			function defaultParentId(d) {
+			  return d.parentId;
+			}
+
+			var stratify = function() {
+			  var id = defaultId,
+				  parentId = defaultParentId;
+
+			  function stratify(data) {
+				var d,
+					i,
+					n = data.length,
+					root,
+					parent,
+					node,
+					nodes = new Array(n),
+					nodeId,
+					nodeKey,
+					nodeByKey = {};
+
+				for (i = 0; i < n; ++i) {
+				  d = data[i], node = nodes[i] = new Node(d);
+				  if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
+					nodeKey = keyPrefix$1 + (node.id = nodeId);
+					nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
+				  }
+				}
+
+				for (i = 0; i < n; ++i) {
+				  node = nodes[i], nodeId = parentId(data[i], i, data);
+				  if (nodeId == null || !(nodeId += "")) {
+					if (root) throw new Error("multiple roots");
+					root = node;
+				  } else {
+					parent = nodeByKey[keyPrefix$1 + nodeId];
+					if (!parent) throw new Error("missing: " + nodeId);
+					if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
+					if (parent.children) parent.children.push(node);
+					else parent.children = [node];
+					node.parent = parent;
+				  }
+				}
+
+				if (!root) throw new Error("no root");
+				root.parent = preroot;
+				root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
+				root.parent = null;
+				if (n > 0) throw new Error("cycle");
+
+				return root;
+			  }
+
+			  stratify.id = function(x) {
+				return arguments.length ? (id = required(x), stratify) : id;
+			  };
+
+			  stratify.parentId = function(x) {
+				return arguments.length ? (parentId = required(x), stratify) : parentId;
+			  };
+
+			  return stratify;
+			};
+
+			function defaultSeparation$1(a, b) {
+			  return a.parent === b.parent ? 1 : 2;
+			}
+
+			// function radialSeparation(a, b) {
+			//   return (a.parent === b.parent ? 1 : 2) / a.depth;
+			// }
+
+			// This function is used to traverse the left contour of a subtree (or
+			// subforest). It returns the successor of v on this contour. This successor is
+			// either given by the leftmost child of v or by the thread of v. The function
+			// returns null if and only if v is on the highest level of its subtree.
+			function nextLeft(v) {
+			  var children = v.children;
+			  return children ? children[0] : v.t;
+			}
+
+			// This function works analogously to nextLeft.
+			function nextRight(v) {
+			  var children = v.children;
+			  return children ? children[children.length - 1] : v.t;
+			}
+
+			// Shifts the current subtree rooted at w+. This is done by increasing
+			// prelim(w+) and mod(w+) by shift.
+			function moveSubtree(wm, wp, shift) {
+			  var change = shift / (wp.i - wm.i);
+			  wp.c -= change;
+			  wp.s += shift;
+			  wm.c += change;
+			  wp.z += shift;
+			  wp.m += shift;
+			}
+
+			// All other shifts, applied to the smaller subtrees between w- and w+, are
+			// performed by this function. To prepare the shifts, we have to adjust
+			// change(w+), shift(w+), and change(w-).
+			function executeShifts(v) {
+			  var shift = 0,
+				  change = 0,
+				  children = v.children,
+				  i = children.length,
+				  w;
+			  while (--i >= 0) {
+				w = children[i];
+				w.z += shift;
+				w.m += shift;
+				shift += w.s + (change += w.c);
+			  }
+			}
+
+			// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
+			// returns the specified (default) ancestor.
+			function nextAncestor(vim, v, ancestor) {
+			  return vim.a.parent === v.parent ? vim.a : ancestor;
+			}
+
+			function TreeNode(node, i) {
+			  this._ = node;
+			  this.parent = null;
+			  this.children = null;
+			  this.A = null; // default ancestor
+			  this.a = this; // ancestor
+			  this.z = 0; // prelim
+			  this.m = 0; // mod
+			  this.c = 0; // change
+			  this.s = 0; // shift
+			  this.t = null; // thread
+			  this.i = i; // number
+			}
+
+			TreeNode.prototype = Object.create(Node.prototype);
+
+			function treeRoot(root) {
+			  var tree = new TreeNode(root, 0),
+				  node,
+				  nodes = [tree],
+				  child,
+				  children,
+				  i,
+				  n;
+
+			  while (node = nodes.pop()) {
+				if (children = node._.children) {
+				  node.children = new Array(n = children.length);
+				  for (i = n - 1; i >= 0; --i) {
+					nodes.push(child = node.children[i] = new TreeNode(children[i], i));
+					child.parent = node;
+				  }
+				}
+			  }
+
+			  (tree.parent = new TreeNode(null, 0)).children = [tree];
+			  return tree;
+			}
+
+			// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+			var tree = function() {
+			  var separation = defaultSeparation$1,
+				  dx = 1,
+				  dy = 1,
+				  nodeSize = null;
+
+			  function tree(root) {
+				var t = treeRoot(root);
+
+				// Compute the layout using Buchheim et al.’s algorithm.
+				t.eachAfter(firstWalk), t.parent.m = -t.z;
+				t.eachBefore(secondWalk);
+
+				// If a fixed node size is specified, scale x and y.
+				if (nodeSize) root.eachBefore(sizeNode);
+
+				// If a fixed tree size is specified, scale x and y based on the extent.
+				// Compute the left-most, right-most, and depth-most nodes for extents.
+				else {
+				  var left = root,
+					  right = root,
+					  bottom = root;
+				  root.eachBefore(function(node) {
+					if (node.x < left.x) left = node;
+					if (node.x > right.x) right = node;
+					if (node.depth > bottom.depth) bottom = node;
+				  });
+				  var s = left === right ? 1 : separation(left, right) / 2,
+					  tx = s - left.x,
+					  kx = dx / (right.x + s + tx),
+					  ky = dy / (bottom.depth || 1);
+				  root.eachBefore(function(node) {
+					node.x = (node.x + tx) * kx;
+					node.y = node.depth * ky;
+				  });
+				}
+
+				return root;
+			  }
+
+			  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
+			  // applied recursively to the children of v, as well as the function
+			  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
+			  // node v is placed to the midpoint of its outermost children.
+			  function firstWalk(v) {
+				var children = v.children,
+					siblings = v.parent.children,
+					w = v.i ? siblings[v.i - 1] : null;
+				if (children) {
+				  executeShifts(v);
+				  var midpoint = (children[0].z + children[children.length - 1].z) / 2;
+				  if (w) {
+					v.z = w.z + separation(v._, w._);
+					v.m = v.z - midpoint;
+				  } else {
+					v.z = midpoint;
+				  }
+				} else if (w) {
+				  v.z = w.z + separation(v._, w._);
+				}
+				v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
+			  }
+
+			  // Computes all real x-coordinates by summing up the modifiers recursively.
+			  function secondWalk(v) {
+				v._.x = v.z + v.parent.m;
+				v.m += v.parent.m;
+			  }
+
+			  // The core of the algorithm. Here, a new subtree is combined with the
+			  // previous subtrees. Threads are used to traverse the inside and outside
+			  // contours of the left and right subtree up to the highest common level. The
+			  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
+			  // superscript o means outside and i means inside, the subscript - means left
+			  // subtree and + means right subtree. For summing up the modifiers along the
+			  // contour, we use respective variables si+, si-, so-, and so+. Whenever two
+			  // nodes of the inside contours conflict, we compute the left one of the
+			  // greatest uncommon ancestors using the function ANCESTOR and call MOVE
+			  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
+			  // Finally, we add a new thread (if necessary).
+			  function apportion(v, w, ancestor) {
+				if (w) {
+				  var vip = v,
+					  vop = v,
+					  vim = w,
+					  vom = vip.parent.children[0],
+					  sip = vip.m,
+					  sop = vop.m,
+					  sim = vim.m,
+					  som = vom.m,
+					  shift;
+				  while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
+					vom = nextLeft(vom);
+					vop = nextRight(vop);
+					vop.a = v;
+					shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
+					if (shift > 0) {
+					  moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
+					  sip += shift;
+					  sop += shift;
+					}
+					sim += vim.m;
+					sip += vip.m;
+					som += vom.m;
+					sop += vop.m;
+				  }
+				  if (vim && !nextRight(vop)) {
+					vop.t = vim;
+					vop.m += sim - sop;
+				  }
+				  if (vip && !nextLeft(vom)) {
+					vom.t = vip;
+					vom.m += sip - som;
+					ancestor = v;
+				  }
+				}
+				return ancestor;
+			  }
+
+			  function sizeNode(node) {
+				node.x *= dx;
+				node.y = node.depth * dy;
+			  }
+
+			  tree.separation = function(x) {
+				return arguments.length ? (separation = x, tree) : separation;
+			  };
+
+			  tree.size = function(x) {
+				return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
+			  };
+
+			  tree.nodeSize = function(x) {
+				return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
+			  };
+
+			  return tree;
+			};
+
+			var treemapSlice = function(parent, x0, y0, x1, y1) {
+			  var nodes = parent.children,
+				  node,
+				  i = -1,
+				  n = nodes.length,
+				  k = parent.value && (y1 - y0) / parent.value;
+
+			  while (++i < n) {
+				node = nodes[i], node.x0 = x0, node.x1 = x1;
+				node.y0 = y0, node.y1 = y0 += node.value * k;
+			  }
+			};
+
+			var phi = (1 + Math.sqrt(5)) / 2;
+
+			function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
+			  var rows = [],
+				  nodes = parent.children,
+				  row,
+				  nodeValue,
+				  i0 = 0,
+				  i1,
+				  n = nodes.length,
+				  dx, dy,
+				  value = parent.value,
+				  sumValue,
+				  minValue,
+				  maxValue,
+				  newRatio,
+				  minRatio,
+				  alpha,
+				  beta;
+
+			  while (i0 < n) {
+				dx = x1 - x0, dy = y1 - y0;
+				minValue = maxValue = sumValue = nodes[i0].value;
+				alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
+				beta = sumValue * sumValue * alpha;
+				minRatio = Math.max(maxValue / beta, beta / minValue);
+
+				// Keep adding nodes while the aspect ratio maintains or improves.
+				for (i1 = i0 + 1; i1 < n; ++i1) {
+				  sumValue += nodeValue = nodes[i1].value;
+				  if (nodeValue < minValue) minValue = nodeValue;
+				  if (nodeValue > maxValue) maxValue = nodeValue;
+				  beta = sumValue * sumValue * alpha;
+				  newRatio = Math.max(maxValue / beta, beta / minValue);
+				  if (newRatio > minRatio) { sumValue -= nodeValue; break; }
+				  minRatio = newRatio;
+				}
+
+				// Position and record the row orientation.
+				rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
+				if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
+				else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
+				value -= sumValue, i0 = i1;
+			  }
+
+			  return rows;
+			}
+
+			var squarify = (function custom(ratio) {
+
+			  function squarify(parent, x0, y0, x1, y1) {
+				squarifyRatio(ratio, parent, x0, y0, x1, y1);
+			  }
+
+			  squarify.ratio = function(x) {
+				return custom((x = +x) > 1 ? x : 1);
+			  };
+
+			  return squarify;
+			})(phi);
+
+			var index$1 = function() {
+			  var tile = squarify,
+				  round = false,
+				  dx = 1,
+				  dy = 1,
+				  paddingStack = [0],
+				  paddingInner = constantZero,
+				  paddingTop = constantZero,
+				  paddingRight = constantZero,
+				  paddingBottom = constantZero,
+				  paddingLeft = constantZero;
+
+			  function treemap(root) {
+				root.x0 =
+				root.y0 = 0;
+				root.x1 = dx;
+				root.y1 = dy;
+				root.eachBefore(positionNode);
+				paddingStack = [0];
+				if (round) root.eachBefore(roundNode);
+				return root;
+			  }
+
+			  function positionNode(node) {
+				var p = paddingStack[node.depth],
+					x0 = node.x0 + p,
+					y0 = node.y0 + p,
+					x1 = node.x1 - p,
+					y1 = node.y1 - p;
+				if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+				if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+				node.x0 = x0;
+				node.y0 = y0;
+				node.x1 = x1;
+				node.y1 = y1;
+				if (node.children) {
+				  p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
+				  x0 += paddingLeft(node) - p;
+				  y0 += paddingTop(node) - p;
+				  x1 -= paddingRight(node) - p;
+				  y1 -= paddingBottom(node) - p;
+				  if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+				  if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+				  tile(node, x0, y0, x1, y1);
+				}
+			  }
+
+			  treemap.round = function(x) {
+				return arguments.length ? (round = !!x, treemap) : round;
+			  };
+
+			  treemap.size = function(x) {
+				return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
+			  };
+
+			  treemap.tile = function(x) {
+				return arguments.length ? (tile = required(x), treemap) : tile;
+			  };
+
+			  treemap.padding = function(x) {
+				return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
+			  };
+
+			  treemap.paddingInner = function(x) {
+				return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner;
+			  };
+
+			  treemap.paddingOuter = function(x) {
+				return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
+			  };
+
+			  treemap.paddingTop = function(x) {
+				return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop;
+			  };
+
+			  treemap.paddingRight = function(x) {
+				return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight;
+			  };
+
+			  treemap.paddingBottom = function(x) {
+				return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom;
+			  };
+
+			  treemap.paddingLeft = function(x) {
+				return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft;
+			  };
+
+			  return treemap;
+			};
+
+			var binary = function(parent, x0, y0, x1, y1) {
+			  var nodes = parent.children,
+				  i, n = nodes.length,
+				  sum, sums = new Array(n + 1);
+
+			  for (sums[0] = sum = i = 0; i < n; ++i) {
+				sums[i + 1] = sum += nodes[i].value;
+			  }
+
+			  partition(0, n, parent.value, x0, y0, x1, y1);
+
+			  function partition(i, j, value, x0, y0, x1, y1) {
+				if (i >= j - 1) {
+				  var node = nodes[i];
+				  node.x0 = x0, node.y0 = y0;
+				  node.x1 = x1, node.y1 = y1;
+				  return;
+				}
+
+				var valueOffset = sums[i],
+					valueTarget = (value / 2) + valueOffset,
+					k = i + 1,
+					hi = j - 1;
+
+				while (k < hi) {
+				  var mid = k + hi >>> 1;
+				  if (sums[mid] < valueTarget) k = mid + 1;
+				  else hi = mid;
+				}
+
+				var valueLeft = sums[k] - valueOffset,
+					valueRight = value - valueLeft;
+
+				if ((y1 - y0) > (x1 - x0)) {
+				  var yk = (y0 * valueRight + y1 * valueLeft) / value;
+				  partition(i, k, valueLeft, x0, y0, x1, yk);
+				  partition(k, j, valueRight, x0, yk, x1, y1);
+				} else {
+				  var xk = (x0 * valueRight + x1 * valueLeft) / value;
+				  partition(i, k, valueLeft, x0, y0, xk, y1);
+				  partition(k, j, valueRight, xk, y0, x1, y1);
+				}
+			  }
+			};
+
+			var sliceDice = function(parent, x0, y0, x1, y1) {
+			  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
+			};
+
+			var resquarify = (function custom(ratio) {
+
+			  function resquarify(parent, x0, y0, x1, y1) {
+				if ((rows = parent._squarify) && (rows.ratio === ratio)) {
+				  var rows,
+					  row,
+					  nodes,
+					  i,
+					  j = -1,
+					  n,
+					  m = rows.length,
+					  value = parent.value;
+
+				  while (++j < m) {
+					row = rows[j], nodes = row.children;
+					for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
+					if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
+					else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
+					value -= row.value;
+				  }
+				} else {
+				  parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
+				  rows.ratio = ratio;
+				}
+			  }
+
+			  resquarify.ratio = function(x) {
+				return custom((x = +x) > 1 ? x : 1);
+			  };
+
+			  return resquarify;
+			})(phi);
+
+			var center$1 = function(x, y) {
+			  var nodes;
+
+			  if (x == null) x = 0;
+			  if (y == null) y = 0;
+
+			  function force() {
+				var i,
+					n = nodes.length,
+					node,
+					sx = 0,
+					sy = 0;
+
+				for (i = 0; i < n; ++i) {
+				  node = nodes[i], sx += node.x, sy += node.y;
+				}
+
+				for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
+				  node = nodes[i], node.x -= sx, node.y -= sy;
+				}
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+			  };
+
+			  force.x = function(_) {
+				return arguments.length ? (x = +_, force) : x;
+			  };
+
+			  force.y = function(_) {
+				return arguments.length ? (y = +_, force) : y;
+			  };
+
+			  return force;
+			};
+
+			var constant$7 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var jiggle = function() {
+			  return (Math.random() - 0.5) * 1e-6;
+			};
+
+			function x$1(d) {
+			  return d.x + d.vx;
+			}
+
+			function y$1(d) {
+			  return d.y + d.vy;
+			}
+
+			var collide = function(radius) {
+			  var nodes,
+				  radii,
+				  strength = 1,
+				  iterations = 1;
+
+			  if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
+
+			  function force() {
+				var i, n = nodes.length,
+					tree,
+					node,
+					xi,
+					yi,
+					ri,
+					ri2;
+
+				for (var k = 0; k < iterations; ++k) {
+				  tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);
+				  for (i = 0; i < n; ++i) {
+					node = nodes[i];
+					ri = radii[i], ri2 = ri * ri;
+					xi = node.x + node.vx;
+					yi = node.y + node.vy;
+					tree.visit(apply);
+				  }
+				}
+
+				function apply(quad, x0, y0, x1, y1) {
+				  var data = quad.data, rj = quad.r, r = ri + rj;
+				  if (data) {
+					if (data.index > i) {
+					  var x = xi - data.x - data.vx,
+						  y = yi - data.y - data.vy,
+						  l = x * x + y * y;
+					  if (l < r * r) {
+						if (x === 0) x = jiggle(), l += x * x;
+						if (y === 0) y = jiggle(), l += y * y;
+						l = (r - (l = Math.sqrt(l))) / l * strength;
+						node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
+						node.vy += (y *= l) * r;
+						data.vx -= x * (r = 1 - r);
+						data.vy -= y * r;
+					  }
+					}
+					return;
+				  }
+				  return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
+				}
+			  }
+
+			  function prepare(quad) {
+				if (quad.data) return quad.r = radii[quad.data.index];
+				for (var i = quad.r = 0; i < 4; ++i) {
+				  if (quad[i] && quad[i].r > quad.r) {
+					quad.r = quad[i].r;
+				  }
+				}
+			  }
+
+			  function initialize() {
+				if (!nodes) return;
+				var i, n = nodes.length;
+				radii = new Array(n);
+				for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+				initialize();
+			  };
+
+			  force.iterations = function(_) {
+				return arguments.length ? (iterations = +_, force) : iterations;
+			  };
+
+			  force.strength = function(_) {
+				return arguments.length ? (strength = +_, force) : strength;
+			  };
+
+			  force.radius = function(_) {
+				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
+			  };
+
+			  return force;
+			};
+
+			function index$2(d, i) {
+			  return i;
+			}
+
+			function find(nodeById, nodeId) {
+			  var node = nodeById.get(nodeId);
+			  if (!node) throw new Error("missing: " + nodeId);
+			  return node;
+			}
+
+			var link = function(links) {
+			  var id = index$2,
+				  strength = defaultStrength,
+				  strengths,
+				  distance = constant$7(30),
+				  distances,
+				  nodes,
+				  count,
+				  bias,
+				  iterations = 1;
+
+			  if (links == null) links = [];
+
+			  function defaultStrength(link) {
+				return 1 / Math.min(count[link.source.index], count[link.target.index]);
+			  }
+
+			  function force(alpha) {
+				for (var k = 0, n = links.length; k < iterations; ++k) {
+				  for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
+					link = links[i], source = link.source, target = link.target;
+					x = target.x + target.vx - source.x - source.vx || jiggle();
+					y = target.y + target.vy - source.y - source.vy || jiggle();
+					l = Math.sqrt(x * x + y * y);
+					l = (l - distances[i]) / l * alpha * strengths[i];
+					x *= l, y *= l;
+					target.vx -= x * (b = bias[i]);
+					target.vy -= y * b;
+					source.vx += x * (b = 1 - b);
+					source.vy += y * b;
+				  }
+				}
+			  }
+
+			  function initialize() {
+				if (!nodes) return;
+
+				var i,
+					n = nodes.length,
+					m = links.length,
+					nodeById = map$1(nodes, id),
+					link;
+
+				for (i = 0, count = new Array(n); i < n; ++i) {
+				  count[i] = 0;
+				}
+
+				for (i = 0; i < m; ++i) {
+				  link = links[i], link.index = i;
+				  if (typeof link.source !== "object") link.source = find(nodeById, link.source);
+				  if (typeof link.target !== "object") link.target = find(nodeById, link.target);
+				  ++count[link.source.index], ++count[link.target.index];
+				}
+
+				for (i = 0, bias = new Array(m); i < m; ++i) {
+				  link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
+				}
+
+				strengths = new Array(m), initializeStrength();
+				distances = new Array(m), initializeDistance();
+			  }
+
+			  function initializeStrength() {
+				if (!nodes) return;
+
+				for (var i = 0, n = links.length; i < n; ++i) {
+				  strengths[i] = +strength(links[i], i, links);
+				}
+			  }
+
+			  function initializeDistance() {
+				if (!nodes) return;
+
+				for (var i = 0, n = links.length; i < n; ++i) {
+				  distances[i] = +distance(links[i], i, links);
+				}
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+				initialize();
+			  };
+
+			  force.links = function(_) {
+				return arguments.length ? (links = _, initialize(), force) : links;
+			  };
+
+			  force.id = function(_) {
+				return arguments.length ? (id = _, force) : id;
+			  };
+
+			  force.iterations = function(_) {
+				return arguments.length ? (iterations = +_, force) : iterations;
+			  };
+
+			  force.strength = function(_) {
+				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
+			  };
+
+			  force.distance = function(_) {
+				return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
+			  };
+
+			  return force;
+			};
+
+			function x$2(d) {
+			  return d.x;
+			}
+
+			function y$2(d) {
+			  return d.y;
+			}
+
+			var initialRadius = 10;
+			var initialAngle = Math.PI * (3 - Math.sqrt(5));
+
+			var simulation = function(nodes) {
+			  var simulation,
+				  alpha = 1,
+				  alphaMin = 0.001,
+				  alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
+				  alphaTarget = 0,
+				  velocityDecay = 0.6,
+				  forces = map$1(),
+				  stepper = timer(step),
+				  event = dispatch("tick", "end");
+
+			  if (nodes == null) nodes = [];
+
+			  function step() {
+				tick();
+				event.call("tick", simulation);
+				if (alpha < alphaMin) {
+				  stepper.stop();
+				  event.call("end", simulation);
+				}
+			  }
+
+			  function tick() {
+				var i, n = nodes.length, node;
+
+				alpha += (alphaTarget - alpha) * alphaDecay;
+
+				forces.each(function(force) {
+				  force(alpha);
+				});
+
+				for (i = 0; i < n; ++i) {
+				  node = nodes[i];
+				  if (node.fx == null) node.x += node.vx *= velocityDecay;
+				  else node.x = node.fx, node.vx = 0;
+				  if (node.fy == null) node.y += node.vy *= velocityDecay;
+				  else node.y = node.fy, node.vy = 0;
+				}
+			  }
+
+			  function initializeNodes() {
+				for (var i = 0, n = nodes.length, node; i < n; ++i) {
+				  node = nodes[i], node.index = i;
+				  if (isNaN(node.x) || isNaN(node.y)) {
+					var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
+					node.x = radius * Math.cos(angle);
+					node.y = radius * Math.sin(angle);
+				  }
+				  if (isNaN(node.vx) || isNaN(node.vy)) {
+					node.vx = node.vy = 0;
+				  }
+				}
+			  }
+
+			  function initializeForce(force) {
+				if (force.initialize) force.initialize(nodes);
+				return force;
+			  }
+
+			  initializeNodes();
+
+			  return simulation = {
+				tick: tick,
+
+				restart: function() {
+				  return stepper.restart(step), simulation;
+				},
+
+				stop: function() {
+				  return stepper.stop(), simulation;
+				},
+
+				nodes: function(_) {
+				  return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
+				},
+
+				alpha: function(_) {
+				  return arguments.length ? (alpha = +_, simulation) : alpha;
+				},
+
+				alphaMin: function(_) {
+				  return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
+				},
+
+				alphaDecay: function(_) {
+				  return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
+				},
+
+				alphaTarget: function(_) {
+				  return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
+				},
+
+				velocityDecay: function(_) {
+				  return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
+				},
+
+				force: function(name, _) {
+				  return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
+				},
+
+				find: function(x, y, radius) {
+				  var i = 0,
+					  n = nodes.length,
+					  dx,
+					  dy,
+					  d2,
+					  node,
+					  closest;
+
+				  if (radius == null) radius = Infinity;
+				  else radius *= radius;
+
+				  for (i = 0; i < n; ++i) {
+					node = nodes[i];
+					dx = x - node.x;
+					dy = y - node.y;
+					d2 = dx * dx + dy * dy;
+					if (d2 < radius) closest = node, radius = d2;
+				  }
+
+				  return closest;
+				},
+
+				on: function(name, _) {
+				  return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
+				}
+			  };
+			};
+
+			var manyBody = function() {
+			  var nodes,
+				  node,
+				  alpha,
+				  strength = constant$7(-30),
+				  strengths,
+				  distanceMin2 = 1,
+				  distanceMax2 = Infinity,
+				  theta2 = 0.81;
+
+			  function force(_) {
+				var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);
+				for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
+			  }
+
+			  function initialize() {
+				if (!nodes) return;
+				var i, n = nodes.length;
+				strengths = new Array(n);
+				for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);
+			  }
+
+			  function accumulate(quad) {
+				var strength = 0, q, c, x$$1, y$$1, i;
+
+				// For internal nodes, accumulate forces from child quadrants.
+				if (quad.length) {
+				  for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
+					if ((q = quad[i]) && (c = q.value)) {
+					  strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
+					}
+				  }
+				  quad.x = x$$1 / strength;
+				  quad.y = y$$1 / strength;
+				}
+
+				// For leaf nodes, accumulate forces from coincident quadrants.
+				else {
+				  q = quad;
+				  q.x = q.data.x;
+				  q.y = q.data.y;
+				  do strength += strengths[q.data.index];
+				  while (q = q.next);
+				}
+
+				quad.value = strength;
+			  }
+
+			  function apply(quad, x1, _, x2) {
+				if (!quad.value) return true;
+
+				var x$$1 = quad.x - node.x,
+					y$$1 = quad.y - node.y,
+					w = x2 - x1,
+					l = x$$1 * x$$1 + y$$1 * y$$1;
+
+				// Apply the Barnes-Hut approximation if possible.
+				// Limit forces for very close nodes; randomize direction if coincident.
+				if (w * w / theta2 < l) {
+				  if (l < distanceMax2) {
+					if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+					if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+					if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+					node.vx += x$$1 * quad.value * alpha / l;
+					node.vy += y$$1 * quad.value * alpha / l;
+				  }
+				  return true;
+				}
+
+				// Otherwise, process points directly.
+				else if (quad.length || l >= distanceMax2) return;
+
+				// Limit forces for very close nodes; randomize direction if coincident.
+				if (quad.data !== node || quad.next) {
+				  if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+				  if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+				  if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+				}
+
+				do if (quad.data !== node) {
+				  w = strengths[quad.data.index] * alpha / l;
+				  node.vx += x$$1 * w;
+				  node.vy += y$$1 * w;
+				} while (quad = quad.next);
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+				initialize();
+			  };
+
+			  force.strength = function(_) {
+				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+			  };
+
+			  force.distanceMin = function(_) {
+				return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
+			  };
+
+			  force.distanceMax = function(_) {
+				return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
+			  };
+
+			  force.theta = function(_) {
+				return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
+			  };
+
+			  return force;
+			};
+
+			var x$3 = function(x) {
+			  var strength = constant$7(0.1),
+				  nodes,
+				  strengths,
+				  xz;
+
+			  if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
+
+			  function force(alpha) {
+				for (var i = 0, n = nodes.length, node; i < n; ++i) {
+				  node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
+				}
+			  }
+
+			  function initialize() {
+				if (!nodes) return;
+				var i, n = nodes.length;
+				strengths = new Array(n);
+				xz = new Array(n);
+				for (i = 0; i < n; ++i) {
+				  strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+				}
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+				initialize();
+			  };
+
+			  force.strength = function(_) {
+				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+			  };
+
+			  force.x = function(_) {
+				return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
+			  };
+
+			  return force;
+			};
+
+			var y$3 = function(y) {
+			  var strength = constant$7(0.1),
+				  nodes,
+				  strengths,
+				  yz;
+
+			  if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
+
+			  function force(alpha) {
+				for (var i = 0, n = nodes.length, node; i < n; ++i) {
+				  node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
+				}
+			  }
+
+			  function initialize() {
+				if (!nodes) return;
+				var i, n = nodes.length;
+				strengths = new Array(n);
+				yz = new Array(n);
+				for (i = 0; i < n; ++i) {
+				  strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+				}
+			  }
+
+			  force.initialize = function(_) {
+				nodes = _;
+				initialize();
+			  };
+
+			  force.strength = function(_) {
+				return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+			  };
+
+			  force.y = function(_) {
+				return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
+			  };
+
+			  return force;
+			};
+
+			function nopropagation() {
+			  exports.event.stopImmediatePropagation();
+			}
+
+			var noevent = function() {
+			  exports.event.preventDefault();
+			  exports.event.stopImmediatePropagation();
+			};
+
+			var dragDisable = function(view) {
+			  var root = view.document.documentElement,
+				  selection$$1 = select(view).on("dragstart.drag", noevent, true);
+			  if ("onselectstart" in root) {
+				selection$$1.on("selectstart.drag", noevent, true);
+			  } else {
+				root.__noselect = root.style.MozUserSelect;
+				root.style.MozUserSelect = "none";
+			  }
+			};
+
+			function yesdrag(view, noclick) {
+			  var root = view.document.documentElement,
+				  selection$$1 = select(view).on("dragstart.drag", null);
+			  if (noclick) {
+				selection$$1.on("click.drag", noevent, true);
+				setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
+			  }
+			  if ("onselectstart" in root) {
+				selection$$1.on("selectstart.drag", null);
+			  } else {
+				root.style.MozUserSelect = root.__noselect;
+				delete root.__noselect;
+			  }
+			}
+
+			var constant$8 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
+			  this.target = target;
+			  this.type = type;
+			  this.subject = subject;
+			  this.identifier = id;
+			  this.active = active;
+			  this.x = x;
+			  this.y = y;
+			  this.dx = dx;
+			  this.dy = dy;
+			  this._ = dispatch;
+			}
+
+			DragEvent.prototype.on = function() {
+			  var value = this._.on.apply(this._, arguments);
+			  return value === this._ ? this : value;
+			};
+
+			// Ignore right-click, since that should open the context menu.
+			function defaultFilter() {
+			  return !exports.event.button;
+			}
+
+			function defaultContainer() {
+			  return this.parentNode;
+			}
+
+			function defaultSubject(d) {
+			  return d == null ? {x: exports.event.x, y: exports.event.y} : d;
+			}
+
+			var drag = function() {
+			  var filter = defaultFilter,
+				  container = defaultContainer,
+				  subject = defaultSubject,
+				  gestures = {},
+				  listeners = dispatch("start", "drag", "end"),
+				  active = 0,
+				  mousemoving,
+				  touchending;
+
+			  function drag(selection$$1) {
+				selection$$1
+					.on("mousedown.drag", mousedowned)
+					.on("touchstart.drag", touchstarted)
+					.on("touchmove.drag", touchmoved)
+					.on("touchend.drag touchcancel.drag", touchended)
+					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
+			  }
+
+			  function mousedowned() {
+				if (touchending || !filter.apply(this, arguments)) return;
+				var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
+				if (!gesture) return;
+				select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
+				dragDisable(exports.event.view);
+				nopropagation();
+				mousemoving = false;
+				gesture("start");
+			  }
+
+			  function mousemoved() {
+				noevent();
+				mousemoving = true;
+				gestures.mouse("drag");
+			  }
+
+			  function mouseupped() {
+				select(exports.event.view).on("mousemove.drag mouseup.drag", null);
+				yesdrag(exports.event.view, mousemoving);
+				noevent();
+				gestures.mouse("end");
+			  }
+
+			  function touchstarted() {
+				if (!filter.apply(this, arguments)) return;
+				var touches$$1 = exports.event.changedTouches,
+					c = container.apply(this, arguments),
+					n = touches$$1.length, i, gesture;
+
+				for (i = 0; i < n; ++i) {
+				  if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
+					nopropagation();
+					gesture("start");
+				  }
+				}
+			  }
+
+			  function touchmoved() {
+				var touches$$1 = exports.event.changedTouches,
+					n = touches$$1.length, i, gesture;
+
+				for (i = 0; i < n; ++i) {
+				  if (gesture = gestures[touches$$1[i].identifier]) {
+					noevent();
+					gesture("drag");
+				  }
+				}
+			  }
+
+			  function touchended() {
+				var touches$$1 = exports.event.changedTouches,
+					n = touches$$1.length, i, gesture;
+
+				if (touchending) clearTimeout(touchending);
+				touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+				for (i = 0; i < n; ++i) {
+				  if (gesture = gestures[touches$$1[i].identifier]) {
+					nopropagation();
+					gesture("end");
+				  }
+				}
+			  }
+
+			  function beforestart(id, container, point, that, args) {
+				var p = point(container, id), s, dx, dy,
+					sublisteners = listeners.copy();
+
+				if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
+				  if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
+				  dx = s.x - p[0] || 0;
+				  dy = s.y - p[1] || 0;
+				  return true;
+				})) return;
+
+				return function gesture(type) {
+				  var p0 = p, n;
+				  switch (type) {
+					case "start": gestures[id] = gesture, n = active++; break;
+					case "end": delete gestures[id], --active; // nobreak
+					case "drag": p = point(container, id), n = active; break;
+				  }
+				  customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
+				};
+			  }
+
+			  drag.filter = function(_) {
+				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter;
+			  };
+
+			  drag.container = function(_) {
+				return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container;
+			  };
+
+			  drag.subject = function(_) {
+				return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject;
+			  };
+
+			  drag.on = function() {
+				var value = listeners.on.apply(listeners, arguments);
+				return value === listeners ? drag : value;
+			  };
+
+			  return drag;
+			};
+
+			var constant$9 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function x$4(d) {
+			  return d[0];
+			}
+
+			function y$4(d) {
+			  return d[1];
+			}
+
+			function RedBlackTree() {
+			  this._ = null; // root node
+			}
+
+			function RedBlackNode(node) {
+			  node.U = // parent node
+			  node.C = // color - true for red, false for black
+			  node.L = // left node
+			  node.R = // right node
+			  node.P = // previous node
+			  node.N = null; // next node
+			}
+
+			RedBlackTree.prototype = {
+			  constructor: RedBlackTree,
+
+			  insert: function(after, node) {
+				var parent, grandpa, uncle;
+
+				if (after) {
+				  node.P = after;
+				  node.N = after.N;
+				  if (after.N) after.N.P = node;
+				  after.N = node;
+				  if (after.R) {
+					after = after.R;
+					while (after.L) after = after.L;
+					after.L = node;
+				  } else {
+					after.R = node;
+				  }
+				  parent = after;
+				} else if (this._) {
+				  after = RedBlackFirst(this._);
+				  node.P = null;
+				  node.N = after;
+				  after.P = after.L = node;
+				  parent = after;
+				} else {
+				  node.P = node.N = null;
+				  this._ = node;
+				  parent = null;
+				}
+				node.L = node.R = null;
+				node.U = parent;
+				node.C = true;
+
+				after = node;
+				while (parent && parent.C) {
+				  grandpa = parent.U;
+				  if (parent === grandpa.L) {
+					uncle = grandpa.R;
+					if (uncle && uncle.C) {
+					  parent.C = uncle.C = false;
+					  grandpa.C = true;
+					  after = grandpa;
+					} else {
+					  if (after === parent.R) {
+						RedBlackRotateLeft(this, parent);
+						after = parent;
+						parent = after.U;
+					  }
+					  parent.C = false;
+					  grandpa.C = true;
+					  RedBlackRotateRight(this, grandpa);
+					}
+				  } else {
+					uncle = grandpa.L;
+					if (uncle && uncle.C) {
+					  parent.C = uncle.C = false;
+					  grandpa.C = true;
+					  after = grandpa;
+					} else {
+					  if (after === parent.L) {
+						RedBlackRotateRight(this, parent);
+						after = parent;
+						parent = after.U;
+					  }
+					  parent.C = false;
+					  grandpa.C = true;
+					  RedBlackRotateLeft(this, grandpa);
+					}
+				  }
+				  parent = after.U;
+				}
+				this._.C = false;
+			  },
+
+			  remove: function(node) {
+				if (node.N) node.N.P = node.P;
+				if (node.P) node.P.N = node.N;
+				node.N = node.P = null;
+
+				var parent = node.U,
+					sibling,
+					left = node.L,
+					right = node.R,
+					next,
+					red;
+
+				if (!left) next = right;
+				else if (!right) next = left;
+				else next = RedBlackFirst(right);
+
+				if (parent) {
+				  if (parent.L === node) parent.L = next;
+				  else parent.R = next;
+				} else {
+				  this._ = next;
+				}
+
+				if (left && right) {
+				  red = next.C;
+				  next.C = node.C;
+				  next.L = left;
+				  left.U = next;
+				  if (next !== right) {
+					parent = next.U;
+					next.U = node.U;
+					node = next.R;
+					parent.L = node;
+					next.R = right;
+					right.U = next;
+				  } else {
+					next.U = parent;
+					parent = next;
+					node = next.R;
+				  }
+				} else {
+				  red = node.C;
+				  node = next;
+				}
+
+				if (node) node.U = parent;
+				if (red) return;
+				if (node && node.C) { node.C = false; return; }
+
+				do {
+				  if (node === this._) break;
+				  if (node === parent.L) {
+					sibling = parent.R;
+					if (sibling.C) {
+					  sibling.C = false;
+					  parent.C = true;
+					  RedBlackRotateLeft(this, parent);
+					  sibling = parent.R;
+					}
+					if ((sibling.L && sibling.L.C)
+						|| (sibling.R && sibling.R.C)) {
+					  if (!sibling.R || !sibling.R.C) {
+						sibling.L.C = false;
+						sibling.C = true;
+						RedBlackRotateRight(this, sibling);
+						sibling = parent.R;
+					  }
+					  sibling.C = parent.C;
+					  parent.C = sibling.R.C = false;
+					  RedBlackRotateLeft(this, parent);
+					  node = this._;
+					  break;
+					}
+				  } else {
+					sibling = parent.L;
+					if (sibling.C) {
+					  sibling.C = false;
+					  parent.C = true;
+					  RedBlackRotateRight(this, parent);
+					  sibling = parent.L;
+					}
+					if ((sibling.L && sibling.L.C)
+					  || (sibling.R && sibling.R.C)) {
+					  if (!sibling.L || !sibling.L.C) {
+						sibling.R.C = false;
+						sibling.C = true;
+						RedBlackRotateLeft(this, sibling);
+						sibling = parent.L;
+					  }
+					  sibling.C = parent.C;
+					  parent.C = sibling.L.C = false;
+					  RedBlackRotateRight(this, parent);
+					  node = this._;
+					  break;
+					}
+				  }
+				  sibling.C = true;
+				  node = parent;
+				  parent = parent.U;
+				} while (!node.C);
+
+				if (node) node.C = false;
+			  }
+			};
+
+			function RedBlackRotateLeft(tree, node) {
+			  var p = node,
+				  q = node.R,
+				  parent = p.U;
+
+			  if (parent) {
+				if (parent.L === p) parent.L = q;
+				else parent.R = q;
+			  } else {
+				tree._ = q;
+			  }
+
+			  q.U = parent;
+			  p.U = q;
+			  p.R = q.L;
+			  if (p.R) p.R.U = p;
+			  q.L = p;
+			}
+
+			function RedBlackRotateRight(tree, node) {
+			  var p = node,
+				  q = node.L,
+				  parent = p.U;
+
+			  if (parent) {
+				if (parent.L === p) parent.L = q;
+				else parent.R = q;
+			  } else {
+				tree._ = q;
+			  }
+
+			  q.U = parent;
+			  p.U = q;
+			  p.L = q.R;
+			  if (p.L) p.L.U = p;
+			  q.R = p;
+			}
+
+			function RedBlackFirst(node) {
+			  while (node.L) node = node.L;
+			  return node;
+			}
+
+			function createEdge(left, right, v0, v1) {
+			  var edge = [null, null],
+				  index = edges.push(edge) - 1;
+			  edge.left = left;
+			  edge.right = right;
+			  if (v0) setEdgeEnd(edge, left, right, v0);
+			  if (v1) setEdgeEnd(edge, right, left, v1);
+			  cells[left.index].halfedges.push(index);
+			  cells[right.index].halfedges.push(index);
+			  return edge;
+			}
+
+			function createBorderEdge(left, v0, v1) {
+			  var edge = [v0, v1];
+			  edge.left = left;
+			  return edge;
+			}
+
+			function setEdgeEnd(edge, left, right, vertex) {
+			  if (!edge[0] && !edge[1]) {
+				edge[0] = vertex;
+				edge.left = left;
+				edge.right = right;
+			  } else if (edge.left === right) {
+				edge[1] = vertex;
+			  } else {
+				edge[0] = vertex;
+			  }
+			}
+
+			// Liang–Barsky line clipping.
+			function clipEdge(edge, x0, y0, x1, y1) {
+			  var a = edge[0],
+				  b = edge[1],
+				  ax = a[0],
+				  ay = a[1],
+				  bx = b[0],
+				  by = b[1],
+				  t0 = 0,
+				  t1 = 1,
+				  dx = bx - ax,
+				  dy = by - ay,
+				  r;
+
+			  r = x0 - ax;
+			  if (!dx && r > 0) return;
+			  r /= dx;
+			  if (dx < 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  } else if (dx > 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  }
+
+			  r = x1 - ax;
+			  if (!dx && r < 0) return;
+			  r /= dx;
+			  if (dx < 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  } else if (dx > 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  }
+
+			  r = y0 - ay;
+			  if (!dy && r > 0) return;
+			  r /= dy;
+			  if (dy < 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  } else if (dy > 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  }
+
+			  r = y1 - ay;
+			  if (!dy && r < 0) return;
+			  r /= dy;
+			  if (dy < 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  } else if (dy > 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  }
+
+			  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
+
+			  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
+			  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
+			  return true;
+			}
+
+			function connectEdge(edge, x0, y0, x1, y1) {
+			  var v1 = edge[1];
+			  if (v1) return true;
+
+			  var v0 = edge[0],
+				  left = edge.left,
+				  right = edge.right,
+				  lx = left[0],
+				  ly = left[1],
+				  rx = right[0],
+				  ry = right[1],
+				  fx = (lx + rx) / 2,
+				  fy = (ly + ry) / 2,
+				  fm,
+				  fb;
+
+			  if (ry === ly) {
+				if (fx < x0 || fx >= x1) return;
+				if (lx > rx) {
+				  if (!v0) v0 = [fx, y0];
+				  else if (v0[1] >= y1) return;
+				  v1 = [fx, y1];
+				} else {
+				  if (!v0) v0 = [fx, y1];
+				  else if (v0[1] < y0) return;
+				  v1 = [fx, y0];
+				}
+			  } else {
+				fm = (lx - rx) / (ry - ly);
+				fb = fy - fm * fx;
+				if (fm < -1 || fm > 1) {
+				  if (lx > rx) {
+					if (!v0) v0 = [(y0 - fb) / fm, y0];
+					else if (v0[1] >= y1) return;
+					v1 = [(y1 - fb) / fm, y1];
+				  } else {
+					if (!v0) v0 = [(y1 - fb) / fm, y1];
+					else if (v0[1] < y0) return;
+					v1 = [(y0 - fb) / fm, y0];
+				  }
+				} else {
+				  if (ly < ry) {
+					if (!v0) v0 = [x0, fm * x0 + fb];
+					else if (v0[0] >= x1) return;
+					v1 = [x1, fm * x1 + fb];
+				  } else {
+					if (!v0) v0 = [x1, fm * x1 + fb];
+					else if (v0[0] < x0) return;
+					v1 = [x0, fm * x0 + fb];
+				  }
+				}
+			  }
+
+			  edge[0] = v0;
+			  edge[1] = v1;
+			  return true;
+			}
+
+			function clipEdges(x0, y0, x1, y1) {
+			  var i = edges.length,
+				  edge;
+
+			  while (i--) {
+				if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
+					|| !clipEdge(edge, x0, y0, x1, y1)
+					|| !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3
+						|| Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {
+				  delete edges[i];
+				}
+			  }
+			}
+
+			function createCell(site) {
+			  return cells[site.index] = {
+				site: site,
+				halfedges: []
+			  };
+			}
+
+			function cellHalfedgeAngle(cell, edge) {
+			  var site = cell.site,
+				  va = edge.left,
+				  vb = edge.right;
+			  if (site === vb) vb = va, va = site;
+			  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
+			  if (site === va) va = edge[1], vb = edge[0];
+			  else va = edge[0], vb = edge[1];
+			  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
+			}
+
+			function cellHalfedgeStart(cell, edge) {
+			  return edge[+(edge.left !== cell.site)];
+			}
+
+			function cellHalfedgeEnd(cell, edge) {
+			  return edge[+(edge.left === cell.site)];
+			}
+
+			function sortCellHalfedges() {
+			  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
+				if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
+				  var index = new Array(m),
+					  array = new Array(m);
+				  for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
+				  index.sort(function(i, j) { return array[j] - array[i]; });
+				  for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
+				  for (j = 0; j < m; ++j) halfedges[j] = array[j];
+				}
+			  }
+			}
+
+			function clipCells(x0, y0, x1, y1) {
+			  var nCells = cells.length,
+				  iCell,
+				  cell,
+				  site,
+				  iHalfedge,
+				  halfedges,
+				  nHalfedges,
+				  start,
+				  startX,
+				  startY,
+				  end,
+				  endX,
+				  endY,
+				  cover = true;
+
+			  for (iCell = 0; iCell < nCells; ++iCell) {
+				if (cell = cells[iCell]) {
+				  site = cell.site;
+				  halfedges = cell.halfedges;
+				  iHalfedge = halfedges.length;
+
+				  // Remove any dangling clipped edges.
+				  while (iHalfedge--) {
+					if (!edges[halfedges[iHalfedge]]) {
+					  halfedges.splice(iHalfedge, 1);
+					}
+				  }
+
+				  // Insert any border edges as necessary.
+				  iHalfedge = 0, nHalfedges = halfedges.length;
+				  while (iHalfedge < nHalfedges) {
+					end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
+					start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
+					if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {
+					  halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
+						  Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]
+						  : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]
+						  : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]
+						  : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]
+						  : null)) - 1);
+					  ++nHalfedges;
+					}
+				  }
+
+				  if (nHalfedges) cover = false;
+				}
+			  }
+
+			  // If there weren’t any edges, have the closest site cover the extent.
+			  // It doesn’t matter which corner of the extent we measure!
+			  if (cover) {
+				var dx, dy, d2, dc = Infinity;
+
+				for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
+				  if (cell = cells[iCell]) {
+					site = cell.site;
+					dx = site[0] - x0;
+					dy = site[1] - y0;
+					d2 = dx * dx + dy * dy;
+					if (d2 < dc) dc = d2, cover = cell;
+				  }
+				}
+
+				if (cover) {
+				  var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
+				  cover.halfedges.push(
+					edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
+					edges.push(createBorderEdge(site, v01, v11)) - 1,
+					edges.push(createBorderEdge(site, v11, v10)) - 1,
+					edges.push(createBorderEdge(site, v10, v00)) - 1
+				  );
+				}
+			  }
+
+			  // Lastly delete any cells with no edges; these were entirely clipped.
+			  for (iCell = 0; iCell < nCells; ++iCell) {
+				if (cell = cells[iCell]) {
+				  if (!cell.halfedges.length) {
+					delete cells[iCell];
+				  }
+				}
+			  }
+			}
+
+			var circlePool = [];
+
+			var firstCircle;
+
+			function Circle() {
+			  RedBlackNode(this);
+			  this.x =
+			  this.y =
+			  this.arc =
+			  this.site =
+			  this.cy = null;
+			}
+
+			function attachCircle(arc) {
+			  var lArc = arc.P,
+				  rArc = arc.N;
+
+			  if (!lArc || !rArc) return;
+
+			  var lSite = lArc.site,
+				  cSite = arc.site,
+				  rSite = rArc.site;
+
+			  if (lSite === rSite) return;
+
+			  var bx = cSite[0],
+				  by = cSite[1],
+				  ax = lSite[0] - bx,
+				  ay = lSite[1] - by,
+				  cx = rSite[0] - bx,
+				  cy = rSite[1] - by;
+
+			  var d = 2 * (ax * cy - ay * cx);
+			  if (d >= -epsilon2$1) return;
+
+			  var ha = ax * ax + ay * ay,
+				  hc = cx * cx + cy * cy,
+				  x = (cy * ha - ay * hc) / d,
+				  y = (ax * hc - cx * ha) / d;
+
+			  var circle = circlePool.pop() || new Circle;
+			  circle.arc = arc;
+			  circle.site = cSite;
+			  circle.x = x + bx;
+			  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
+
+			  arc.circle = circle;
+
+			  var before = null,
+				  node = circles._;
+
+			  while (node) {
+				if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
+				  if (node.L) node = node.L;
+				  else { before = node.P; break; }
+				} else {
+				  if (node.R) node = node.R;
+				  else { before = node; break; }
+				}
+			  }
+
+			  circles.insert(before, circle);
+			  if (!before) firstCircle = circle;
+			}
+
+			function detachCircle(arc) {
+			  var circle = arc.circle;
+			  if (circle) {
+				if (!circle.P) firstCircle = circle.N;
+				circles.remove(circle);
+				circlePool.push(circle);
+				RedBlackNode(circle);
+				arc.circle = null;
+			  }
+			}
+
+			var beachPool = [];
+
+			function Beach() {
+			  RedBlackNode(this);
+			  this.edge =
+			  this.site =
+			  this.circle = null;
+			}
+
+			function createBeach(site) {
+			  var beach = beachPool.pop() || new Beach;
+			  beach.site = site;
+			  return beach;
+			}
+
+			function detachBeach(beach) {
+			  detachCircle(beach);
+			  beaches.remove(beach);
+			  beachPool.push(beach);
+			  RedBlackNode(beach);
+			}
+
+			function removeBeach(beach) {
+			  var circle = beach.circle,
+				  x = circle.x,
+				  y = circle.cy,
+				  vertex = [x, y],
+				  previous = beach.P,
+				  next = beach.N,
+				  disappearing = [beach];
+
+			  detachBeach(beach);
+
+			  var lArc = previous;
+			  while (lArc.circle
+				  && Math.abs(x - lArc.circle.x) < epsilon$3
+				  && Math.abs(y - lArc.circle.cy) < epsilon$3) {
+				previous = lArc.P;
+				disappearing.unshift(lArc);
+				detachBeach(lArc);
+				lArc = previous;
+			  }
+
+			  disappearing.unshift(lArc);
+			  detachCircle(lArc);
+
+			  var rArc = next;
+			  while (rArc.circle
+				  && Math.abs(x - rArc.circle.x) < epsilon$3
+				  && Math.abs(y - rArc.circle.cy) < epsilon$3) {
+				next = rArc.N;
+				disappearing.push(rArc);
+				detachBeach(rArc);
+				rArc = next;
+			  }
+
+			  disappearing.push(rArc);
+			  detachCircle(rArc);
+
+			  var nArcs = disappearing.length,
+				  iArc;
+			  for (iArc = 1; iArc < nArcs; ++iArc) {
+				rArc = disappearing[iArc];
+				lArc = disappearing[iArc - 1];
+				setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
+			  }
+
+			  lArc = disappearing[0];
+			  rArc = disappearing[nArcs - 1];
+			  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
+
+			  attachCircle(lArc);
+			  attachCircle(rArc);
+			}
+
+			function addBeach(site) {
+			  var x = site[0],
+				  directrix = site[1],
+				  lArc,
+				  rArc,
+				  dxl,
+				  dxr,
+				  node = beaches._;
+
+			  while (node) {
+				dxl = leftBreakPoint(node, directrix) - x;
+				if (dxl > epsilon$3) node = node.L; else {
+				  dxr = x - rightBreakPoint(node, directrix);
+				  if (dxr > epsilon$3) {
+					if (!node.R) {
+					  lArc = node;
+					  break;
+					}
+					node = node.R;
+				  } else {
+					if (dxl > -epsilon$3) {
+					  lArc = node.P;
+					  rArc = node;
+					} else if (dxr > -epsilon$3) {
+					  lArc = node;
+					  rArc = node.N;
+					} else {
+					  lArc = rArc = node;
+					}
+					break;
+				  }
+				}
+			  }
+
+			  createCell(site);
+			  var newArc = createBeach(site);
+			  beaches.insert(lArc, newArc);
+
+			  if (!lArc && !rArc) return;
+
+			  if (lArc === rArc) {
+				detachCircle(lArc);
+				rArc = createBeach(lArc.site);
+				beaches.insert(newArc, rArc);
+				newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
+				attachCircle(lArc);
+				attachCircle(rArc);
+				return;
+			  }
+
+			  if (!rArc) { // && lArc
+				newArc.edge = createEdge(lArc.site, newArc.site);
+				return;
+			  }
+
+			  // else lArc !== rArc
+			  detachCircle(lArc);
+			  detachCircle(rArc);
+
+			  var lSite = lArc.site,
+				  ax = lSite[0],
+				  ay = lSite[1],
+				  bx = site[0] - ax,
+				  by = site[1] - ay,
+				  rSite = rArc.site,
+				  cx = rSite[0] - ax,
+				  cy = rSite[1] - ay,
+				  d = 2 * (bx * cy - by * cx),
+				  hb = bx * bx + by * by,
+				  hc = cx * cx + cy * cy,
+				  vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
+
+			  setEdgeEnd(rArc.edge, lSite, rSite, vertex);
+			  newArc.edge = createEdge(lSite, site, null, vertex);
+			  rArc.edge = createEdge(site, rSite, null, vertex);
+			  attachCircle(lArc);
+			  attachCircle(rArc);
+			}
+
+			function leftBreakPoint(arc, directrix) {
+			  var site = arc.site,
+				  rfocx = site[0],
+				  rfocy = site[1],
+				  pby2 = rfocy - directrix;
+
+			  if (!pby2) return rfocx;
+
+			  var lArc = arc.P;
+			  if (!lArc) return -Infinity;
+
+			  site = lArc.site;
+			  var lfocx = site[0],
+				  lfocy = site[1],
+				  plby2 = lfocy - directrix;
+
+			  if (!plby2) return lfocx;
+
+			  var hl = lfocx - rfocx,
+				  aby2 = 1 / pby2 - 1 / plby2,
+				  b = hl / plby2;
+
+			  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
+
+			  return (rfocx + lfocx) / 2;
+			}
+
+			function rightBreakPoint(arc, directrix) {
+			  var rArc = arc.N;
+			  if (rArc) return leftBreakPoint(rArc, directrix);
+			  var site = arc.site;
+			  return site[1] === directrix ? site[0] : Infinity;
+			}
+
+			var epsilon$3 = 1e-6;
+			var epsilon2$1 = 1e-12;
+			var beaches;
+			var cells;
+			var circles;
+			var edges;
+
+			function triangleArea(a, b, c) {
+			  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
+			}
+
+			function lexicographic(a, b) {
+			  return b[1] - a[1]
+				  || b[0] - a[0];
+			}
+
+			function Diagram(sites, extent) {
+			  var site = sites.sort(lexicographic).pop(),
+				  x,
+				  y,
+				  circle;
+
+			  edges = [];
+			  cells = new Array(sites.length);
+			  beaches = new RedBlackTree;
+			  circles = new RedBlackTree;
+
+			  while (true) {
+				circle = firstCircle;
+				if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
+				  if (site[0] !== x || site[1] !== y) {
+					addBeach(site);
+					x = site[0], y = site[1];
+				  }
+				  site = sites.pop();
+				} else if (circle) {
+				  removeBeach(circle.arc);
+				} else {
+				  break;
+				}
+			  }
+
+			  sortCellHalfedges();
+
+			  if (extent) {
+				var x0 = +extent[0][0],
+					y0 = +extent[0][1],
+					x1 = +extent[1][0],
+					y1 = +extent[1][1];
+				clipEdges(x0, y0, x1, y1);
+				clipCells(x0, y0, x1, y1);
+			  }
+
+			  this.edges = edges;
+			  this.cells = cells;
+
+			  beaches =
+			  circles =
+			  edges =
+			  cells = null;
+			}
+
+			Diagram.prototype = {
+			  constructor: Diagram,
+
+			  polygons: function() {
+				var edges = this.edges;
+
+				return this.cells.map(function(cell) {
+				  var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
+				  polygon.data = cell.site.data;
+				  return polygon;
+				});
+			  },
+
+			  triangles: function() {
+				var triangles = [],
+					edges = this.edges;
+
+				this.cells.forEach(function(cell, i) {
+				  var site = cell.site,
+					  halfedges = cell.halfedges,
+					  j = -1,
+					  m = halfedges.length,
+					  s0,
+					  e1 = edges[halfedges[m - 1]],
+					  s1 = e1.left === site ? e1.right : e1.left;
+
+				  while (++j < m) {
+					s0 = s1;
+					e1 = edges[halfedges[j]];
+					s1 = e1.left === site ? e1.right : e1.left;
+					if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
+					  triangles.push([site.data, s0.data, s1.data]);
+					}
+				  }
+				});
+
+				return triangles;
+			  },
+
+			  links: function() {
+				return this.edges.filter(function(edge) {
+				  return edge.right;
+				}).map(function(edge) {
+				  return {
+					source: edge.left.data,
+					target: edge.right.data
+				  };
+				});
+			  },
+
+			  find: function(x, y, radius) {
+				var that = this,
+					i0, i1 = that._found || 0,
+					cell = that.cells[i1] || that.cells[i1 = 0],
+					dx = x - cell.site[0],
+					dy = y - cell.site[1],
+					d2 = dx * dx + dy * dy;
+
+				do {
+				  cell = that.cells[i0 = i1], i1 = null;
+				  cell.halfedges.forEach(function(e) {
+					var edge = that.edges[e], v = edge.left;
+					if ((v === cell.site || !v) && !(v = edge.right)) return;
+					var vx = x - v[0],
+						vy = y - v[1],
+						v2 = vx * vx + vy * vy;
+					if (v2 < d2) d2 = v2, i1 = v.index;
+				  });
+				} while (i1 !== null);
+
+				that._found = i0;
+
+				return radius == null || d2 <= radius * radius ? cell.site : null;
+			  }
+			};
+
+			var voronoi = function() {
+			  var x$$1 = x$4,
+				  y$$1 = y$4,
+				  extent = null;
+
+			  function voronoi(data) {
+				return new Diagram(data.map(function(d, i) {
+				  var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3];
+				  s.index = i;
+				  s.data = d;
+				  return s;
+				}), extent);
+			  }
+
+			  voronoi.polygons = function(data) {
+				return voronoi(data).polygons();
+			  };
+
+			  voronoi.links = function(data) {
+				return voronoi(data).links();
+			  };
+
+			  voronoi.triangles = function(data) {
+				return voronoi(data).triangles();
+			  };
+
+			  voronoi.x = function(_) {
+				return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1;
+			  };
+
+			  voronoi.y = function(_) {
+				return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1;
+			  };
+
+			  voronoi.extent = function(_) {
+				return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
+			  };
+
+			  voronoi.size = function(_) {
+				return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
+			  };
+
+			  return voronoi;
+			};
+
+			var constant$10 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function ZoomEvent(target, type, transform) {
+			  this.target = target;
+			  this.type = type;
+			  this.transform = transform;
+			}
+
+			function Transform(k, x, y) {
+			  this.k = k;
+			  this.x = x;
+			  this.y = y;
+			}
+
+			Transform.prototype = {
+			  constructor: Transform,
+			  scale: function(k) {
+				return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
+			  },
+			  translate: function(x, y) {
+				return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
+			  },
+			  apply: function(point) {
+				return [point[0] * this.k + this.x, point[1] * this.k + this.y];
+			  },
+			  applyX: function(x) {
+				return x * this.k + this.x;
+			  },
+			  applyY: function(y) {
+				return y * this.k + this.y;
+			  },
+			  invert: function(location) {
+				return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
+			  },
+			  invertX: function(x) {
+				return (x - this.x) / this.k;
+			  },
+			  invertY: function(y) {
+				return (y - this.y) / this.k;
+			  },
+			  rescaleX: function(x) {
+				return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
+			  },
+			  rescaleY: function(y) {
+				return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
+			  },
+			  toString: function() {
+				return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
+			  }
+			};
+
+			var identity$6 = new Transform(1, 0, 0);
+
+			transform.prototype = Transform.prototype;
+
+			function transform(node) {
+			  return node.__zoom || identity$6;
+			}
+
+			function nopropagation$1() {
+			  exports.event.stopImmediatePropagation();
+			}
+
+			var noevent$1 = function() {
+			  exports.event.preventDefault();
+			  exports.event.stopImmediatePropagation();
+			};
+
+			// Ignore right-click, since that should open the context menu.
+			function defaultFilter$1() {
+			  return !exports.event.button;
+			}
+
+			function defaultExtent() {
+			  var e = this, w, h;
+			  if (e instanceof SVGElement) {
+				e = e.ownerSVGElement || e;
+				w = e.width.baseVal.value;
+				h = e.height.baseVal.value;
+			  } else {
+				w = e.clientWidth;
+				h = e.clientHeight;
+			  }
+			  return [[0, 0], [w, h]];
+			}
+
+			function defaultTransform() {
+			  return this.__zoom || identity$6;
+			}
+
+			var zoom = function() {
+			  var filter = defaultFilter$1,
+				  extent = defaultExtent,
+				  k0 = 0,
+				  k1 = Infinity,
+				  x0 = -k1,
+				  x1 = k1,
+				  y0 = x0,
+				  y1 = x1,
+				  duration = 250,
+				  gestures = [],
+				  listeners = dispatch("start", "zoom", "end"),
+				  touchstarting,
+				  touchending,
+				  touchDelay = 500,
+				  wheelDelay = 150;
+
+			  function zoom(selection$$1) {
+				selection$$1
+					.on("wheel.zoom", wheeled)
+					.on("mousedown.zoom", mousedowned)
+					.on("dblclick.zoom", dblclicked)
+					.on("touchstart.zoom", touchstarted)
+					.on("touchmove.zoom", touchmoved)
+					.on("touchend.zoom touchcancel.zoom", touchended)
+					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+					.property("__zoom", defaultTransform);
+			  }
+
+			  zoom.transform = function(collection, transform) {
+				var selection$$1 = collection.selection ? collection.selection() : collection;
+				selection$$1.property("__zoom", defaultTransform);
+				if (collection !== selection$$1) {
+				  schedule(collection, transform);
+				} else {
+				  selection$$1.interrupt().each(function() {
+					gesture(this, arguments)
+						.start()
+						.zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
+						.end();
+				  });
+				}
+			  };
+
+			  zoom.scaleBy = function(selection$$1, k) {
+				zoom.scaleTo(selection$$1, function() {
+				  var k0 = this.__zoom.k,
+					  k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+				  return k0 * k1;
+				});
+			  };
+
+			  zoom.scaleTo = function(selection$$1, k) {
+				zoom.transform(selection$$1, function() {
+				  var e = extent.apply(this, arguments),
+					  t0 = this.__zoom,
+					  p0 = centroid(e),
+					  p1 = t0.invert(p0),
+					  k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+				  return constrain(translate(scale(t0, k1), p0, p1), e);
+				});
+			  };
+
+			  zoom.translateBy = function(selection$$1, x, y) {
+				zoom.transform(selection$$1, function() {
+				  return constrain(this.__zoom.translate(
+					typeof x === "function" ? x.apply(this, arguments) : x,
+					typeof y === "function" ? y.apply(this, arguments) : y
+				  ), extent.apply(this, arguments));
+				});
+			  };
+
+			  function scale(transform, k) {
+				k = Math.max(k0, Math.min(k1, k));
+				return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
+			  }
+
+			  function translate(transform, p0, p1) {
+				var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
+				return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
+			  }
+
+			  function constrain(transform, extent) {
+				var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),
+					dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);
+				return dx || dy ? transform.translate(dx, dy) : transform;
+			  }
+
+			  function centroid(extent) {
+				return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
+			  }
+
+			  function schedule(transition$$1, transform, center) {
+				transition$$1
+					.on("start.zoom", function() { gesture(this, arguments).start(); })
+					.on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
+					.tween("zoom", function() {
+					  var that = this,
+						  args = arguments,
+						  g = gesture(that, args),
+						  e = extent.apply(that, args),
+						  p = center || centroid(e),
+						  w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
+						  a = that.__zoom,
+						  b = typeof transform === "function" ? transform.apply(that, args) : transform,
+						  i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
+					  return function(t) {
+						if (t === 1) t = b; // Avoid rounding error on end.
+						else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
+						g.zoom(null, t);
+					  };
+					});
+			  }
+
+			  function gesture(that, args) {
+				for (var i = 0, n = gestures.length, g; i < n; ++i) {
+				  if ((g = gestures[i]).that === that) {
+					return g;
+				  }
+				}
+				return new Gesture(that, args);
+			  }
+
+			  function Gesture(that, args) {
+				this.that = that;
+				this.args = args;
+				this.index = -1;
+				this.active = 0;
+				this.extent = extent.apply(that, args);
+			  }
+
+			  Gesture.prototype = {
+				start: function() {
+				  if (++this.active === 1) {
+					this.index = gestures.push(this) - 1;
+					this.emit("start");
+				  }
+				  return this;
+				},
+				zoom: function(key, transform) {
+				  if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
+				  if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
+				  if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
+				  this.that.__zoom = transform;
+				  this.emit("zoom");
+				  return this;
+				},
+				end: function() {
+				  if (--this.active === 0) {
+					gestures.splice(this.index, 1);
+					this.index = -1;
+					this.emit("end");
+				  }
+				  return this;
+				},
+				emit: function(type) {
+				  customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
+				}
+			  };
+
+			  function wheeled() {
+				if (!filter.apply(this, arguments)) return;
+				var g = gesture(this, arguments),
+					t = this.__zoom,
+					k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
+					p = mouse(this);
+
+				// If the mouse is in the same location as before, reuse it.
+				// If there were recent wheel events, reset the wheel idle timeout.
+				if (g.wheel) {
+				  if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
+					g.mouse[1] = t.invert(g.mouse[0] = p);
+				  }
+				  clearTimeout(g.wheel);
+				}
+
+				// If this wheel event won’t trigger a transform change, ignore it.
+				else if (t.k === k) return;
+
+				// Otherwise, capture the mouse point and location at the start.
+				else {
+				  g.mouse = [p, t.invert(p)];
+				  interrupt(this);
+				  g.start();
+				}
+
+				noevent$1();
+				g.wheel = setTimeout(wheelidled, wheelDelay);
+				g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
+
+				function wheelidled() {
+				  g.wheel = null;
+				  g.end();
+				}
+			  }
+
+			  function mousedowned() {
+				if (touchending || !filter.apply(this, arguments)) return;
+				var g = gesture(this, arguments),
+					v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
+					p = mouse(this);
+
+				dragDisable(exports.event.view);
+				nopropagation$1();
+				g.mouse = [p, this.__zoom.invert(p)];
+				interrupt(this);
+				g.start();
+
+				function mousemoved() {
+				  noevent$1();
+				  g.moved = true;
+				  g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
+				}
+
+				function mouseupped() {
+				  v.on("mousemove.zoom mouseup.zoom", null);
+				  yesdrag(exports.event.view, g.moved);
+				  noevent$1();
+				  g.end();
+				}
+			  }
+
+			  function dblclicked() {
+				if (!filter.apply(this, arguments)) return;
+				var t0 = this.__zoom,
+					p0 = mouse(this),
+					p1 = t0.invert(p0),
+					k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
+					t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
+
+				noevent$1();
+				if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
+				else select(this).call(zoom.transform, t1);
+			  }
+
+			  function touchstarted() {
+				if (!filter.apply(this, arguments)) return;
+				var g = gesture(this, arguments),
+					touches$$1 = exports.event.changedTouches,
+					n = touches$$1.length, i, t, p;
+
+				nopropagation$1();
+				for (i = 0; i < n; ++i) {
+				  t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+				  p = [p, this.__zoom.invert(p), t.identifier];
+				  if (!g.touch0) g.touch0 = p;
+				  else if (!g.touch1) g.touch1 = p;
+				}
+				if (touchstarting) {
+				  touchstarting = clearTimeout(touchstarting);
+				  if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);
+				}
+				if (exports.event.touches.length === n) {
+				  touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
+				  interrupt(this);
+				  g.start();
+				}
+			  }
+
+			  function touchmoved() {
+				var g = gesture(this, arguments),
+					touches$$1 = exports.event.changedTouches,
+					n = touches$$1.length, i, t, p, l;
+
+				noevent$1();
+				if (touchstarting) touchstarting = clearTimeout(touchstarting);
+				for (i = 0; i < n; ++i) {
+				  t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+				  if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
+				  else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
+				}
+				t = g.that.__zoom;
+				if (g.touch1) {
+				  var p0 = g.touch0[0], l0 = g.touch0[1],
+					  p1 = g.touch1[0], l1 = g.touch1[1],
+					  dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
+					  dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
+				  t = scale(t, Math.sqrt(dp / dl));
+				  p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
+				  l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+				}
+				else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
+				else return;
+				g.zoom("touch", constrain(translate(t, p, l), g.extent));
+			  }
+
+			  function touchended() {
+				var g = gesture(this, arguments),
+					touches$$1 = exports.event.changedTouches,
+					n = touches$$1.length, i, t;
+
+				nopropagation$1();
+				if (touchending) clearTimeout(touchending);
+				touchending = setTimeout(function() { touchending = null; }, touchDelay);
+				for (i = 0; i < n; ++i) {
+				  t = touches$$1[i];
+				  if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
+				  else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
+				}
+				if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
+				if (!g.touch0) g.end();
+			  }
+
+			  zoom.filter = function(_) {
+				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter;
+			  };
+
+			  zoom.extent = function(_) {
+				return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
+			  };
+
+			  zoom.scaleExtent = function(_) {
+				return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
+			  };
+
+			  zoom.translateExtent = function(_) {
+				return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
+			  };
+
+			  zoom.duration = function(_) {
+				return arguments.length ? (duration = +_, zoom) : duration;
+			  };
+
+			  zoom.on = function() {
+				var value = listeners.on.apply(listeners, arguments);
+				return value === listeners ? zoom : value;
+			  };
+
+			  return zoom;
+			};
+
+			var constant$11 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var BrushEvent = function(target, type, selection) {
+			  this.target = target;
+			  this.type = type;
+			  this.selection = selection;
+			};
+
+			function nopropagation$2() {
+			  exports.event.stopImmediatePropagation();
+			}
+
+			var noevent$2 = function() {
+			  exports.event.preventDefault();
+			  exports.event.stopImmediatePropagation();
+			};
+
+			var MODE_DRAG = {name: "drag"};
+			var MODE_SPACE = {name: "space"};
+			var MODE_HANDLE = {name: "handle"};
+			var MODE_CENTER = {name: "center"};
+
+			var X = {
+			  name: "x",
+			  handles: ["e", "w"].map(type$1),
+			  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
+			  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
+			};
+
+			var Y = {
+			  name: "y",
+			  handles: ["n", "s"].map(type$1),
+			  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
+			  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
+			};
+
+			var XY = {
+			  name: "xy",
+			  handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1),
+			  input: function(xy) { return xy; },
+			  output: function(xy) { return xy; }
+			};
+
+			var cursors = {
+			  overlay: "crosshair",
+			  selection: "move",
+			  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 flipX = {
+			  e: "w",
+			  w: "e",
+			  nw: "ne",
+			  ne: "nw",
+			  se: "sw",
+			  sw: "se"
+			};
+
+			var flipY = {
+			  n: "s",
+			  s: "n",
+			  nw: "sw",
+			  ne: "se",
+			  se: "ne",
+			  sw: "nw"
+			};
+
+			var signsX = {
+			  overlay: +1,
+			  selection: +1,
+			  n: null,
+			  e: +1,
+			  s: null,
+			  w: -1,
+			  nw: -1,
+			  ne: +1,
+			  se: +1,
+			  sw: -1
+			};
+
+			var signsY = {
+			  overlay: +1,
+			  selection: +1,
+			  n: -1,
+			  e: null,
+			  s: +1,
+			  w: null,
+			  nw: -1,
+			  ne: -1,
+			  se: +1,
+			  sw: +1
+			};
+
+			function type$1(t) {
+			  return {type: t};
+			}
+
+			// Ignore right-click, since that should open the context menu.
+			function defaultFilter$2() {
+			  return !exports.event.button;
+			}
+
+			function defaultExtent$1() {
+			  var svg = this.ownerSVGElement || this;
+			  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
+			}
+
+			// Like d3.local, but with the name “__brush” rather than auto-generated.
+			function local$1(node) {
+			  while (!node.__brush) if (!(node = node.parentNode)) return;
+			  return node.__brush;
+			}
+
+			function empty$1(extent) {
+			  return extent[0][0] === extent[1][0]
+				  || extent[0][1] === extent[1][1];
+			}
+
+			function brushSelection(node) {
+			  var state = node.__brush;
+			  return state ? state.dim.output(state.selection) : null;
+			}
+
+			function brushX() {
+			  return brush$1(X);
+			}
+
+			function brushY() {
+			  return brush$1(Y);
+			}
+
+			var brush = function() {
+			  return brush$1(XY);
+			};
+
+			function brush$1(dim) {
+			  var extent = defaultExtent$1,
+				  filter = defaultFilter$2,
+				  listeners = dispatch(brush, "start", "brush", "end"),
+				  handleSize = 6,
+				  touchending;
+
+			  function brush(group) {
+				var overlay = group
+					.property("__brush", initialize)
+				  .selectAll(".overlay")
+				  .data([type$1("overlay")]);
+
+				overlay.enter().append("rect")
+					.attr("class", "overlay")
+					.attr("pointer-events", "all")
+					.attr("cursor", cursors.overlay)
+				  .merge(overlay)
+					.each(function() {
+					  var extent = local$1(this).extent;
+					  select(this)
+						  .attr("x", extent[0][0])
+						  .attr("y", extent[0][1])
+						  .attr("width", extent[1][0] - extent[0][0])
+						  .attr("height", extent[1][1] - extent[0][1]);
+					});
+
+				group.selectAll(".selection")
+				  .data([type$1("selection")])
+				  .enter().append("rect")
+					.attr("class", "selection")
+					.attr("cursor", cursors.selection)
+					.attr("fill", "#777")
+					.attr("fill-opacity", 0.3)
+					.attr("stroke", "#fff")
+					.attr("shape-rendering", "crispEdges");
+
+				var handle = group.selectAll(".handle")
+				  .data(dim.handles, function(d) { return d.type; });
+
+				handle.exit().remove();
+
+				handle.enter().append("rect")
+					.attr("class", function(d) { return "handle handle--" + d.type; })
+					.attr("cursor", function(d) { return cursors[d.type]; });
+
+				group
+					.each(redraw)
+					.attr("fill", "none")
+					.attr("pointer-events", "all")
+					.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+					.on("mousedown.brush touchstart.brush", started);
+			  }
+
+			  brush.move = function(group, selection$$1) {
+				if (group.selection) {
+				  group
+					  .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
+					  .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
+					  .tween("brush", function() {
+						var that = this,
+							state = that.__brush,
+							emit = emitter(that, arguments),
+							selection0 = state.selection,
+							selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
+							i = interpolate(selection0, selection1);
+
+						function tween(t) {
+						  state.selection = t === 1 && empty$1(selection1) ? null : i(t);
+						  redraw.call(that);
+						  emit.brush();
+						}
+
+						return selection0 && selection1 ? tween : tween(1);
+					  });
+				} else {
+				  group
+					  .each(function() {
+						var that = this,
+							args = arguments,
+							state = that.__brush,
+							selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
+							emit = emitter(that, args).beforestart();
+
+						interrupt(that);
+						state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
+						redraw.call(that);
+						emit.start().brush().end();
+					  });
+				}
+			  };
+
+			  function redraw() {
+				var group = select(this),
+					selection$$1 = local$1(this).selection;
+
+				if (selection$$1) {
+				  group.selectAll(".selection")
+					  .style("display", null)
+					  .attr("x", selection$$1[0][0])
+					  .attr("y", selection$$1[0][1])
+					  .attr("width", selection$$1[1][0] - selection$$1[0][0])
+					  .attr("height", selection$$1[1][1] - selection$$1[0][1]);
+
+				  group.selectAll(".handle")
+					  .style("display", null)
+					  .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
+					  .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
+					  .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
+					  .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
+				}
+
+				else {
+				  group.selectAll(".selection,.handle")
+					  .style("display", "none")
+					  .attr("x", null)
+					  .attr("y", null)
+					  .attr("width", null)
+					  .attr("height", null);
+				}
+			  }
+
+			  function emitter(that, args) {
+				return that.__brush.emitter || new Emitter(that, args);
+			  }
+
+			  function Emitter(that, args) {
+				this.that = that;
+				this.args = args;
+				this.state = that.__brush;
+				this.active = 0;
+			  }
+
+			  Emitter.prototype = {
+				beforestart: function() {
+				  if (++this.active === 1) this.state.emitter = this, this.starting = true;
+				  return this;
+				},
+				start: function() {
+				  if (this.starting) this.starting = false, this.emit("start");
+				  return this;
+				},
+				brush: function() {
+				  this.emit("brush");
+				  return this;
+				},
+				end: function() {
+				  if (--this.active === 0) delete this.state.emitter, this.emit("end");
+				  return this;
+				},
+				emit: function(type) {
+				  customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
+				}
+			  };
+
+			  function started() {
+				if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }
+				else if (touchending) return;
+				if (!filter.apply(this, arguments)) return;
+
+				var that = this,
+					type = exports.event.target.__data__.type,
+					mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
+					signX = dim === Y ? null : signsX[type],
+					signY = dim === X ? null : signsY[type],
+					state = local$1(that),
+					extent = state.extent,
+					selection$$1 = state.selection,
+					W = extent[0][0], w0, w1,
+					N = extent[0][1], n0, n1,
+					E = extent[1][0], e0, e1,
+					S = extent[1][1], s0, s1,
+					dx,
+					dy,
+					moving,
+					shifting = signX && signY && exports.event.shiftKey,
+					lockX,
+					lockY,
+					point0 = mouse(that),
+					point = point0,
+					emit = emitter(that, arguments).beforestart();
+
+				if (type === "overlay") {
+				  state.selection = selection$$1 = [
+					[w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
+					[e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
+				  ];
+				} else {
+				  w0 = selection$$1[0][0];
+				  n0 = selection$$1[0][1];
+				  e0 = selection$$1[1][0];
+				  s0 = selection$$1[1][1];
+				}
+
+				w1 = w0;
+				n1 = n0;
+				e1 = e0;
+				s1 = s0;
+
+				var group = select(that)
+					.attr("pointer-events", "none");
+
+				var overlay = group.selectAll(".overlay")
+					.attr("cursor", cursors[type]);
+
+				if (exports.event.touches) {
+				  group
+					  .on("touchmove.brush", moved, true)
+					  .on("touchend.brush touchcancel.brush", ended, true);
+				} else {
+				  var view = select(exports.event.view)
+					  .on("keydown.brush", keydowned, true)
+					  .on("keyup.brush", keyupped, true)
+					  .on("mousemove.brush", moved, true)
+					  .on("mouseup.brush", ended, true);
+
+				  dragDisable(exports.event.view);
+				}
+
+				nopropagation$2();
+				interrupt(that);
+				redraw.call(that);
+				emit.start();
+
+				function moved() {
+				  var point1 = mouse(that);
+				  if (shifting && !lockX && !lockY) {
+					if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
+					else lockX = true;
+				  }
+				  point = point1;
+				  moving = true;
+				  noevent$2();
+				  move();
+				}
+
+				function move() {
+				  var t;
+
+				  dx = point[0] - point0[0];
+				  dy = point[1] - point0[1];
+
+				  switch (mode) {
+					case MODE_SPACE:
+					case MODE_DRAG: {
+					  if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
+					  if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
+					  break;
+					}
+					case MODE_HANDLE: {
+					  if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
+					  else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
+					  if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
+					  else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
+					  break;
+					}
+					case MODE_CENTER: {
+					  if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
+					  if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
+					  break;
+					}
+				  }
+
+				  if (e1 < w1) {
+					signX *= -1;
+					t = w0, w0 = e0, e0 = t;
+					t = w1, w1 = e1, e1 = t;
+					if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
+				  }
+
+				  if (s1 < n1) {
+					signY *= -1;
+					t = n0, n0 = s0, s0 = t;
+					t = n1, n1 = s1, s1 = t;
+					if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
+				  }
+
+				  if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
+				  if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
+				  if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
+
+				  if (selection$$1[0][0] !== w1
+					  || selection$$1[0][1] !== n1
+					  || selection$$1[1][0] !== e1
+					  || selection$$1[1][1] !== s1) {
+					state.selection = [[w1, n1], [e1, s1]];
+					redraw.call(that);
+					emit.brush();
+				  }
+				}
+
+				function ended() {
+				  nopropagation$2();
+				  if (exports.event.touches) {
+					if (exports.event.touches.length) return;
+					if (touchending) clearTimeout(touchending);
+					touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+					group.on("touchmove.brush touchend.brush touchcancel.brush", null);
+				  } else {
+					yesdrag(exports.event.view, moving);
+					view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
+				  }
+				  group.attr("pointer-events", "all");
+				  overlay.attr("cursor", cursors.overlay);
+				  if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
+				  if (empty$1(selection$$1)) state.selection = null, redraw.call(that);
+				  emit.end();
+				}
+
+				function keydowned() {
+				  switch (exports.event.keyCode) {
+					case 16: { // SHIFT
+					  shifting = signX && signY;
+					  break;
+					}
+					case 18: { // ALT
+					  if (mode === MODE_HANDLE) {
+						if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+						if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+						mode = MODE_CENTER;
+						move();
+					  }
+					  break;
+					}
+					case 32: { // SPACE; takes priority over ALT
+					  if (mode === MODE_HANDLE || mode === MODE_CENTER) {
+						if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
+						if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
+						mode = MODE_SPACE;
+						overlay.attr("cursor", cursors.selection);
+						move();
+					  }
+					  break;
+					}
+					default: return;
+				  }
+				  noevent$2();
+				}
+
+				function keyupped() {
+				  switch (exports.event.keyCode) {
+					case 16: { // SHIFT
+					  if (shifting) {
+						lockX = lockY = shifting = false;
+						move();
+					  }
+					  break;
+					}
+					case 18: { // ALT
+					  if (mode === MODE_CENTER) {
+						if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+						if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+						mode = MODE_HANDLE;
+						move();
+					  }
+					  break;
+					}
+					case 32: { // SPACE
+					  if (mode === MODE_SPACE) {
+						if (exports.event.altKey) {
+						  if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+						  if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+						  mode = MODE_CENTER;
+						} else {
+						  if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+						  if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+						  mode = MODE_HANDLE;
+						}
+						overlay.attr("cursor", cursors[type]);
+						move();
+					  }
+					  break;
+					}
+					default: return;
+				  }
+				  noevent$2();
+				}
+			  }
+
+			  function initialize() {
+				var state = this.__brush || {selection: null};
+				state.extent = extent.apply(this, arguments);
+				state.dim = dim;
+				return state;
+			  }
+
+			  brush.extent = function(_) {
+				return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
+			  };
+
+			  brush.filter = function(_) {
+				return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter;
+			  };
+
+			  brush.handleSize = function(_) {
+				return arguments.length ? (handleSize = +_, brush) : handleSize;
+			  };
+
+			  brush.on = function() {
+				var value = listeners.on.apply(listeners, arguments);
+				return value === listeners ? brush : value;
+			  };
+
+			  return brush;
+			}
+
+			var cos = Math.cos;
+			var sin = Math.sin;
+			var pi$3 = Math.PI;
+			var halfPi$2 = pi$3 / 2;
+			var tau$3 = pi$3 * 2;
+			var max$1 = Math.max;
+
+			function compareValue(compare) {
+			  return function(a, b) {
+				return compare(
+				  a.source.value + a.target.value,
+				  b.source.value + b.target.value
+				);
+			  };
+			}
+
+			var chord = function() {
+			  var padAngle = 0,
+				  sortGroups = null,
+				  sortSubgroups = null,
+				  sortChords = null;
+
+			  function chord(matrix) {
+				var n = matrix.length,
+					groupSums = [],
+					groupIndex = range(n),
+					subgroupIndex = [],
+					chords = [],
+					groups = chords.groups = new Array(n),
+					subgroups = new Array(n * n),
+					k,
+					x,
+					x0,
+					dx,
+					i,
+					j;
+
+				// Compute the sum.
+				k = 0, i = -1; while (++i < n) {
+				  x = 0, j = -1; while (++j < n) {
+					x += matrix[i][j];
+				  }
+				  groupSums.push(x);
+				  subgroupIndex.push(range(n));
+				  k += x;
+				}
+
+				// Sort groups…
+				if (sortGroups) groupIndex.sort(function(a, b) {
+				  return sortGroups(groupSums[a], groupSums[b]);
+				});
+
+				// Sort subgroups…
+				if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
+				  d.sort(function(a, b) {
+					return sortSubgroups(matrix[i][a], matrix[i][b]);
+				  });
+				});
+
+				// Convert the sum to scaling factor for [0, 2pi].
+				// TODO Allow start and end angle to be specified?
+				// TODO Allow padding to be specified as percentage?
+				k = max$1(0, tau$3 - padAngle * n) / k;
+				dx = k ? padAngle : tau$3 / n;
+
+				// Compute the start and end angle for each group and subgroup.
+				// Note: Opera has a bug reordering object literal properties!
+				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[dj * n + di] = {
+					  index: di,
+					  subindex: dj,
+					  startAngle: a0,
+					  endAngle: a1,
+					  value: v
+					};
+				  }
+				  groups[di] = {
+					index: di,
+					startAngle: x0,
+					endAngle: x,
+					value: groupSums[di]
+				  };
+				  x += dx;
+				}
+
+				// Generate chords for each (non-empty) subgroup-subgroup link.
+				i = -1; while (++i < n) {
+				  j = i - 1; while (++j < n) {
+					var source = subgroups[j * n + i],
+						target = subgroups[i * n + j];
+					if (source.value || target.value) {
+					  chords.push(source.value < target.value
+						  ? {source: target, target: source}
+						  : {source: source, target: target});
+					}
+				  }
+				}
+
+				return sortChords ? chords.sort(sortChords) : chords;
+			  }
+
+			  chord.padAngle = function(_) {
+				return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
+			  };
+
+			  chord.sortGroups = function(_) {
+				return arguments.length ? (sortGroups = _, chord) : sortGroups;
+			  };
+
+			  chord.sortSubgroups = function(_) {
+				return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
+			  };
+
+			  chord.sortChords = function(_) {
+				return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
+			  };
+
+			  return chord;
+			};
+
+			var slice$5 = Array.prototype.slice;
+
+			var constant$12 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			function defaultSource(d) {
+			  return d.source;
+			}
+
+			function defaultTarget(d) {
+			  return d.target;
+			}
+
+			function defaultRadius$1(d) {
+			  return d.radius;
+			}
+
+			function defaultStartAngle(d) {
+			  return d.startAngle;
+			}
+
+			function defaultEndAngle(d) {
+			  return d.endAngle;
+			}
+
+			var ribbon = function() {
+			  var source = defaultSource,
+				  target = defaultTarget,
+				  radius = defaultRadius$1,
+				  startAngle = defaultStartAngle,
+				  endAngle = defaultEndAngle,
+				  context = null;
+
+			  function ribbon() {
+				var buffer,
+					argv = slice$5.call(arguments),
+					s = source.apply(this, argv),
+					t = target.apply(this, argv),
+					sr = +radius.apply(this, (argv[0] = s, argv)),
+					sa0 = startAngle.apply(this, argv) - halfPi$2,
+					sa1 = endAngle.apply(this, argv) - halfPi$2,
+					sx0 = sr * cos(sa0),
+					sy0 = sr * sin(sa0),
+					tr = +radius.apply(this, (argv[0] = t, argv)),
+					ta0 = startAngle.apply(this, argv) - halfPi$2,
+					ta1 = endAngle.apply(this, argv) - halfPi$2;
+
+				if (!context) context = buffer = path();
+
+				context.moveTo(sx0, sy0);
+				context.arc(0, 0, sr, sa0, sa1);
+				if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
+				  context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
+				  context.arc(0, 0, tr, ta0, ta1);
+				}
+				context.quadraticCurveTo(0, 0, sx0, sy0);
+				context.closePath();
+
+				if (buffer) return context = null, buffer + "" || null;
+			  }
+
+			  ribbon.radius = function(_) {
+				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius;
+			  };
+
+			  ribbon.startAngle = function(_) {
+				return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle;
+			  };
+
+			  ribbon.endAngle = function(_) {
+				return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle;
+			  };
+
+			  ribbon.source = function(_) {
+				return arguments.length ? (source = _, ribbon) : source;
+			  };
+
+			  ribbon.target = function(_) {
+				return arguments.length ? (target = _, ribbon) : target;
+			  };
+
+			  ribbon.context = function(_) {
+				return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
+			  };
+
+			  return ribbon;
+			};
+
+			// Adds floating point numbers with twice the normal precision.
+			// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
+			// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
+			// 305–363 (1997).
+			// Code adapted from GeographicLib by Charles F. F. Karney,
+			// http://geographiclib.sourceforge.net/
+
+			var adder = function() {
+			  return new Adder;
+			};
+
+			function Adder() {
+			  this.reset();
+			}
+
+			Adder.prototype = {
+			  constructor: Adder,
+			  reset: function() {
+				this.s = // rounded value
+				this.t = 0; // exact error
+			  },
+			  add: function(y) {
+				add$1(temp, y, this.t);
+				add$1(this, temp.s, this.s);
+				if (this.s) this.t += temp.t;
+				else this.s = temp.t;
+			  },
+			  valueOf: function() {
+				return this.s;
+			  }
+			};
+
+			var temp = new Adder;
+
+			function add$1(adder, a, b) {
+			  var x = adder.s = a + b,
+				  bv = x - a,
+				  av = x - bv;
+			  adder.t = (a - av) + (b - bv);
+			}
+
+			var epsilon$4 = 1e-6;
+			var epsilon2$2 = 1e-12;
+			var pi$4 = Math.PI;
+			var halfPi$3 = pi$4 / 2;
+			var quarterPi = pi$4 / 4;
+			var tau$4 = pi$4 * 2;
+
+			var degrees$1 = 180 / pi$4;
+			var radians = pi$4 / 180;
+
+			var abs = Math.abs;
+			var atan = Math.atan;
+			var atan2 = Math.atan2;
+			var cos$1 = Math.cos;
+			var ceil = Math.ceil;
+			var exp = Math.exp;
+
+			var log$1 = Math.log;
+			var pow$1 = Math.pow;
+			var sin$1 = Math.sin;
+			var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
+			var sqrt$1 = Math.sqrt;
+			var tan = Math.tan;
+
+			function acos(x) {
+			  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
+			}
+
+			function asin$1(x) {
+			  return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);
+			}
+
+			function haversin(x) {
+			  return (x = sin$1(x / 2)) * x;
+			}
+
+			function noop$2() {}
+
+			function streamGeometry(geometry, stream) {
+			  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
+				streamGeometryType[geometry.type](geometry, stream);
+			  }
+			}
+
+			var streamObjectType = {
+			  Feature: function(feature, stream) {
+				streamGeometry(feature.geometry, stream);
+			  },
+			  FeatureCollection: function(object, stream) {
+				var features = object.features, i = -1, n = features.length;
+				while (++i < n) streamGeometry(features[i].geometry, stream);
+			  }
+			};
+
+			var streamGeometryType = {
+			  Sphere: function(object, stream) {
+				stream.sphere();
+			  },
+			  Point: function(object, stream) {
+				object = object.coordinates;
+				stream.point(object[0], object[1], object[2]);
+			  },
+			  MultiPoint: function(object, stream) {
+				var coordinates = object.coordinates, i = -1, n = coordinates.length;
+				while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
+			  },
+			  LineString: function(object, stream) {
+				streamLine(object.coordinates, stream, 0);
+			  },
+			  MultiLineString: function(object, stream) {
+				var coordinates = object.coordinates, i = -1, n = coordinates.length;
+				while (++i < n) streamLine(coordinates[i], stream, 0);
+			  },
+			  Polygon: function(object, stream) {
+				streamPolygon(object.coordinates, stream);
+			  },
+			  MultiPolygon: function(object, stream) {
+				var coordinates = object.coordinates, i = -1, n = coordinates.length;
+				while (++i < n) streamPolygon(coordinates[i], stream);
+			  },
+			  GeometryCollection: function(object, stream) {
+				var geometries = object.geometries, i = -1, n = geometries.length;
+				while (++i < n) streamGeometry(geometries[i], stream);
+			  }
+			};
+
+			function streamLine(coordinates, stream, closed) {
+			  var i = -1, n = coordinates.length - closed, coordinate;
+			  stream.lineStart();
+			  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
+			  stream.lineEnd();
+			}
+
+			function streamPolygon(coordinates, stream) {
+			  var i = -1, n = coordinates.length;
+			  stream.polygonStart();
+			  while (++i < n) streamLine(coordinates[i], stream, 1);
+			  stream.polygonEnd();
+			}
+
+			var geoStream = function(object, stream) {
+			  if (object && streamObjectType.hasOwnProperty(object.type)) {
+				streamObjectType[object.type](object, stream);
+			  } else {
+				streamGeometry(object, stream);
+			  }
+			};
+
+			var areaRingSum = adder();
+
+			var areaSum = adder();
+			var lambda00;
+			var phi00;
+			var lambda0;
+			var cosPhi0;
+			var sinPhi0;
+
+			var areaStream = {
+			  point: noop$2,
+			  lineStart: noop$2,
+			  lineEnd: noop$2,
+			  polygonStart: function() {
+				areaRingSum.reset();
+				areaStream.lineStart = areaRingStart;
+				areaStream.lineEnd = areaRingEnd;
+			  },
+			  polygonEnd: function() {
+				var areaRing = +areaRingSum;
+				areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);
+				this.lineStart = this.lineEnd = this.point = noop$2;
+			  },
+			  sphere: function() {
+				areaSum.add(tau$4);
+			  }
+			};
+
+			function areaRingStart() {
+			  areaStream.point = areaPointFirst;
+			}
+
+			function areaRingEnd() {
+			  areaPoint(lambda00, phi00);
+			}
+
+			function areaPointFirst(lambda, phi) {
+			  areaStream.point = areaPoint;
+			  lambda00 = lambda, phi00 = phi;
+			  lambda *= radians, phi *= radians;
+			  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
+			}
+
+			function areaPoint(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  phi = phi / 2 + quarterPi; // half the angular distance from south pole
+
+			  // Spherical excess E for a spherical triangle with vertices: south pole,
+			  // previous point, current point.  Uses a formula derived from Cagnoli’s
+			  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
+			  var dLambda = lambda - lambda0,
+				  sdLambda = dLambda >= 0 ? 1 : -1,
+				  adLambda = sdLambda * dLambda,
+				  cosPhi = cos$1(phi),
+				  sinPhi = sin$1(phi),
+				  k = sinPhi0 * sinPhi,
+				  u = cosPhi0 * cosPhi + k * cos$1(adLambda),
+				  v = k * sdLambda * sin$1(adLambda);
+			  areaRingSum.add(atan2(v, u));
+
+			  // Advance the previous points.
+			  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
+			}
+
+			var area$2 = function(object) {
+			  areaSum.reset();
+			  geoStream(object, areaStream);
+			  return areaSum * 2;
+			};
+
+			function spherical(cartesian) {
+			  return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];
+			}
+
+			function cartesian(spherical) {
+			  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
+			  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
+			}
+
+			function cartesianDot(a, b) {
+			  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+			}
+
+			function 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]];
+			}
+
+			// TODO return a
+			function cartesianAddInPlace(a, b) {
+			  a[0] += b[0], a[1] += b[1], a[2] += b[2];
+			}
+
+			function cartesianScale(vector, k) {
+			  return [vector[0] * k, vector[1] * k, vector[2] * k];
+			}
+
+			// TODO return d
+			function cartesianNormalizeInPlace(d) {
+			  var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
+			  d[0] /= l, d[1] /= l, d[2] /= l;
+			}
+
+			var lambda0$1;
+			var phi0;
+			var lambda1;
+			var phi1;
+			var lambda2;
+			var lambda00$1;
+			var phi00$1;
+			var p0;
+			var deltaSum = adder();
+			var ranges;
+			var range$1;
+
+			var boundsStream = {
+			  point: boundsPoint,
+			  lineStart: boundsLineStart,
+			  lineEnd: boundsLineEnd,
+			  polygonStart: function() {
+				boundsStream.point = boundsRingPoint;
+				boundsStream.lineStart = boundsRingStart;
+				boundsStream.lineEnd = boundsRingEnd;
+				deltaSum.reset();
+				areaStream.polygonStart();
+			  },
+			  polygonEnd: function() {
+				areaStream.polygonEnd();
+				boundsStream.point = boundsPoint;
+				boundsStream.lineStart = boundsLineStart;
+				boundsStream.lineEnd = boundsLineEnd;
+				if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
+				else if (deltaSum > epsilon$4) phi1 = 90;
+				else if (deltaSum < -epsilon$4) phi0 = -90;
+				range$1[0] = lambda0$1, range$1[1] = lambda1;
+			  }
+			};
+
+			function boundsPoint(lambda, phi) {
+			  ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
+			  if (phi < phi0) phi0 = phi;
+			  if (phi > phi1) phi1 = phi;
+			}
+
+			function linePoint(lambda, phi) {
+			  var p = cartesian([lambda * radians, phi * radians]);
+			  if (p0) {
+				var normal = cartesianCross(p0, p),
+					equatorial = [normal[1], -normal[0], 0],
+					inflection = cartesianCross(equatorial, normal);
+				cartesianNormalizeInPlace(inflection);
+				inflection = spherical(inflection);
+				var delta = lambda - lambda2,
+					sign$$1 = delta > 0 ? 1 : -1,
+					lambdai = inflection[0] * degrees$1 * sign$$1,
+					phii,
+					antimeridian = abs(delta) > 180;
+				if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+				  phii = inflection[1] * degrees$1;
+				  if (phii > phi1) phi1 = phii;
+				} else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+				  phii = -inflection[1] * degrees$1;
+				  if (phii < phi0) phi0 = phii;
+				} else {
+				  if (phi < phi0) phi0 = phi;
+				  if (phi > phi1) phi1 = phi;
+				}
+				if (antimeridian) {
+				  if (lambda < lambda2) {
+					if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+				  } else {
+					if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+				  }
+				} else {
+				  if (lambda1 >= lambda0$1) {
+					if (lambda < lambda0$1) lambda0$1 = lambda;
+					if (lambda > lambda1) lambda1 = lambda;
+				  } else {
+					if (lambda > lambda2) {
+					  if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+					} else {
+					  if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+					}
+				  }
+				}
+			  } else {
+				boundsPoint(lambda, phi);
+			  }
+			  p0 = p, lambda2 = lambda;
+			}
+
+			function boundsLineStart() {
+			  boundsStream.point = linePoint;
+			}
+
+			function boundsLineEnd() {
+			  range$1[0] = lambda0$1, range$1[1] = lambda1;
+			  boundsStream.point = boundsPoint;
+			  p0 = null;
+			}
+
+			function boundsRingPoint(lambda, phi) {
+			  if (p0) {
+				var delta = lambda - lambda2;
+				deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
+			  } else {
+				lambda00$1 = lambda, phi00$1 = phi;
+			  }
+			  areaStream.point(lambda, phi);
+			  linePoint(lambda, phi);
+			}
+
+			function boundsRingStart() {
+			  areaStream.lineStart();
+			}
+
+			function boundsRingEnd() {
+			  boundsRingPoint(lambda00$1, phi00$1);
+			  areaStream.lineEnd();
+			  if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);
+			  range$1[0] = lambda0$1, range$1[1] = lambda1;
+			  p0 = null;
+			}
+
+			// Finds the left-right distance between two longitudes.
+			// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
+			// the distance between ±180° to be 360°.
+			function angle(lambda0, lambda1) {
+			  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
+			}
+
+			function rangeCompare(a, b) {
+			  return a[0] - b[0];
+			}
+
+			function rangeContains(range, x) {
+			  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
+			}
+
+			var bounds = function(feature) {
+			  var i, n, a, b, merged, deltaMax, delta;
+
+			  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
+			  ranges = [];
+			  geoStream(feature, boundsStream);
+
+			  // First, sort ranges by their minimum longitudes.
+			  if (n = ranges.length) {
+				ranges.sort(rangeCompare);
+
+				// Then, merge any ranges that overlap.
+				for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
+				  b = ranges[i];
+				  if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
+					if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
+					if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
+				  } else {
+					merged.push(a = b);
+				  }
+				}
+
+				// Finally, find the largest gap between the merged ranges.
+				// The final bounding box will be the inverse of this gap.
+				for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
+				  b = merged[i];
+				  if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
+				}
+			  }
+
+			  ranges = range$1 = null;
+
+			  return lambda0$1 === Infinity || phi0 === Infinity
+				  ? [[NaN, NaN], [NaN, NaN]]
+				  : [[lambda0$1, phi0], [lambda1, phi1]];
+			};
+
+			var W0;
+			var W1;
+			var X0;
+			var Y0;
+			var Z0;
+			var X1;
+			var Y1;
+			var Z1;
+			var X2;
+			var Y2;
+			var Z2;
+			var lambda00$2;
+			var phi00$2;
+			var x0;
+			var y0;
+			var z0; // previous point
+
+			var centroidStream = {
+			  sphere: noop$2,
+			  point: centroidPoint,
+			  lineStart: centroidLineStart,
+			  lineEnd: centroidLineEnd,
+			  polygonStart: function() {
+				centroidStream.lineStart = centroidRingStart;
+				centroidStream.lineEnd = centroidRingEnd;
+			  },
+			  polygonEnd: function() {
+				centroidStream.lineStart = centroidLineStart;
+				centroidStream.lineEnd = centroidLineEnd;
+			  }
+			};
+
+			// Arithmetic mean of Cartesian vectors.
+			function centroidPoint(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  var cosPhi = cos$1(phi);
+			  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
+			}
+
+			function centroidPointCartesian(x, y, z) {
+			  ++W0;
+			  X0 += (x - X0) / W0;
+			  Y0 += (y - Y0) / W0;
+			  Z0 += (z - Z0) / W0;
+			}
+
+			function centroidLineStart() {
+			  centroidStream.point = centroidLinePointFirst;
+			}
+
+			function centroidLinePointFirst(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  var cosPhi = cos$1(phi);
+			  x0 = cosPhi * cos$1(lambda);
+			  y0 = cosPhi * sin$1(lambda);
+			  z0 = sin$1(phi);
+			  centroidStream.point = centroidLinePoint;
+			  centroidPointCartesian(x0, y0, z0);
+			}
+
+			function centroidLinePoint(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  var cosPhi = cos$1(phi),
+				  x = cosPhi * cos$1(lambda),
+				  y = cosPhi * sin$1(lambda),
+				  z = sin$1(phi),
+				  w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
+			  W1 += w;
+			  X1 += w * (x0 + (x0 = x));
+			  Y1 += w * (y0 + (y0 = y));
+			  Z1 += w * (z0 + (z0 = z));
+			  centroidPointCartesian(x0, y0, z0);
+			}
+
+			function centroidLineEnd() {
+			  centroidStream.point = centroidPoint;
+			}
+
+			// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
+			// J. Applied Mechanics 42, 239 (1975).
+			function centroidRingStart() {
+			  centroidStream.point = centroidRingPointFirst;
+			}
+
+			function centroidRingEnd() {
+			  centroidRingPoint(lambda00$2, phi00$2);
+			  centroidStream.point = centroidPoint;
+			}
+
+			function centroidRingPointFirst(lambda, phi) {
+			  lambda00$2 = lambda, phi00$2 = phi;
+			  lambda *= radians, phi *= radians;
+			  centroidStream.point = centroidRingPoint;
+			  var cosPhi = cos$1(phi);
+			  x0 = cosPhi * cos$1(lambda);
+			  y0 = cosPhi * sin$1(lambda);
+			  z0 = sin$1(phi);
+			  centroidPointCartesian(x0, y0, z0);
+			}
+
+			function centroidRingPoint(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  var cosPhi = cos$1(phi),
+				  x = cosPhi * cos$1(lambda),
+				  y = cosPhi * sin$1(lambda),
+				  z = sin$1(phi),
+				  cx = y0 * z - z0 * y,
+				  cy = z0 * x - x0 * z,
+				  cz = x0 * y - y0 * x,
+				  m = sqrt$1(cx * cx + cy * cy + cz * cz),
+				  u = x0 * x + y0 * y + z0 * z,
+				  v = m && -acos(u) / m, // area weight
+				  w = atan2(m, u); // line weight
+			  X2 += v * cx;
+			  Y2 += v * cy;
+			  Z2 += v * cz;
+			  W1 += w;
+			  X1 += w * (x0 + (x0 = x));
+			  Y1 += w * (y0 + (y0 = y));
+			  Z1 += w * (z0 + (z0 = z));
+			  centroidPointCartesian(x0, y0, z0);
+			}
+
+			var centroid$1 = function(object) {
+			  W0 = W1 =
+			  X0 = Y0 = Z0 =
+			  X1 = Y1 = Z1 =
+			  X2 = Y2 = Z2 = 0;
+			  geoStream(object, centroidStream);
+
+			  var x = X2,
+				  y = Y2,
+				  z = Z2,
+				  m = x * x + y * y + z * z;
+
+			  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
+			  if (m < epsilon2$2) {
+				x = X1, y = Y1, z = Z1;
+				// If the feature has zero length, fall back to arithmetic mean of point vectors.
+				if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;
+				m = x * x + y * y + z * z;
+				// If the feature still has an undefined ccentroid, then return.
+				if (m < epsilon2$2) return [NaN, NaN];
+			  }
+
+			  return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];
+			};
+
+			var constant$13 = function(x) {
+			  return function() {
+				return x;
+			  };
+			};
+
+			var compose = function(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 rotationIdentity(lambda, phi) {
+			  return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+			}
+
+			rotationIdentity.invert = rotationIdentity;
+
+			function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
+			  return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
+				: rotationLambda(deltaLambda))
+				: (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
+				: rotationIdentity);
+			}
+
+			function forwardRotationLambda(deltaLambda) {
+			  return function(lambda, phi) {
+				return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+			  };
+			}
+
+			function rotationLambda(deltaLambda) {
+			  var rotation = forwardRotationLambda(deltaLambda);
+			  rotation.invert = forwardRotationLambda(-deltaLambda);
+			  return rotation;
+			}
+
+			function rotationPhiGamma(deltaPhi, deltaGamma) {
+			  var cosDeltaPhi = cos$1(deltaPhi),
+				  sinDeltaPhi = sin$1(deltaPhi),
+				  cosDeltaGamma = cos$1(deltaGamma),
+				  sinDeltaGamma = sin$1(deltaGamma);
+
+			  function rotation(lambda, phi) {
+				var cosPhi = cos$1(phi),
+					x = cos$1(lambda) * cosPhi,
+					y = sin$1(lambda) * cosPhi,
+					z = sin$1(phi),
+					k = z * cosDeltaPhi + x * sinDeltaPhi;
+				return [
+				  atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
+				  asin$1(k * cosDeltaGamma + y * sinDeltaGamma)
+				];
+			  }
+
+			  rotation.invert = function(lambda, phi) {
+				var cosPhi = cos$1(phi),
+					x = cos$1(lambda) * cosPhi,
+					y = sin$1(lambda) * cosPhi,
+					z = sin$1(phi),
+					k = z * cosDeltaGamma - y * sinDeltaGamma;
+				return [
+				  atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
+				  asin$1(k * cosDeltaPhi - x * sinDeltaPhi)
+				];
+			  };
+
+			  return rotation;
+			}
+
+			var rotation = function(rotate) {
+			  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
+
+			  function forward(coordinates) {
+				coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
+				return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+			  }
+
+			  forward.invert = function(coordinates) {
+				coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
+				return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+			  };
+
+			  return forward;
+			};
+
+			// Generates a circle centered at [0°, 0°], with a given radius and precision.
+			function circleStream(stream, radius, delta, direction, t0, t1) {
+			  if (!delta) return;
+			  var cosRadius = cos$1(radius),
+				  sinRadius = sin$1(radius),
+				  step = direction * delta;
+			  if (t0 == null) {
+				t0 = radius + direction * tau$4;
+				t1 = radius - step / 2;
+			  } else {
+				t0 = circleRadius(cosRadius, t0);
+				t1 = circleRadius(cosRadius, t1);
+				if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;
+			  }
+			  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
+				point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
+				stream.point(point[0], point[1]);
+			  }
+			}
+
+			// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
+			function circleRadius(cosRadius, point) {
+			  point = cartesian(point), point[0] -= cosRadius;
+			  cartesianNormalizeInPlace(point);
+			  var radius = acos(-point[1]);
+			  return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;
+			}
+
+			var circle$1 = function() {
+			  var center = constant$13([0, 0]),
+				  radius = constant$13(90),
+				  precision = constant$13(6),
+				  ring,
+				  rotate,
+				  stream = {point: point};
+
+			  function point(x, y) {
+				ring.push(x = rotate(x, y));
+				x[0] *= degrees$1, x[1] *= degrees$1;
+			  }
+
+			  function circle() {
+				var c = center.apply(this, arguments),
+					r = radius.apply(this, arguments) * radians,
+					p = precision.apply(this, arguments) * radians;
+				ring = [];
+				rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
+				circleStream(stream, r, p, 1);
+				c = {type: "Polygon", coordinates: [ring]};
+				ring = rotate = null;
+				return c;
+			  }
+
+			  circle.center = function(_) {
+				return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center;
+			  };
+
+			  circle.radius = function(_) {
+				return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius;
+			  };
+
+			  circle.precision = function(_) {
+				return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision;
+			  };
+
+			  return circle;
+			};
+
+			var clipBuffer = function() {
+			  var lines = [],
+				  line;
+			  return {
+				point: function(x, y) {
+				  line.push([x, y]);
+				},
+				lineStart: function() {
+				  lines.push(line = []);
+				},
+				lineEnd: noop$2,
+				rejoin: function() {
+				  if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
+				},
+				result: function() {
+				  var result = lines;
+				  lines = [];
+				  line = null;
+				  return result;
+				}
+			  };
+			};
+
+			var clipLine = function(a, b, x0, y0, x1, y1) {
+			  var ax = a[0],
+				  ay = a[1],
+				  bx = b[0],
+				  by = b[1],
+				  t0 = 0,
+				  t1 = 1,
+				  dx = bx - ax,
+				  dy = by - ay,
+				  r;
+
+			  r = x0 - ax;
+			  if (!dx && r > 0) return;
+			  r /= dx;
+			  if (dx < 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  } else if (dx > 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  }
+
+			  r = x1 - ax;
+			  if (!dx && r < 0) return;
+			  r /= dx;
+			  if (dx < 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  } else if (dx > 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  }
+
+			  r = y0 - ay;
+			  if (!dy && r > 0) return;
+			  r /= dy;
+			  if (dy < 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  } else if (dy > 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  }
+
+			  r = y1 - ay;
+			  if (!dy && r < 0) return;
+			  r /= dy;
+			  if (dy < 0) {
+				if (r > t1) return;
+				if (r > t0) t0 = r;
+			  } else if (dy > 0) {
+				if (r < t0) return;
+				if (r < t1) t1 = r;
+			  }
+
+			  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
+			  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
+			  return true;
+			};
+
+			var pointEqual = function(a, b) {
+			  return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;
+			};
+
+			function Intersection(point, points, other, entry) {
+			  this.x = point;
+			  this.z = points;
+			  this.o = other; // another intersection
+			  this.e = entry; // is an entry?
+			  this.v = false; // visited
+			  this.n = this.p = null; // next & previous
+			}
+
+			// A generalized polygon clipping algorithm: given a polygon that has been cut
+			// into its visible line segments, and rejoins the segments by interpolating
+			// along the clip edge.
+			var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
+			  var subject = [],
+				  clip = [],
+				  i,
+				  n;
+
+			  segments.forEach(function(segment) {
+				if ((n = segment.length - 1) <= 0) return;
+				var n, p0 = segment[0], p1 = segment[n], x;
+
+				// If the first and last points of a segment are coincident, then treat as a
+				// closed ring. TODO if all rings are closed, then the winding order of the
+				// exterior ring should be checked.
+				if (pointEqual(p0, p1)) {
+				  stream.lineStart();
+				  for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
+				  stream.lineEnd();
+				  return;
+				}
+
+				subject.push(x = new Intersection(p0, segment, null, true));
+				clip.push(x.o = new Intersection(p0, null, x, false));
+				subject.push(x = new Intersection(p1, segment, null, false));
+				clip.push(x.o = new Intersection(p1, null, x, true));
+			  });
+
+			  if (!subject.length) return;
+
+			  clip.sort(compareIntersection);
+			  link$1(subject);
+			  link$1(clip);
+
+			  for (i = 0, n = clip.length; i < n; ++i) {
+				clip[i].e = startInside = !startInside;
+			  }
+
+			  var start = subject[0],
+				  points,
+				  point;
+
+			  while (1) {
+				// Find first unvisited intersection.
+				var current = start,
+					isSubject = true;
+				while (current.v) if ((current = current.n) === start) return;
+				points = current.z;
+				stream.lineStart();
+				do {
+				  current.v = current.o.v = true;
+				  if (current.e) {
+					if (isSubject) {
+					  for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
+					} else {
+					  interpolate(current.x, current.n.x, 1, stream);
+					}
+					current = current.n;
+				  } else {
+					if (isSubject) {
+					  points = current.p.z;
+					  for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
+					} else {
+					  interpolate(current.x, current.p.x, -1, stream);
+					}
+					current = current.p;
+				  }
+				  current = current.o;
+				  points = current.z;
+				  isSubject = !isSubject;
+				} while (!current.v);
+				stream.lineEnd();
+			  }
+			};
+
+			function link$1(array) {
+			  if (!(n = array.length)) return;
+			  var n,
+				  i = 0,
+				  a = array[0],
+				  b;
+			  while (++i < n) {
+				a.n = b = array[i];
+				b.p = a;
+				a = b;
+			  }
+			  a.n = b = array[0];
+			  b.p = a;
+			}
+
+			var clipMax = 1e9;
+			var clipMin = -clipMax;
+
+			// TODO Use d3-polygon’s polygonContains here for the ring check?
+			// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
+
+			function clipExtent(x0, y0, x1, y1) {
+
+			  function visible(x, y) {
+				return x0 <= x && x <= x1 && y0 <= y && y <= y1;
+			  }
+
+			  function interpolate(from, to, direction, stream) {
+				var a = 0, a1 = 0;
+				if (from == null
+					|| (a = corner(from, direction)) !== (a1 = corner(to, direction))
+					|| comparePoint(from, to) < 0 ^ direction > 0) {
+				  do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
+				  while ((a = (a + direction + 4) % 4) !== a1);
+				} else {
+				  stream.point(to[0], to[1]);
+				}
+			  }
+
+			  function corner(p, direction) {
+				return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3
+					: abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1
+					: abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0
+					: direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
+			  }
+
+			  function compareIntersection(a, b) {
+				return comparePoint(a.x, b.x);
+			  }
+
+			  function comparePoint(a, b) {
+				var ca = corner(a, 1),
+					cb = corner(b, 1);
+				return ca !== cb ? ca - cb
+					: ca === 0 ? b[1] - a[1]
+					: ca === 1 ? a[0] - b[0]
+					: ca === 2 ? a[1] - b[1]
+					: b[0] - a[0];
+			  }
+
+			  return function(stream) {
+				var activeStream = stream,
+					bufferStream = clipBuffer(),
+					segments,
+					polygon,
+					ring,
+					x__, y__, v__, // first point
+					x_, y_, v_, // previous point
+					first,
+					clean;
+
+				var clipStream = {
+				  point: point,
+				  lineStart: lineStart,
+				  lineEnd: lineEnd,
+				  polygonStart: polygonStart,
+				  polygonEnd: polygonEnd
+				};
+
+				function point(x, y) {
+				  if (visible(x, y)) activeStream.point(x, y);
+				}
+
+				function polygonInside() {
+				  var winding = 0;
+
+				  for (var i = 0, n = polygon.length; i < n; ++i) {
+					for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
+					  a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
+					  if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
+					  else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
+					}
+				  }
+
+				  return winding;
+				}
+
+				// Buffer geometry within a polygon and then clip it en masse.
+				function polygonStart() {
+				  activeStream = bufferStream, segments = [], polygon = [], clean = true;
+				}
+
+				function polygonEnd() {
+				  var startInside = polygonInside(),
+					  cleanInside = clean && startInside,
+					  visible = (segments = merge(segments)).length;
+				  if (cleanInside || visible) {
+					stream.polygonStart();
+					if (cleanInside) {
+					  stream.lineStart();
+					  interpolate(null, null, 1, stream);
+					  stream.lineEnd();
+					}
+					if (visible) {
+					  clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
+					}
+					stream.polygonEnd();
+				  }
+				  activeStream = stream, segments = polygon = ring = null;
+				}
+
+				function lineStart() {
+				  clipStream.point = linePoint;
+				  if (polygon) polygon.push(ring = []);
+				  first = true;
+				  v_ = false;
+				  x_ = y_ = NaN;
+				}
+
+				// TODO rather than special-case polygons, simply handle them separately.
+				// Ideally, coincident intersection points should be jittered to avoid
+				// clipping issues.
+				function lineEnd() {
+				  if (segments) {
+					linePoint(x__, y__);
+					if (v__ && v_) bufferStream.rejoin();
+					segments.push(bufferStream.result());
+				  }
+				  clipStream.point = point;
+				  if (v_) activeStream.lineEnd();
+				}
+
+				function linePoint(x, y) {
+				  var v = visible(x, y);
+				  if (polygon) ring.push([x, y]);
+				  if (first) {
+					x__ = x, y__ = y, v__ = v;
+					first = false;
+					if (v) {
+					  activeStream.lineStart();
+					  activeStream.point(x, y);
+					}
+				  } else {
+					if (v && v_) activeStream.point(x, y);
+					else {
+					  var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
+						  b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
+					  if (clipLine(a, b, x0, y0, x1, y1)) {
+						if (!v_) {
+						  activeStream.lineStart();
+						  activeStream.point(a[0], a[1]);
+						}
+						activeStream.point(b[0], b[1]);
+						if (!v) activeStream.lineEnd();
+						clean = false;
+					  } else if (v) {
+						activeStream.lineStart();
+						activeStream.point(x, y);
+						clean = false;
+					  }
+					}
+				  }
+				  x_ = x, y_ = y, v_ = v;
+				}
+
+				return clipStream;
+			  };
+			}
+
+			var extent$1 = function() {
+			  var x0 = 0,
+				  y0 = 0,
+				  x1 = 960,
+				  y1 = 500,
+				  cache,
+				  cacheStream,
+				  clip;
+
+			  return clip = {
+				stream: function(stream) {
+				  return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
+				},
+				extent: function(_) {
+				  return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
+				}
+			  };
+			};
+
+			var lengthSum = adder();
+			var lambda0$2;
+			var sinPhi0$1;
+			var cosPhi0$1;
+
+			var lengthStream = {
+			  sphere: noop$2,
+			  point: noop$2,
+			  lineStart: lengthLineStart,
+			  lineEnd: noop$2,
+			  polygonStart: noop$2,
+			  polygonEnd: noop$2
+			};
+
+			function lengthLineStart() {
+			  lengthStream.point = lengthPointFirst;
+			  lengthStream.lineEnd = lengthLineEnd;
+			}
+
+			function lengthLineEnd() {
+			  lengthStream.point = lengthStream.lineEnd = noop$2;
+			}
+
+			function lengthPointFirst(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
+			  lengthStream.point = lengthPoint;
+			}
+
+			function lengthPoint(lambda, phi) {
+			  lambda *= radians, phi *= radians;
+			  var sinPhi = sin$1(phi),
+				  cosPhi = cos$1(phi),
+				  delta = abs(lambda - lambda0$2),
+				  cosDelta = cos$1(delta),
+				  sinDelta = sin$1(delta),
+				  x = cosPhi * sinDelta,
+				  y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
+				  z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
+			  lengthSum.add(atan2(sqrt$1(x * x + y * y), z));
+			  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
+			}
+
+			var length$2 = function(object) {
+			  lengthSum.reset();
+			  geoStream(object, lengthStream);
+			  return +lengthSum;
+			};
+
+			var coordinates = [null, null];
+			var object$1 = {type: "LineString", coordinates: coordinates};
+
+			var distance = function(a, b) {
+			  coordinates[0] = a;
+			  coordinates[1] = b;
+			  return length$2(object$1);
+			};
+
+			function graticuleX(y0, y1, dy) {
+			  var y = range(y0, y1 - epsilon$4, dy).concat(y1);
+			  return function(x) { return y.map(function(y) { return [x, y]; }); };
+			}
+
+			function graticuleY(x0, x1, dx) {
+			  var x = range(x0, x1 - epsilon$4, dx).concat(x1);
+			  return function(y) { return x.map(function(x) { return [x, y]; }); };
+			}
+
+			function graticule() {
+			  var x1, x0, X1, X0,
+				  y1, y0, Y1, Y0,
+				  dx = 10, dy = dx, DX = 90, DY = 360,
+				  x, y, X, Y,
+				  precision = 2.5;
+
+			  function graticule() {
+				return {type: "MultiLineString", coordinates: lines()};
+			  }
+
+			  function lines() {
+				return range(ceil(X0 / DX) * DX, X1, DX).map(X)
+					.concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
+					.concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))
+					.concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).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 graticule.extentMinor();
+				return graticule.extentMajor(_).extentMinor(_);
+			  };
+
+			  graticule.extentMajor = 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.extentMinor = 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 graticule.stepMinor();
+				return graticule.stepMajor(_).stepMinor(_);
+			  };
+
+			  graticule.stepMajor = function(_) {
+				if (!arguments.length) return [DX, DY];
+				DX = +_[0], DY = +_[1];
+				return graticule;
+			  };
+
+			  graticule.stepMinor = function(_) {
+				if (!arguments.length) return [dx, dy];
+				dx = +_[0], dy = +_[1];
+				return graticule;
+			  };
+
+			  graticule.precision = function(_) {
+				if (!arguments.length) return precision;
+				precision = +_;
+				x = graticuleX(y0, y1, 90);
+				y = graticuleY(x0, x1, precision);
+				X = graticuleX(Y0, Y1, 90);
+				Y = graticuleY(X0, X1, precision);
+				return graticule;
+			  };
+
+			  return graticule
+				  .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])
+				  .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);
+			}
+
+			function graticule10() {
+			  return graticule()();
+			}
+
+			var interpolate$2 = function(a, b) {
+			  var x0 = a[0] * radians,
+				  y0 = a[1] * radians,
+				  x1 = b[0] * radians,
+				  y1 = b[1] * radians,
+				  cy0 = cos$1(y0),
+				  sy0 = sin$1(y0),
+				  cy1 = cos$1(y1),
+				  sy1 = sin$1(y1),
+				  kx0 = cy0 * cos$1(x0),
+				  ky0 = cy0 * sin$1(x0),
+				  kx1 = cy1 * cos$1(x1),
+				  ky1 = cy1 * sin$1(x1),
+				  d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
+				  k = sin$1(d);
+
+			  var interpolate = d ? function(t) {
+				var B = sin$1(t *= d) / k,
+					A = sin$1(d - t) / k,
+					x = A * kx0 + B * kx1,
+					y = A * ky0 + B * ky1,
+					z = A * sy0 + B * sy1;
+				return [
+				  atan2(y, x) * degrees$1,
+				  atan2(z, sqrt$1(x * x + y * y)) * degrees$1
+				];
+			  } : function() {
+				return [x0 * degrees$1, y0 * degrees$1];
+			  };
+
+			  interpolate.distance = d;
+
+			  return interpolate;
+			};
+
+			var identity$7 = function(x) {
+			  return x;
+			};
+
+			var areaSum$1 = adder();
+			var areaRingSum$1 = adder();
+			var x00;
+			var y00;
+			var x0$1;
+			var y0$1;
+
+			var areaStream$1 = {
+			  point: noop$2,
+			  lineStart: noop$2,
+			  lineEnd: noop$2,
+			  polygonStart: function() {
+				areaStream$1.lineStart = areaRingStart$1;
+				areaStream$1.lineEnd = areaRingEnd$1;
+			  },
+			  polygonEnd: function() {
+				areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;
+				areaSum$1.add(abs(areaRingSum$1));
+				areaRingSum$1.reset();
+			  },
+			  result: function() {
+				var area = areaSum$1 / 2;
+				areaSum$1.reset();
+				return area;
+			  }
+			};
+
+			function areaRingStart$1() {
+			  areaStream$1.point = areaPointFirst$1;
+			}
+
+			function areaPointFirst$1(x, y) {
+			  areaStream$1.point = areaPoint$1;
+			  x00 = x0$1 = x, y00 = y0$1 = y;
+			}
+
+			function areaPoint$1(x, y) {
+			  areaRingSum$1.add(y0$1 * x - x0$1 * y);
+			  x0$1 = x, y0$1 = y;
+			}
+
+			function areaRingEnd$1() {
+			  areaPoint$1(x00, y00);
+			}
+
+			var x0$2 = Infinity;
+			var y0$2 = x0$2;
+			var x1 = -x0$2;
+			var y1 = x1;
+
+			var boundsStream$1 = {
+			  point: boundsPoint$1,
+			  lineStart: noop$2,
+			  lineEnd: noop$2,
+			  polygonStart: noop$2,
+			  polygonEnd: noop$2,
+			  result: function() {
+				var bounds = [[x0$2, y0$2], [x1, y1]];
+				x1 = y1 = -(y0$2 = x0$2 = Infinity);
+				return bounds;
+			  }
+			};
+
+			function boundsPoint$1(x, y) {
+			  if (x < x0$2) x0$2 = x;
+			  if (x > x1) x1 = x;
+			  if (y < y0$2) y0$2 = y;
+			  if (y > y1) y1 = y;
+			}
+
+			// TODO Enforce positive area for exterior, negative area for interior?
+
+			var X0$1 = 0;
+			var Y0$1 = 0;
+			var Z0$1 = 0;
+			var X1$1 = 0;
+			var Y1$1 = 0;
+			var Z1$1 = 0;
+			var X2$1 = 0;
+			var Y2$1 = 0;
+			var Z2$1 = 0;
+			var x00$1;
+			var y00$1;
+			var x0$3;
+			var y0$3;
+
+			var centroidStream$1 = {
+			  point: centroidPoint$1,
+			  lineStart: centroidLineStart$1,
+			  lineEnd: centroidLineEnd$1,
+			  polygonStart: function() {
+				centroidStream$1.lineStart = centroidRingStart$1;
+				centroidStream$1.lineEnd = centroidRingEnd$1;
+			  },
+			  polygonEnd: function() {
+				centroidStream$1.point = centroidPoint$1;
+				centroidStream$1.lineStart = centroidLineStart$1;
+				centroidStream$1.lineEnd = centroidLineEnd$1;
+			  },
+			  result: function() {
+				var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
+					: Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
+					: Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
+					: [NaN, NaN];
+				X0$1 = Y0$1 = Z0$1 =
+				X1$1 = Y1$1 = Z1$1 =
+				X2$1 = Y2$1 = Z2$1 = 0;
+				return centroid;
+			  }
+			};
+
+			function centroidPoint$1(x, y) {
+			  X0$1 += x;
+			  Y0$1 += y;
+			  ++Z0$1;
+			}
+
+			function centroidLineStart$1() {
+			  centroidStream$1.point = centroidPointFirstLine;
+			}
+
+			function centroidPointFirstLine(x, y) {
+			  centroidStream$1.point = centroidPointLine;
+			  centroidPoint$1(x0$3 = x, y0$3 = y);
+			}
+
+			function centroidPointLine(x, y) {
+			  var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);
+			  X1$1 += z * (x0$3 + x) / 2;
+			  Y1$1 += z * (y0$3 + y) / 2;
+			  Z1$1 += z;
+			  centroidPoint$1(x0$3 = x, y0$3 = y);
+			}
+
+			function centroidLineEnd$1() {
+			  centroidStream$1.point = centroidPoint$1;
+			}
+
+			function centroidRingStart$1() {
+			  centroidStream$1.point = centroidPointFirstRing;
+			}
+
+			function centroidRingEnd$1() {
+			  centroidPointRing(x00$1, y00$1);
+			}
+
+			function centroidPointFirstRing(x, y) {
+			  centroidStream$1.point = centroidPointRing;
+			  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
+			}
+
+			function centroidPointRing(x, y) {
+			  var dx = x - x0$3,
+				  dy = y - y0$3,
+				  z = sqrt$1(dx * dx + dy * dy);
+
+			  X1$1 += z * (x0$3 + x) / 2;
+			  Y1$1 += z * (y0$3 + y) / 2;
+			  Z1$1 += z;
+
+			  z = y0$3 * x - x0$3 * y;
+			  X2$1 += z * (x0$3 + x);
+			  Y2$1 += z * (y0$3 + y);
+			  Z2$1 += z * 3;
+			  centroidPoint$1(x0$3 = x, y0$3 = y);
+			}
+
+			function PathContext(context) {
+			  this._context = context;
+			}
+
+			PathContext.prototype = {
+			  _radius: 4.5,
+			  pointRadius: function(_) {
+				return this._radius = _, this;
+			  },
+			  polygonStart: function() {
+				this._line = 0;
+			  },
+			  polygonEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line === 0) this._context.closePath();
+				this._point = NaN;
+			  },
+			  point: function(x, y) {
+				switch (this._point) {
+				  case 0: {
+					this._context.moveTo(x, y);
+					this._point = 1;
+					break;
+				  }
+				  case 1: {
+					this._context.lineTo(x, y);
+					break;
+				  }
+				  default: {
+					this._context.moveTo(x + this._radius, y);
+					this._context.arc(x, y, this._radius, 0, tau$4);
+					break;
+				  }
+				}
+			  },
+			  result: noop$2
+			};
+
+			function PathString() {
+			  this._string = [];
+			}
+
+			PathString.prototype = {
+			  _circle: circle$2(4.5),
+			  pointRadius: function(_) {
+				return this._circle = circle$2(_), this;
+			  },
+			  polygonStart: function() {
+				this._line = 0;
+			  },
+			  polygonEnd: function() {
+				this._line = NaN;
+			  },
+			  lineStart: function() {
+				this._point = 0;
+			  },
+			  lineEnd: function() {
+				if (this._line === 0) this._string.push("Z");
+				this._point = NaN;
+			  },
+			  point: function(x, y) {
+				switch (this._point) {
+				  case 0: {
+					this._string.push("M", x, ",", y);
+					this._point = 1;
+					break;
+				  }
+				  case 1: {
+					this._string.push("L", x, ",", y);
+					break;
+				  }
+				  default: {
+					this._string.push("M", x, ",", y, this._circle);
+					break;
+				  }
+				}
+			  },
+			  result: function() {
+				if (this._string.length) {
+				  var result = this._string.join("");
+				  this._string = [];
+				  return result;
+				}
+			  }
+			};
+
+			function circle$2(radius) {
+			  return "m0," + radius
+				  + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
+				  + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
+				  + "z";
+			}
+
+			var index$3 = function(projection, context) {
+			  var pointRadius = 4.5,
+				  projectionStream,
+				  contextStream;
+
+			  function path(object) {
+				if (object) {
+				  if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
+				  geoStream(object, projectionStream(contextStream));
+				}
+				return contextStream.result();
+			  }
+
+			  path.area = function(object) {
+				geoStream(object, projectionStream(areaStream$1));
+				return areaStream$1.result();
+			  };
+
+			  path.bounds = function(object) {
+				geoStream(object, projectionStream(boundsStream$1));
+				return boundsStream$1.result();
+			  };
+
+			  path.centroid = function(object) {
+				geoStream(object, projectionStream(centroidStream$1));
+				return centroidStream$1.result();
+			  };
+
+			  path.projection = function(_) {
+				return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;
+			  };
+
+			  path.context = function(_) {
+				if (!arguments.length) return context;
+				contextStream = (context = _) == null ? new PathString : new PathContext(_);
+				if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
+				return path;
+			  };
+
+			  path.pointRadius = function(_) {
+				if (!arguments.length) return pointRadius;
+				pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
+				return path;
+			  };
+
+			  return path.projection(projection).context(context);
+			};
+
+			var sum$2 = adder();
+
+			var polygonContains = function(polygon, point) {
+			  var lambda = point[0],
+				  phi = point[1],
+				  normal = [sin$1(lambda), -cos$1(lambda), 0],
+				  angle = 0,
+				  winding = 0;
+
+			  sum$2.reset();
+
+			  for (var i = 0, n = polygon.length; i < n; ++i) {
+				if (!(m = (ring = polygon[i]).length)) continue;
+				var ring,
+					m,
+					point0 = ring[m - 1],
+					lambda0 = point0[0],
+					phi0 = point0[1] / 2 + quarterPi,
+					sinPhi0 = sin$1(phi0),
+					cosPhi0 = cos$1(phi0);
+
+				for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
+				  var point1 = ring[j],
+					  lambda1 = point1[0],
+					  phi1 = point1[1] / 2 + quarterPi,
+					  sinPhi1 = sin$1(phi1),
+					  cosPhi1 = cos$1(phi1),
+					  delta = lambda1 - lambda0,
+					  sign$$1 = delta >= 0 ? 1 : -1,
+					  absDelta = sign$$1 * delta,
+					  antimeridian = absDelta > pi$4,
+					  k = sinPhi0 * sinPhi1;
+
+				  sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
+				  angle += antimeridian ? delta + sign$$1 * tau$4 : delta;
+
+				  // Are the longitudes either side of the point’s meridian (lambda),
+				  // and are the latitudes smaller than the parallel (phi)?
+				  if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
+					var arc = cartesianCross(cartesian(point0), cartesian(point1));
+					cartesianNormalizeInPlace(arc);
+					var intersection = cartesianCross(normal, arc);
+					cartesianNormalizeInPlace(intersection);
+					var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);
+					if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
+					  winding += antimeridian ^ delta >= 0 ? 1 : -1;
+					}
+				  }
+				}
+			  }
+
+			  // First, determine whether the South pole is inside or outside:
+			  //
+			  // It is inside if:
+			  // * the polygon winds around it in a clockwise direction.
+			  // * the polygon does not (cumulatively) wind around it, but has a negative
+			  //   (counter-clockwise) area.
+			  //
+			  // Second, count the (signed) number of times a segment crosses a lambda
+			  // from the point to the South pole.  If it is zero, then the point is the
+			  // same side as the South pole.
+
+			  return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);
+			};
+
+			var clip = function(pointVisible, clipLine, interpolate, start) {
+			  return function(rotate, sink) {
+				var line = clipLine(sink),
+					rotatedStart = rotate.invert(start[0], start[1]),
+					ringBuffer = clipBuffer(),
+					ringSink = clipLine(ringBuffer),
+					polygonStarted = false,
+					polygon,
+					segments,
+					ring;
+
+				var clip = {
+				  point: point,
+				  lineStart: lineStart,
+				  lineEnd: lineEnd,
+				  polygonStart: function() {
+					clip.point = pointRing;
+					clip.lineStart = ringStart;
+					clip.lineEnd = ringEnd;
+					segments = [];
+					polygon = [];
+				  },
+				  polygonEnd: function() {
+					clip.point = point;
+					clip.lineStart = lineStart;
+					clip.lineEnd = lineEnd;
+					segments = merge(segments);
+					var startInside = polygonContains(polygon, rotatedStart);
+					if (segments.length) {
+					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+					  clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
+					} else if (startInside) {
+					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+					  sink.lineStart();
+					  interpolate(null, null, 1, sink);
+					  sink.lineEnd();
+					}
+					if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
+					segments = polygon = null;
+				  },
+				  sphere: function() {
+					sink.polygonStart();
+					sink.lineStart();
+					interpolate(null, null, 1, sink);
+					sink.lineEnd();
+					sink.polygonEnd();
+				  }
+				};
+
+				function point(lambda, phi) {
+				  var point = rotate(lambda, phi);
+				  if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
+				}
+
+				function pointLine(lambda, phi) {
+				  var point = rotate(lambda, phi);
+				  line.point(point[0], point[1]);
+				}
+
+				function lineStart() {
+				  clip.point = pointLine;
+				  line.lineStart();
+				}
+
+				function lineEnd() {
+				  clip.point = point;
+				  line.lineEnd();
+				}
+
+				function pointRing(lambda, phi) {
+				  ring.push([lambda, phi]);
+				  var point = rotate(lambda, phi);
+				  ringSink.point(point[0], point[1]);
+				}
+
+				function ringStart() {
+				  ringSink.lineStart();
+				  ring = [];
+				}
+
+				function ringEnd() {
+				  pointRing(ring[0][0], ring[0][1]);
+				  ringSink.lineEnd();
+
+				  var clean = ringSink.clean(),
+					  ringSegments = ringBuffer.result(),
+					  i, n = ringSegments.length, m,
+					  segment,
+					  point;
+
+				  ring.pop();
+				  polygon.push(ring);
+				  ring = null;
+
+				  if (!n) return;
+
+				  // No intersections.
+				  if (clean & 1) {
+					segment = ringSegments[0];
+					if ((m = segment.length - 1) > 0) {
+					  if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+					  sink.lineStart();
+					  for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
+					  sink.lineEnd();
+					}
+					return;
+				  }
+
+				  // Rejoin connected segments.
+				  // TODO reuse ringBuffer.rejoin()?
+				  if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+
+				  segments.push(ringSegments.filter(validSegment));
+				}
+
+				return clip;
+			  };
+			};
+
+			function validSegment(segment) {
+			  return segment.length > 1;
+			}
+
+			// Intersections are sorted along the clip edge. For both antimeridian cutting
+			// and circle clipping, the same comparison is used.
+			function compareIntersection(a, b) {
+			  return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])
+				   - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);
+			}
+
+			var clipAntimeridian = clip(
+			  function() { return true; },
+			  clipAntimeridianLine,
+			  clipAntimeridianInterpolate,
+			  [-pi$4, -halfPi$3]
+			);
+
+			// Takes a line and cuts into visible segments. Return values: 0 - there were
+			// intersections or the line was empty; 1 - no intersections; 2 - there were
+			// intersections, and the first and last segments should be rejoined.
+			function clipAntimeridianLine(stream) {
+			  var lambda0 = NaN,
+				  phi0 = NaN,
+				  sign0 = NaN,
+				  clean; // no intersections
+
+			  return {
+				lineStart: function() {
+				  stream.lineStart();
+				  clean = 1;
+				},
+				point: function(lambda1, phi1) {
+				  var sign1 = lambda1 > 0 ? pi$4 : -pi$4,
+					  delta = abs(lambda1 - lambda0);
+				  if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole
+					stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);
+					stream.point(sign0, phi0);
+					stream.lineEnd();
+					stream.lineStart();
+					stream.point(sign1, phi0);
+					stream.point(lambda1, phi0);
+					clean = 0;
+				  } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian
+					if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies
+					if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;
+					phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
+					stream.point(sign0, phi0);
+					stream.lineEnd();
+					stream.lineStart();
+					stream.point(sign1, phi0);
+					clean = 0;
+				  }
+				  stream.point(lambda0 = lambda1, phi0 = phi1);
+				  sign0 = sign1;
+				},
+				lineEnd: function() {
+				  stream.lineEnd();
+				  lambda0 = phi0 = NaN;
+				},
+				clean: function() {
+				  return 2 - clean; // if intersections, rejoin first and last segments
+				}
+			  };
+			}
+
+			function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
+			  var cosPhi0,
+				  cosPhi1,
+				  sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
+			  return abs(sinLambda0Lambda1) > epsilon$4
+				  ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
+					  - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
+					  / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
+				  : (phi0 + phi1) / 2;
+			}
+
+			function clipAntimeridianInterpolate(from, to, direction, stream) {
+			  var phi;
+			  if (from == null) {
+				phi = direction * halfPi$3;
+				stream.point(-pi$4, phi);
+				stream.point(0, phi);
+				stream.point(pi$4, phi);
+				stream.point(pi$4, 0);
+				stream.point(pi$4, -phi);
+				stream.point(0, -phi);
+				stream.point(-pi$4, -phi);
+				stream.point(-pi$4, 0);
+				stream.point(-pi$4, phi);
+			  } else if (abs(from[0] - to[0]) > epsilon$4) {
+				var lambda = from[0] < to[0] ? pi$4 : -pi$4;
+				phi = direction * lambda / 2;
+				stream.point(-lambda, phi);
+				stream.point(0, phi);
+				stream.point(lambda, phi);
+			  } else {
+				stream.point(to[0], to[1]);
+			  }
+			}
+
+			var clipCircle = function(radius, delta) {
+			  var cr = cos$1(radius),
+				  smallRadius = cr > 0,
+				  notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case
+
+			  function interpolate(from, to, direction, stream) {
+				circleStream(stream, radius, delta, direction, from, to);
+			  }
+
+			  function visible(lambda, phi) {
+				return cos$1(lambda) * cos$1(phi) > cr;
+			  }
+
+			  // Takes a line and cuts into visible segments. Return values used for polygon
+			  // clipping: 0 - there were intersections or the line was empty; 1 - no
+			  // intersections 2 - there were intersections, and the first and last segments
+			  // should be rejoined.
+			  function clipLine(stream) {
+				var point0, // previous point
+					c0, // code for previous point
+					v0, // visibility of previous point
+					v00, // visibility of first point
+					clean; // no intersections
+				return {
+				  lineStart: function() {
+					v00 = v0 = false;
+					clean = 1;
+				  },
+				  point: function(lambda, phi) {
+					var point1 = [lambda, phi],
+						point2,
+						v = visible(lambda, phi),
+						c = smallRadius
+						  ? v ? 0 : code(lambda, phi)
+						  : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;
+					if (!point0 && (v00 = v0 = v)) stream.lineStart();
+					// Handle degeneracies.
+					// TODO ignore if not clipping polygons.
+					if (v !== v0) {
+					  point2 = intersect(point0, point1);
+					  if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
+						point1[0] += epsilon$4;
+						point1[1] += epsilon$4;
+						v = visible(point1[0], point1[1]);
+					  }
+					}
+					if (v !== v0) {
+					  clean = 0;
+					  if (v) {
+						// outside going in
+						stream.lineStart();
+						point2 = intersect(point1, point0);
+						stream.point(point2[0], point2[1]);
+					  } else {
+						// inside going out
+						point2 = intersect(point0, point1);
+						stream.point(point2[0], point2[1]);
+						stream.lineEnd();
+					  }
+					  point0 = point2;
+					} else if (notHemisphere && point0 && smallRadius ^ v) {
+					  var t;
+					  // If the codes for two points are different, or are both zero,
+					  // and there this segment intersects with the small circle.
+					  if (!(c & c0) && (t = intersect(point1, point0, true))) {
+						clean = 0;
+						if (smallRadius) {
+						  stream.lineStart();
+						  stream.point(t[0][0], t[0][1]);
+						  stream.point(t[1][0], t[1][1]);
+						  stream.lineEnd();
+						} else {
+						  stream.point(t[1][0], t[1][1]);
+						  stream.lineEnd();
+						  stream.lineStart();
+						  stream.point(t[0][0], t[0][1]);
+						}
+					  }
+					}
+					if (v && (!point0 || !pointEqual(point0, point1))) {
+					  stream.point(point1[0], point1[1]);
+					}
+					point0 = point1, v0 = v, c0 = c;
+				  },
+				  lineEnd: function() {
+					if (v0) stream.lineEnd();
+					point0 = null;
+				  },
+				  // Rejoin first and last segments if there were intersections and the first
+				  // and last points were visible.
+				  clean: function() {
+					return clean | ((v00 && v0) << 1);
+				  }
+				};
+			  }
+
+			  // Intersects the great circle between a and b with the clip circle.
+			  function intersect(a, b, two) {
+				var pa = cartesian(a),
+					pb = cartesian(b);
+
+				// We have two planes, n1.p = d1 and n2.p = d2.
+				// Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
+				var n1 = [1, 0, 0], // normal
+					n2 = cartesianCross(pa, pb),
+					n2n2 = cartesianDot(n2, n2),
+					n1n2 = n2[0], // cartesianDot(n1, n2),
+					determinant = n2n2 - n1n2 * n1n2;
+
+				// Two polar points.
+				if (!determinant) return !two && a;
+
+				var c1 =  cr * n2n2 / determinant,
+					c2 = -cr * n1n2 / determinant,
+					n1xn2 = cartesianCross(n1, n2),
+					A = cartesianScale(n1, c1),
+					B = cartesianScale(n2, c2);
+				cartesianAddInPlace(A, B);
+
+				// Solve |p(t)|^2 = 1.
+				var u = n1xn2,
+					w = cartesianDot(A, u),
+					uu = cartesianDot(u, u),
+					t2 = w * w - uu * (cartesianDot(A, A) - 1);
+
+				if (t2 < 0) return;
+
+				var t = sqrt$1(t2),
+					q = cartesianScale(u, (-w - t) / uu);
+				cartesianAddInPlace(q, A);
+				q = spherical(q);
+
+				if (!two) return q;
+
+				// Two intersection points.
+				var lambda0 = a[0],
+					lambda1 = b[0],
+					phi0 = a[1],
+					phi1 = b[1],
+					z;
+
+				if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
+
+				var delta = lambda1 - lambda0,
+					polar = abs(delta - pi$4) < epsilon$4,
+					meridian = polar || delta < epsilon$4;
+
+				if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
+
+				// Check that the first point is between a and b.
+				if (meridian
+					? polar
+					  ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)
+					  : phi0 <= q[1] && q[1] <= phi1
+					: delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
+				  var q1 = cartesianScale(u, (-w + t) / uu);
+				  cartesianAddInPlace(q1, A);
+				  return [q, spherical(q1)];
+				}
+			  }
+
+			  // Generates a 4-bit vector representing the location of a point relative to
+			  // the small circle's bounding box.
+			  function code(lambda, phi) {
+				var r = smallRadius ? radius : pi$4 - radius,
+					code = 0;
+				if (lambda < -r) code |= 1; // left
+				else if (lambda > r) code |= 2; // right
+				if (phi < -r) code |= 4; // below
+				else if (phi > r) code |= 8; // above
+				return code;
+			  }
+
+			  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);
+			};
+
+			var transform$1 = function(methods) {
+			  return {
+				stream: transformer(methods)
+			  };
+			};
+
+			function transformer(methods) {
+			  return function(stream) {
+				var s = new TransformStream;
+				for (var key in methods) s[key] = methods[key];
+				s.stream = stream;
+				return s;
+			  };
+			}
+
+			function TransformStream() {}
+
+			TransformStream.prototype = {
+			  constructor: TransformStream,
+			  point: function(x, y) { this.stream.point(x, y); },
+			  sphere: function() { this.stream.sphere(); },
+			  lineStart: function() { this.stream.lineStart(); },
+			  lineEnd: function() { this.stream.lineEnd(); },
+			  polygonStart: function() { this.stream.polygonStart(); },
+			  polygonEnd: function() { this.stream.polygonEnd(); }
+			};
+
+			function fitExtent(projection, extent, object) {
+			  var w = extent[1][0] - extent[0][0],
+				  h = extent[1][1] - extent[0][1],
+				  clip = projection.clipExtent && projection.clipExtent();
+
+			  projection
+				  .scale(150)
+				  .translate([0, 0]);
+
+			  if (clip != null) projection.clipExtent(null);
+
+			  geoStream(object, projection.stream(boundsStream$1));
+
+			  var b = boundsStream$1.result(),
+				  k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
+				  x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
+				  y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
+
+			  if (clip != null) projection.clipExtent(clip);
+
+			  return projection
+				  .scale(k * 150)
+				  .translate([x, y]);
+			}
+
+			function fitSize(projection, size, object) {
+			  return fitExtent(projection, [[0, 0], size], object);
+			}
+
+			var maxDepth = 16;
+			var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
+
+			var resample = function(project, delta2) {
+			  return +delta2 ? resample$1(project, delta2) : resampleNone(project);
+			};
+
+			function resampleNone(project) {
+			  return transformer({
+				point: function(x, y) {
+				  x = project(x, y);
+				  this.stream.point(x[0], x[1]);
+				}
+			  });
+			}
+
+			function resample$1(project, delta2) {
+
+			  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
+				var dx = x1 - x0,
+					dy = y1 - y0,
+					d2 = dx * dx + dy * dy;
+				if (d2 > 4 * delta2 && depth--) {
+				  var a = a0 + a1,
+					  b = b0 + b1,
+					  c = c0 + c1,
+					  m = sqrt$1(a * a + b * b + c * c),
+					  phi2 = asin$1(c /= m),
+					  lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),
+					  p = project(lambda2, phi2),
+					  x2 = p[0],
+					  y2 = p[1],
+					  dx2 = x2 - x0,
+					  dy2 = y2 - y0,
+					  dz = dy * dx2 - dx * dy2;
+				  if (dz * dz / d2 > delta2 // perpendicular projected distance
+					  || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
+					  || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
+					resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
+					stream.point(x2, y2);
+					resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
+				  }
+				}
+			  }
+			  return function(stream) {
+				var lambda00, x00, y00, a00, b00, c00, // first point
+					lambda0, x0, y0, a0, b0, c0; // previous point
+
+				var resampleStream = {
+				  point: point,
+				  lineStart: lineStart,
+				  lineEnd: lineEnd,
+				  polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
+				  polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
+				};
+
+				function point(x, y) {
+				  x = project(x, y);
+				  stream.point(x[0], x[1]);
+				}
+
+				function lineStart() {
+				  x0 = NaN;
+				  resampleStream.point = linePoint;
+				  stream.lineStart();
+				}
+
+				function linePoint(lambda, phi) {
+				  var c = cartesian([lambda, phi]), p = project(lambda, phi);
+				  resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
+				  stream.point(x0, y0);
+				}
+
+				function lineEnd() {
+				  resampleStream.point = point;
+				  stream.lineEnd();
+				}
+
+				function ringStart() {
+				  lineStart();
+				  resampleStream.point = ringPoint;
+				  resampleStream.lineEnd = ringEnd;
+				}
+
+				function ringPoint(lambda, phi) {
+				  linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
+				  resampleStream.point = linePoint;
+				}
+
+				function ringEnd() {
+				  resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
+				  resampleStream.lineEnd = lineEnd;
+				  lineEnd();
+				}
+
+				return resampleStream;
+			  };
+			}
+
+			var transformRadians = transformer({
+			  point: function(x, y) {
+				this.stream.point(x * radians, y * radians);
+			  }
+			});
+
+			function projection(project) {
+			  return projectionMutator(function() { return project; })();
+			}
+
+			function projectionMutator(projectAt) {
+			  var project,
+				  k = 150, // scale
+				  x = 480, y = 250, // translate
+				  dx, dy, lambda = 0, phi = 0, // center
+				  deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
+				  theta = null, preclip = clipAntimeridian, // clip angle
+				  x0 = null, y0, x1, y1, postclip = identity$7, // clip extent
+				  delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
+				  cache,
+				  cacheStream;
+
+			  function projection(point) {
+				point = projectRotate(point[0] * radians, point[1] * radians);
+				return [point[0] * k + dx, dy - point[1] * k];
+			  }
+
+			  function invert(point) {
+				point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
+				return point && [point[0] * degrees$1, point[1] * degrees$1];
+			  }
+
+			  function projectTransform(x, y) {
+				return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
+			  }
+
+			  projection.stream = function(stream) {
+				return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
+			  };
+
+			  projection.clipAngle = function(_) {
+				return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
+			  };
+
+			  projection.clipExtent = function(_) {
+				return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+			  };
+
+			  projection.scale = function(_) {
+				return arguments.length ? (k = +_, recenter()) : k;
+			  };
+
+			  projection.translate = function(_) {
+				return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
+			  };
+
+			  projection.center = function(_) {
+				return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
+			  };
+
+			  projection.rotate = function(_) {
+				return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
+			  };
+
+			  projection.precision = function(_) {
+				return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);
+			  };
+
+			  projection.fitExtent = function(extent, object) {
+				return fitExtent(projection, extent, object);
+			  };
+
+			  projection.fitSize = function(size, object) {
+				return fitSize(projection, size, object);
+			  };
+
+			  function recenter() {
+				projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
+				var center = project(lambda, phi);
+				dx = x - center[0] * k;
+				dy = y + center[1] * k;
+				return reset();
+			  }
+
+			  function reset() {
+				cache = cacheStream = null;
+				return projection;
+			  }
+
+			  return function() {
+				project = projectAt.apply(this, arguments);
+				projection.invert = project.invert && invert;
+				return recenter();
+			  };
+			}
+
+			function conicProjection(projectAt) {
+			  var phi0 = 0,
+				  phi1 = pi$4 / 3,
+				  m = projectionMutator(projectAt),
+				  p = m(phi0, phi1);
+
+			  p.parallels = function(_) {
+				return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
+			  };
+
+			  return p;
+			}
+
+			function cylindricalEqualAreaRaw(phi0) {
+			  var cosPhi0 = cos$1(phi0);
+
+			  function forward(lambda, phi) {
+				return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
+			  }
+
+			  forward.invert = function(x, y) {
+				return [x / cosPhi0, asin$1(y * cosPhi0)];
+			  };
+
+			  return forward;
+			}
+
+			function conicEqualAreaRaw(y0, y1) {
+			  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
+
+			  // Are the parallels symmetrical around the Equator?
+			  if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0);
+
+			  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n;
+
+			  function project(x, y) {
+				var r = sqrt$1(c - 2 * n * sin$1(y)) / n;
+				return [r * sin$1(x *= n), r0 - r * cos$1(x)];
+			  }
+
+			  project.invert = function(x, y) {
+				var r0y = r0 - y;
+				return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
+			  };
+
+			  return project;
+			}
+
+			var conicEqualArea = function() {
+			  return conicProjection(conicEqualAreaRaw)
+				  .scale(155.424)
+				  .center([0, 33.6442]);
+			};
+
+			var albers = function() {
+			  return conicEqualArea()
+				  .parallels([29.5, 45.5])
+				  .scale(1070)
+				  .translate([480, 250])
+				  .rotate([96, 0])
+				  .center([-0.6, 38.7]);
+			};
+
+			// The projections must have mutually exclusive clip regions on the sphere,
+			// as this will avoid emitting interleaving lines and polygons.
+			function multiplex(streams) {
+			  var n = streams.length;
+			  return {
+				point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
+				sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
+				lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
+				lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
+				polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
+				polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
+			  };
+			}
+
+			// A composite projection for the United States, configured by default for
+			// 960×500. The projection also works quite well at 960×600 if you change the
+			// scale to 1285 and adjust the translate accordingly. The set of standard
+			// parallels for each region comes from USGS, which is published here:
+			// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
+			var albersUsa = function() {
+			  var cache,
+				  cacheStream,
+				  lower48 = albers(), lower48Point,
+				  alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
+				  hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
+				  point, pointStream = {point: function(x, y) { point = [x, y]; }};
+
+			  function albersUsa(coordinates) {
+				var x = coordinates[0], y = coordinates[1];
+				return point = null,
+					(lower48Point.point(x, y), point)
+					|| (alaskaPoint.point(x, y), point)
+					|| (hawaiiPoint.point(x, y), point);
+			  }
+
+			  albersUsa.invert = function(coordinates) {
+				var k = lower48.scale(),
+					t = lower48.translate(),
+					x = (coordinates[0] - t[0]) / k,
+					y = (coordinates[1] - t[1]) / k;
+				return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
+					: y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
+					: lower48).invert(coordinates);
+			  };
+
+			  albersUsa.stream = function(stream) {
+				return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
+			  };
+
+			  albersUsa.precision = function(_) {
+				if (!arguments.length) return lower48.precision();
+				lower48.precision(_), alaska.precision(_), hawaii.precision(_);
+				return reset();
+			  };
+
+			  albersUsa.scale = function(_) {
+				if (!arguments.length) return lower48.scale();
+				lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
+				return albersUsa.translate(lower48.translate());
+			  };
+
+			  albersUsa.translate = function(_) {
+				if (!arguments.length) return lower48.translate();
+				var k = lower48.scale(), x = +_[0], y = +_[1];
+
+				lower48Point = lower48
+					.translate(_)
+					.clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
+					.stream(pointStream);
+
+				alaskaPoint = alaska
+					.translate([x - 0.307 * k, y + 0.201 * k])
+					.clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+					.stream(pointStream);
+
+				hawaiiPoint = hawaii
+					.translate([x - 0.205 * k, y + 0.212 * k])
+					.clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+					.stream(pointStream);
+
+				return reset();
+			  };
+
+			  albersUsa.fitExtent = function(extent, object) {
+				return fitExtent(albersUsa, extent, object);
+			  };
+
+			  albersUsa.fitSize = function(size, object) {
+				return fitSize(albersUsa, size, object);
+			  };
+
+			  function reset() {
+				cache = cacheStream = null;
+				return albersUsa;
+			  }
+
+			  return albersUsa.scale(1070);
+			};
+
+			function azimuthalRaw(scale) {
+			  return function(x, y) {
+				var cx = cos$1(x),
+					cy = cos$1(y),
+					k = scale(cx * cy);
+				return [
+				  k * cy * sin$1(x),
+				  k * sin$1(y)
+				];
+			  }
+			}
+
+			function azimuthalInvert(angle) {
+			  return function(x, y) {
+				var z = sqrt$1(x * x + y * y),
+					c = angle(z),
+					sc = sin$1(c),
+					cc = cos$1(c);
+				return [
+				  atan2(x * sc, z * cc),
+				  asin$1(z && y * sc / z)
+				];
+			  }
+			}
+
+			var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
+			  return sqrt$1(2 / (1 + cxcy));
+			});
+
+			azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
+			  return 2 * asin$1(z / 2);
+			});
+
+			var azimuthalEqualArea = function() {
+			  return projection(azimuthalEqualAreaRaw)
+				  .scale(124.75)
+				  .clipAngle(180 - 1e-3);
+			};
+
+			var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
+			  return (c = acos(c)) && c / sin$1(c);
+			});
+
+			azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
+			  return z;
+			});
+
+			var azimuthalEquidistant = function() {
+			  return projection(azimuthalEquidistantRaw)
+				  .scale(79.4188)
+				  .clipAngle(180 - 1e-3);
+			};
+
+			function mercatorRaw(lambda, phi) {
+			  return [lambda, log$1(tan((halfPi$3 + phi) / 2))];
+			}
+
+			mercatorRaw.invert = function(x, y) {
+			  return [x, 2 * atan(exp(y)) - halfPi$3];
+			};
+
+			var mercator = function() {
+			  return mercatorProjection(mercatorRaw)
+				  .scale(961 / tau$4);
+			};
+
+			function mercatorProjection(project) {
+			  var m = projection(project),
+				  scale = m.scale,
+				  translate = m.translate,
+				  clipExtent = m.clipExtent,
+				  clipAuto;
+
+			  m.scale = function(_) {
+				return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();
+			  };
+
+			  m.translate = function(_) {
+				return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();
+			  };
+
+			  m.clipExtent = function(_) {
+				if (!arguments.length) return clipAuto ? null : clipExtent();
+				if (clipAuto = _ == null) {
+				  var k = pi$4 * scale(),
+					  t = translate();
+				  _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
+				}
+				clipExtent(_);
+				return m;
+			  };
+
+			  return m.clipExtent(null);
+			}
+
+			function tany(y) {
+			  return tan((halfPi$3 + y) / 2);
+			}
+
+			function conicConformalRaw(y0, y1) {
+			  var cy0 = cos$1(y0),
+				  n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),
+				  f = cy0 * pow$1(tany(y0), n) / n;
+
+			  if (!n) return mercatorRaw;
+
+			  function project(x, y) {
+				if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }
+				else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }
+				var r = f / pow$1(tany(y), n);
+				return [r * sin$1(n * x), f - r * cos$1(n * x)];
+			  }
+
+			  project.invert = function(x, y) {
+				var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);
+				return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];
+			  };
+
+			  return project;
+			}
+
+			var conicConformal = function() {
+			  return conicProjection(conicConformalRaw)
+				  .scale(109.5)
+				  .parallels([30, 30]);
+			};
+
+			function equirectangularRaw(lambda, phi) {
+			  return [lambda, phi];
+			}
+
+			equirectangularRaw.invert = equirectangularRaw;
+
+			var equirectangular = function() {
+			  return projection(equirectangularRaw)
+				  .scale(152.63);
+			};
+
+			function conicEquidistantRaw(y0, y1) {
+			  var cy0 = cos$1(y0),
+				  n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
+				  g = cy0 / n + y0;
+
+			  if (abs(n) < epsilon$4) return equirectangularRaw;
+
+			  function project(x, y) {
+				var gy = g - y, nx = n * x;
+				return [gy * sin$1(nx), g - gy * cos$1(nx)];
+			  }
+
+			  project.invert = function(x, y) {
+				var gy = g - y;
+				return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)];
+			  };
+
+			  return project;
+			}
+
+			var conicEquidistant = function() {
+			  return conicProjection(conicEquidistantRaw)
+				  .scale(131.154)
+				  .center([0, 13.9389]);
+			};
+
+			function gnomonicRaw(x, y) {
+			  var cy = cos$1(y), k = cos$1(x) * cy;
+			  return [cy * sin$1(x) / k, sin$1(y) / k];
+			}
+
+			gnomonicRaw.invert = azimuthalInvert(atan);
+
+			var gnomonic = function() {
+			  return projection(gnomonicRaw)
+				  .scale(144.049)
+				  .clipAngle(60);
+			};
+
+			function scaleTranslate(k, tx, ty) {
+			  return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({
+				point: function(x, y) {
+				  this.stream.point(x * k + tx, y * k + ty);
+				}
+			  });
+			}
+
+			var identity$8 = function() {
+			  var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate
+				  x0 = null, y0, x1, y1, clip = identity$7, // clip extent
+				  cache,
+				  cacheStream,
+				  projection;
+
+			  function reset() {
+				cache = cacheStream = null;
+				return projection;
+			  }
+
+			  return projection = {
+				stream: function(stream) {
+				  return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
+				},
+				clipExtent: function(_) {
+				  return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+				},
+				scale: function(_) {
+				  return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k;
+				},
+				translate: function(_) {
+				  return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
+				},
+				fitExtent: function(extent, object) {
+				  return fitExtent(projection, extent, object);
+				},
+				fitSize: function(size, object) {
+				  return fitSize(projection, size, object);
+				}
+			  };
+			};
+
+			function orthographicRaw(x, y) {
+			  return [cos$1(y) * sin$1(x), sin$1(y)];
+			}
+
+			orthographicRaw.invert = azimuthalInvert(asin$1);
+
+			var orthographic = function() {
+			  return projection(orthographicRaw)
+				  .scale(249.5)
+				  .clipAngle(90 + epsilon$4);
+			};
+
+			function stereographicRaw(x, y) {
+			  var cy = cos$1(y), k = 1 + cos$1(x) * cy;
+			  return [cy * sin$1(x) / k, sin$1(y) / k];
+			}
+
+			stereographicRaw.invert = azimuthalInvert(function(z) {
+			  return 2 * atan(z);
+			});
+
+			var stereographic = function() {
+			  return projection(stereographicRaw)
+				  .scale(250)
+				  .clipAngle(142);
+			};
+
+			function transverseMercatorRaw(lambda, phi) {
+			  return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];
+			}
+
+			transverseMercatorRaw.invert = function(x, y) {
+			  return [-y, 2 * atan(exp(x)) - halfPi$3];
+			};
+
+			var transverseMercator = function() {
+			  var m = mercatorProjection(transverseMercatorRaw),
+				  center = m.center,
+				  rotate = m.rotate;
+
+			  m.center = function(_) {
+				return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
+			  };
+
+			  m.rotate = function(_) {
+				return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
+			  };
+
+			  return rotate([0, 0, 90])
+				  .scale(159.155);
+			};
+
+			exports.version = version;
+			exports.bisect = bisectRight;
+			exports.bisectRight = bisectRight;
+			exports.bisectLeft = bisectLeft;
+			exports.ascending = ascending;
+			exports.bisector = bisector;
+			exports.descending = descending;
+			exports.deviation = deviation;
+			exports.extent = extent;
+			exports.histogram = histogram;
+			exports.thresholdFreedmanDiaconis = freedmanDiaconis;
+			exports.thresholdScott = scott;
+			exports.thresholdSturges = sturges;
+			exports.max = max;
+			exports.mean = mean;
+			exports.median = median;
+			exports.merge = merge;
+			exports.min = min;
+			exports.pairs = pairs;
+			exports.permute = permute;
+			exports.quantile = threshold;
+			exports.range = range;
+			exports.scan = scan;
+			exports.shuffle = shuffle;
+			exports.sum = sum;
+			exports.ticks = ticks;
+			exports.tickStep = tickStep;
+			exports.transpose = transpose;
+			exports.variance = variance;
+			exports.zip = zip;
+			exports.entries = entries;
+			exports.keys = keys;
+			exports.values = values;
+			exports.map = map$1;
+			exports.set = set;
+			exports.nest = nest;
+			exports.randomUniform = uniform;
+			exports.randomNormal = normal;
+			exports.randomLogNormal = logNormal;
+			exports.randomBates = bates;
+			exports.randomIrwinHall = irwinHall;
+			exports.randomExponential = exponential;
+			exports.easeLinear = linear;
+			exports.easeQuad = quadInOut;
+			exports.easeQuadIn = quadIn;
+			exports.easeQuadOut = quadOut;
+			exports.easeQuadInOut = quadInOut;
+			exports.easeCubic = cubicInOut;
+			exports.easeCubicIn = cubicIn;
+			exports.easeCubicOut = cubicOut;
+			exports.easeCubicInOut = cubicInOut;
+			exports.easePoly = polyInOut;
+			exports.easePolyIn = polyIn;
+			exports.easePolyOut = polyOut;
+			exports.easePolyInOut = polyInOut;
+			exports.easeSin = sinInOut;
+			exports.easeSinIn = sinIn;
+			exports.easeSinOut = sinOut;
+			exports.easeSinInOut = sinInOut;
+			exports.easeExp = expInOut;
+			exports.easeExpIn = expIn;
+			exports.easeExpOut = expOut;
+			exports.easeExpInOut = expInOut;
+			exports.easeCircle = circleInOut;
+			exports.easeCircleIn = circleIn;
+			exports.easeCircleOut = circleOut;
+			exports.easeCircleInOut = circleInOut;
+			exports.easeBounce = bounceOut;
+			exports.easeBounceIn = bounceIn;
+			exports.easeBounceOut = bounceOut;
+			exports.easeBounceInOut = bounceInOut;
+			exports.easeBack = backInOut;
+			exports.easeBackIn = backIn;
+			exports.easeBackOut = backOut;
+			exports.easeBackInOut = backInOut;
+			exports.easeElastic = elasticOut;
+			exports.easeElasticIn = elasticIn;
+			exports.easeElasticOut = elasticOut;
+			exports.easeElasticInOut = elasticInOut;
+			exports.polygonArea = area;
+			exports.polygonCentroid = centroid;
+			exports.polygonHull = hull;
+			exports.polygonContains = contains;
+			exports.polygonLength = length$1;
+			exports.path = path;
+			exports.quadtree = quadtree;
+			exports.queue = queue;
+			exports.arc = arc;
+			exports.area = area$1;
+			exports.line = line;
+			exports.pie = pie;
+			exports.radialArea = radialArea;
+			exports.radialLine = radialLine$1;
+			exports.symbol = symbol;
+			exports.symbols = symbols;
+			exports.symbolCircle = circle;
+			exports.symbolCross = cross$1;
+			exports.symbolDiamond = diamond;
+			exports.symbolSquare = square;
+			exports.symbolStar = star;
+			exports.symbolTriangle = triangle;
+			exports.symbolWye = wye;
+			exports.curveBasisClosed = basisClosed;
+			exports.curveBasisOpen = basisOpen;
+			exports.curveBasis = basis;
+			exports.curveBundle = bundle;
+			exports.curveCardinalClosed = cardinalClosed;
+			exports.curveCardinalOpen = cardinalOpen;
+			exports.curveCardinal = cardinal;
+			exports.curveCatmullRomClosed = catmullRomClosed;
+			exports.curveCatmullRomOpen = catmullRomOpen;
+			exports.curveCatmullRom = catmullRom;
+			exports.curveLinearClosed = linearClosed;
+			exports.curveLinear = curveLinear;
+			exports.curveMonotoneX = monotoneX;
+			exports.curveMonotoneY = monotoneY;
+			exports.curveNatural = natural;
+			exports.curveStep = step;
+			exports.curveStepAfter = stepAfter;
+			exports.curveStepBefore = stepBefore;
+			exports.stack = stack;
+			exports.stackOffsetExpand = expand;
+			exports.stackOffsetNone = none;
+			exports.stackOffsetSilhouette = silhouette;
+			exports.stackOffsetWiggle = wiggle;
+			exports.stackOrderAscending = ascending$1;
+			exports.stackOrderDescending = descending$2;
+			exports.stackOrderInsideOut = insideOut;
+			exports.stackOrderNone = none$1;
+			exports.stackOrderReverse = reverse;
+			exports.color = color;
+			exports.rgb = rgb;
+			exports.hsl = hsl;
+			exports.lab = lab;
+			exports.hcl = hcl;
+			exports.cubehelix = cubehelix;
+			exports.interpolate = interpolate;
+			exports.interpolateArray = array$1;
+			exports.interpolateDate = date;
+			exports.interpolateNumber = interpolateNumber;
+			exports.interpolateObject = object;
+			exports.interpolateRound = interpolateRound;
+			exports.interpolateString = interpolateString;
+			exports.interpolateTransformCss = interpolateTransformCss;
+			exports.interpolateTransformSvg = interpolateTransformSvg;
+			exports.interpolateZoom = interpolateZoom;
+			exports.interpolateRgb = interpolateRgb;
+			exports.interpolateRgbBasis = rgbBasis;
+			exports.interpolateRgbBasisClosed = rgbBasisClosed;
+			exports.interpolateHsl = hsl$2;
+			exports.interpolateHslLong = hslLong;
+			exports.interpolateLab = lab$1;
+			exports.interpolateHcl = hcl$2;
+			exports.interpolateHclLong = hclLong;
+			exports.interpolateCubehelix = cubehelix$2;
+			exports.interpolateCubehelixLong = cubehelixLong;
+			exports.interpolateBasis = basis$2;
+			exports.interpolateBasisClosed = basisClosed$1;
+			exports.quantize = quantize;
+			exports.dispatch = dispatch;
+			exports.dsvFormat = dsv;
+			exports.csvParse = csvParse;
+			exports.csvParseRows = csvParseRows;
+			exports.csvFormat = csvFormat;
+			exports.csvFormatRows = csvFormatRows;
+			exports.tsvParse = tsvParse;
+			exports.tsvParseRows = tsvParseRows;
+			exports.tsvFormat = tsvFormat;
+			exports.tsvFormatRows = tsvFormatRows;
+			exports.request = request;
+			exports.html = html;
+			exports.json = json;
+			exports.text = text;
+			exports.xml = xml;
+			exports.csv = csv$1;
+			exports.tsv = tsv$1;
+			exports.now = now;
+			exports.timer = timer;
+			exports.timerFlush = timerFlush;
+			exports.timeout = timeout$1;
+			exports.interval = interval$1;
+			exports.timeInterval = newInterval;
+			exports.timeMillisecond = millisecond;
+			exports.timeMilliseconds = milliseconds;
+			exports.timeSecond = second;
+			exports.timeSeconds = seconds;
+			exports.timeMinute = minute;
+			exports.timeMinutes = minutes;
+			exports.timeHour = hour;
+			exports.timeHours = hours;
+			exports.timeDay = day;
+			exports.timeDays = days;
+			exports.timeWeek = sunday;
+			exports.timeWeeks = sundays;
+			exports.timeSunday = sunday;
+			exports.timeSundays = sundays;
+			exports.timeMonday = monday;
+			exports.timeMondays = mondays;
+			exports.timeTuesday = tuesday;
+			exports.timeTuesdays = tuesdays;
+			exports.timeWednesday = wednesday;
+			exports.timeWednesdays = wednesdays;
+			exports.timeThursday = thursday;
+			exports.timeThursdays = thursdays;
+			exports.timeFriday = friday;
+			exports.timeFridays = fridays;
+			exports.timeSaturday = saturday;
+			exports.timeSaturdays = saturdays;
+			exports.timeMonth = month;
+			exports.timeMonths = months;
+			exports.timeYear = year;
+			exports.timeYears = years;
+			exports.utcMillisecond = millisecond;
+			exports.utcMilliseconds = milliseconds;
+			exports.utcSecond = second;
+			exports.utcSeconds = seconds;
+			exports.utcMinute = utcMinute;
+			exports.utcMinutes = utcMinutes;
+			exports.utcHour = utcHour;
+			exports.utcHours = utcHours;
+			exports.utcDay = utcDay;
+			exports.utcDays = utcDays;
+			exports.utcWeek = utcSunday;
+			exports.utcWeeks = utcSundays;
+			exports.utcSunday = utcSunday;
+			exports.utcSundays = utcSundays;
+			exports.utcMonday = utcMonday;
+			exports.utcMondays = utcMondays;
+			exports.utcTuesday = utcTuesday;
+			exports.utcTuesdays = utcTuesdays;
+			exports.utcWednesday = utcWednesday;
+			exports.utcWednesdays = utcWednesdays;
+			exports.utcThursday = utcThursday;
+			exports.utcThursdays = utcThursdays;
+			exports.utcFriday = utcFriday;
+			exports.utcFridays = utcFridays;
+			exports.utcSaturday = utcSaturday;
+			exports.utcSaturdays = utcSaturdays;
+			exports.utcMonth = utcMonth;
+			exports.utcMonths = utcMonths;
+			exports.utcYear = utcYear;
+			exports.utcYears = utcYears;
+			exports.formatLocale = formatLocale;
+			exports.formatDefaultLocale = defaultLocale;
+			exports.formatSpecifier = formatSpecifier;
+			exports.precisionFixed = precisionFixed;
+			exports.precisionPrefix = precisionPrefix;
+			exports.precisionRound = precisionRound;
+			exports.isoFormat = formatIso;
+			exports.isoParse = parseIso;
+			exports.timeFormatLocale = formatLocale$1;
+			exports.timeFormatDefaultLocale = defaultLocale$1;
+			exports.scaleBand = band;
+			exports.scalePoint = point$4;
+			exports.scaleIdentity = identity$4;
+			exports.scaleLinear = linear$2;
+			exports.scaleLog = log;
+			exports.scaleOrdinal = ordinal;
+			exports.scaleImplicit = implicit;
+			exports.scalePow = pow;
+			exports.scaleSqrt = sqrt;
+			exports.scaleQuantile = quantile$$1;
+			exports.scaleQuantize = quantize$1;
+			exports.scaleThreshold = threshold$1;
+			exports.scaleTime = time;
+			exports.scaleUtc = utcTime;
+			exports.schemeCategory10 = category10;
+			exports.schemeCategory20b = category20b;
+			exports.schemeCategory20c = category20c;
+			exports.schemeCategory20 = category20;
+			exports.scaleSequential = sequential;
+			exports.interpolateCubehelixDefault = cubehelix$3;
+			exports.interpolateRainbow = rainbow$1;
+			exports.interpolateWarm = warm;
+			exports.interpolateCool = cool;
+			exports.interpolateViridis = viridis;
+			exports.interpolateMagma = magma;
+			exports.interpolateInferno = inferno;
+			exports.interpolatePlasma = plasma;
+			exports.creator = creator;
+			exports.customEvent = customEvent;
+			exports.local = local;
+			exports.matcher = matcher$1;
+			exports.mouse = mouse;
+			exports.namespace = namespace;
+			exports.namespaces = namespaces;
+			exports.select = select;
+			exports.selectAll = selectAll;
+			exports.selection = selection;
+			exports.selector = selector;
+			exports.selectorAll = selectorAll;
+			exports.touch = touch;
+			exports.touches = touches;
+			exports.window = window;
+			exports.active = active;
+			exports.interrupt = interrupt;
+			exports.transition = transition;
+			exports.axisTop = axisTop;
+			exports.axisRight = axisRight;
+			exports.axisBottom = axisBottom;
+			exports.axisLeft = axisLeft;
+			exports.cluster = cluster;
+			exports.hierarchy = hierarchy;
+			exports.pack = index;
+			exports.packSiblings = siblings;
+			exports.packEnclose = enclose;
+			exports.partition = partition;
+			exports.stratify = stratify;
+			exports.tree = tree;
+			exports.treemap = index$1;
+			exports.treemapBinary = binary;
+			exports.treemapDice = treemapDice;
+			exports.treemapSlice = treemapSlice;
+			exports.treemapSliceDice = sliceDice;
+			exports.treemapSquarify = squarify;
+			exports.treemapResquarify = resquarify;
+			exports.forceCenter = center$1;
+			exports.forceCollide = collide;
+			exports.forceLink = link;
+			exports.forceManyBody = manyBody;
+			exports.forceSimulation = simulation;
+			exports.forceX = x$3;
+			exports.forceY = y$3;
+			exports.drag = drag;
+			exports.dragDisable = dragDisable;
+			exports.dragEnable = yesdrag;
+			exports.voronoi = voronoi;
+			exports.zoom = zoom;
+			exports.zoomIdentity = identity$6;
+			exports.zoomTransform = transform;
+			exports.brush = brush;
+			exports.brushX = brushX;
+			exports.brushY = brushY;
+			exports.brushSelection = brushSelection;
+			exports.chord = chord;
+			exports.ribbon = ribbon;
+			exports.geoAlbers = albers;
+			exports.geoAlbersUsa = albersUsa;
+			exports.geoArea = area$2;
+			exports.geoAzimuthalEqualArea = azimuthalEqualArea;
+			exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
+			exports.geoAzimuthalEquidistant = azimuthalEquidistant;
+			exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
+			exports.geoBounds = bounds;
+			exports.geoCentroid = centroid$1;
+			exports.geoCircle = circle$1;
+			exports.geoClipExtent = extent$1;
+			exports.geoConicConformal = conicConformal;
+			exports.geoConicConformalRaw = conicConformalRaw;
+			exports.geoConicEqualArea = conicEqualArea;
+			exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
+			exports.geoConicEquidistant = conicEquidistant;
+			exports.geoConicEquidistantRaw = conicEquidistantRaw;
+			exports.geoDistance = distance;
+			exports.geoEquirectangular = equirectangular;
+			exports.geoEquirectangularRaw = equirectangularRaw;
+			exports.geoGnomonic = gnomonic;
+			exports.geoGnomonicRaw = gnomonicRaw;
+			exports.geoGraticule = graticule;
+			exports.geoGraticule10 = graticule10;
+			exports.geoIdentity = identity$8;
+			exports.geoInterpolate = interpolate$2;
+			exports.geoLength = length$2;
+			exports.geoMercator = mercator;
+			exports.geoMercatorRaw = mercatorRaw;
+			exports.geoOrthographic = orthographic;
+			exports.geoOrthographicRaw = orthographicRaw;
+			exports.geoPath = index$3;
+			exports.geoProjection = projection;
+			exports.geoProjectionMutator = projectionMutator;
+			exports.geoRotation = rotation;
+			exports.geoStereographic = stereographic;
+			exports.geoStereographicRaw = stereographicRaw;
+			exports.geoStream = geoStream;
+			exports.geoTransform = transform$1;
+			exports.geoTransverseMercator = transverseMercator;
+			exports.geoTransverseMercatorRaw = transverseMercatorRaw;
+
+			Object.defineProperty(exports, '__esModule', { value: true });
+
+			})));
+
+
+			//aigner: HERE IS WHERE IT ALL STARTS!!!
+			},{}],2:[function(require,module,exports){
+				
+
+
+				
+			var d3 = require('d3');
+
+			var PULSE_DURATION = 700;
+			var SUB_ANIM_DELAY = 200;
+			var ACTIVE_COLOR = d3.rgb("seagreen");
+
+			function Animation(xdsms, rootId, delay) {
+			  this.rootId = rootId;
+			  if (typeof (rootId) === 'undefined') {
+				this.rootId = 'root';
+			  }
+			  this.root = xdsms[this.rootId];
+			  this.xdsms = xdsms;
+			  this.duration = PULSE_DURATION;
+			  this.initialDelay = delay || 0;
+			}
+
+			Animation.prototype._pulse = function(delay, toBeSelected, option) {
+			  var sel = d3.select("svg." + this.rootId)
+						  .selectAll(toBeSelected)
+						  .transition().delay(delay);
+			  if (option !== "out") {
+				sel = sel.transition().duration(200)
+						.style('stroke-width', '8px')
+						.style('stroke', ACTIVE_COLOR)
+						.style('fill', function(d) {
+						  if (d.id) {
+							return ACTIVE_COLOR.brighter();
+						  }});
+			  }
+			  if (option !== "in") {
+				sel.transition().duration(3 * PULSE_DURATION)
+						.style('stroke-width', null)
+						.style('stroke', null)
+						.style('fill', null);
+			  }
+			};
+
+			Animation.prototype._animate = function() {
+			  var self = this;
+			  var delay = this.initialDelay;
+			  var animDelay = SUB_ANIM_DELAY;
+			  var graph = self.xdsms[self.rootId].graph;
+			  
+			  var title = d3.select("svg." + self.rootId).select("g.title");
+			  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
+			  d3.select("svg." + self.rootId).select("rect.border")
+				.transition().delay(delay)
+				  .style("stroke-width", '5px').duration(200)
+				.transition().duration(1000)
+				  .style("stroke", 'black').style("stroke-width", '0px');
+
+			  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
+				var offsets = [];
+				nodesAtStep.forEach(function(nodeId) {
+				  var elapsed = delay + n * PULSE_DURATION;
+				  if (n > 0) {
+					nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
+					  var from = graph.idxOf(prevNodeId);
+					  var to = graph.idxOf(nodeId);
+					  self._pulse(elapsed,"polyline.link_" + from + "_" + to);
+					});
+				  }
+				  //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
+				  var gnode = "g." + nodeId;
+				  var nodeSel = d3.select("svg." + self.rootId).select(gnode);
+				  var scnId = graph.getNode(nodeId).getScenarioId();
+				  if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
+				  {
+					  self._pulse(elapsed, gnode + " > rect", "in");
+					  var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
+					  var offset = anim._animate();
+					  offsets.push(offset);
+					  self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
+				  } 
+				  else 
+				  {
+					  self._pulse(elapsed, gnode + " > rect");
+				  }
+				}, this);
+
+				if (offsets.length > 0) {
+				  delay += Math.max.apply(null, offsets);
+				}
+				delay += animDelay;
+			  }, this);
+				
+			  title.select("text").transition()
+				.delay(graph.nodesByStep.length * PULSE_DURATION + delay)
+				.style("fill", null);
+
+			  return graph.nodesByStep.length * PULSE_DURATION;
+			};
+
+			Animation.prototype.run = function() {
+			  this._animate();
+			};
+
+			module.exports = Animation;
+
+			},{"d3":1}],3:[function(require,module,exports){
+			var UID = "_U_";
+			var MULTI_TYPE = "_multi";
+
+			//aigner: Node() constructor additionally gets the "xdsm"
+			function Node(xdsm, id, name, type, metadata) {
+				
+			  var splitUndef = name.split("undefined: ")
+			  if (splitUndef.length>1) {name=splitUndef[1]}
+			  else {name=splitUndef[0]}
+			  
+			  if (typeof (name) === 'undefined') {
+				name = id;
+			  }
+			  if (typeof (type) === 'undefined') {
+				type = 'analysis';
+			  }
+			  this.xdsm = xdsm;
+			  this.id = id;
+			  this.name = name;
+			  this.metadata = metadata;
+			  this.isMulti = (type.search(/_multi$/) >= 0);
+			  this.type = this.isMulti ?
+				type.substr(0, type.length - MULTI_TYPE.length) : type;
+			}
+
+			Node.prototype.isMdo = function() {
+			  return this.type === "mdo";
+			};
+
+			Node.prototype.getScenarioId = function() {
+			  if (this.isMdo()) {
+				var idxscn = this.name.indexOf("_scn-");
+				if (idxscn === -1) {
+				  console.log("Warning: MDO Scenario not found. " +
+							  "Bad type or name for node: " + JSON.stringify(this));
+				  return null;
+				}
+				return this.name.substr(idxscn + 1);
+			  }
+			  return null;
+			};
+
+			function Edge(from, to, name, row, col, isMulti) {
+			  this.id = "link_" + from + "_" + to;
+			  this.name = name;
+			  this.row = row;
+			  this.col = col;
+			  this.iotype = row < col ? "in" : "out";
+			  this.io = {
+				fromU: (from === UID),
+				toU: (to === UID)
+			  };
+			  this.from = from;
+			  this.to = to;
+			  this.isMulti = isMulti;
+			}
+
+			Edge.prototype.isIO = function() {
+			  return this.io.fromU || this.io.toU;
+			};
+
+			//aigner: Function creates the xdsm graph
+			function Graph(mdo, refname) {
+			  this.nodes = [new Node(UID, UID, UID, "user",[])];
+			  this.edges = [];
+			  this.chains = [];
+			  this.refname = refname || "";
+			  
+			  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
+			  var numbering = Graph.new_number(mdo.workflow);
+			  //var numbering = Graph.number(mdo.workflow);
+			  var numPrefixes = numbering.toNum;
+			  this.nodesByStep = numbering.toNode;
+
+			  mdo.nodes.forEach(function(item) {
+				name = document.createElement("TEXTAREA");
+				name = numPrefixes[item.id] + ": " + item.name;
+				this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
+			  }, this);
+
+			  this.ids = this.nodes.map(function(elt) {
+				return elt.id;
+			  });
+			  
+			  mdo.edges.forEach(function(item) {
+				var idA = this.idxOf(item.from);
+				var idB = this.idxOf(item.to);
+				
+				var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
+				this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
+			  }, this);
+
+			  
+			  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
+			  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
+			  // var echain = Graph.expand(mdo.workflow); 
+			  // echain.forEach(function(leafChain) {
+				// if (leafChain.length < 2) {
+				  // throw new Error("Bad process chain (" + leafChain.length + "elt)");
+				// } else {
+				  // this.chains.push([]);
+				  // var ids = this.nodes.map(function(elt) {
+					// return elt.id;
+				  // });
+				  // leafChain.forEach(function(item, j) {
+					// if (j !== 0) {
+					  // var idA = ids.indexOf(leafChain[j - 1]);
+					  // if (idA < 0) {
+						// throw new Error("Process chain element (" +
+										// leafChain[j - 1] + ") not found");
+					  // }
+					  // var idB = ids.indexOf(leafChain[j]);
+					  // if (idB < 0) {
+						// throw new Error("Process chain element (" +
+										// leafChain[j] + ") not found");
+					  // }
+					  // if (idA !== idB) {
+						// this.chains[this.chains.length - 1].push([idA, idB]);
+					  // }
+					// }
+				  // }, this);
+				// }
+			  // }, this);
+			  
+			  
+			}
+
+			Graph.prototype.idxOf = function(nodeId) {
+			  return this.ids.indexOf(nodeId);
+			};
+			Graph.prototype.getNode = function(nodeId) {
+			  return this.nodes[this.ids.indexOf(nodeId)];
+			};
+
+			function _expand(workflow) {
+			  var ret = [];
+			  var prev;
+			  workflow.forEach(function(item) {
+				if (item instanceof Array) {
+				  if (item[0].hasOwnProperty('parallel')) {
+					if (prev) {
+					  ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
+						  function(elt) {
+							return [prev].concat(_expand([elt]), prev);
+						  }));
+					} else {
+					  throw new Error("Bad workflow structure : " +
+						  "cannot parallel loop without previous starting point.");
+					}
+				  } else if (prev) {
+					ret = ret.concat(_expand(item), prev);
+				  } else {
+					ret = ret.concat(_expand(item));
+				  }
+				  prev = ret[ret.length - 1];
+				} else if (item.hasOwnProperty('parallel')) {
+				  if (prev) {
+					ret = ret.slice(0, ret.length - 1).concat(
+						item.parallel.map(function(elt) {
+						  return [prev].concat(_expand([elt]));
+						}));
+				  } else {
+					ret = ret.concat(item.parallel.map(
+						function(elt) {
+						  return _expand([elt]);
+						}));
+				  }
+				  prev = undefined;
+				} else {
+				  var i = ret.length - 1;
+				  var flagParallel = false;
+				  while (i >= 0 && (ret[i] instanceof Array)) {
+					ret[i] = ret[i].concat(item);
+					i -= 1;
+					flagParallel = true;
+				  }
+				  if (!flagParallel) {
+					ret.push(item);
+				  }
+				  prev = item;
+				}
+			  }, this);
+			  return ret;
+			}
+
+			Graph.expand = function(item) {
+			  var expanded = _expand(item);
+			  var result = [];
+			  var current = [];
+			  expanded.forEach(function(elt) {
+				if (elt instanceof Array) {
+				  if (current.length > 0) {
+					current.push(elt[0]);
+					result.push(current);
+					current = [];
+				  }
+				  result.push(elt);
+				} else {
+				  if (result.length > 0 && current.length === 0) {
+					var lastChain = result[result.length - 1];
+					var lastElt = lastChain[lastChain.length - 1];
+					current.push(lastElt);
+				  }
+				  current.push(elt);
+				}
+			  }, this);
+			  if (current.length > 0) {
+				result.push(current);
+			  }
+			  return result;
+			};
+
+			Graph.new_expand = function(workflow,nodes) {
+				var ids = nodes.map(function(elt) {
+					return elt.id;
+				});
+				var result_tmp = [];
+				for (var i=0; i < workflow.length; i++)
+				{
+					var stepNumber = workflow[i].step_number
+					var edges = workflow[i].edges;
+					for (var j=0; j < edges.length; j++)
+					{
+						var fromNode = edges[j][0];
+						var toNode = edges[j][1];			
+						var fromId = ids.indexOf(fromNode)+1;
+						var toId = ids.indexOf(toNode)+1;
+						result_tmp.push([fromId,toId]);
+					}
+				}
+				var result = [];
+				result.push(result_tmp)
+				return result;
+			};
+
+			Graph.number = function(workflow, num) {
+			  num = (typeof num === 'undefined') ? 0 : num;
+			  var toNum = {};
+			  var toNode = [];
+
+			  function setStep(step, nodeId) {
+				if (step in toNode) {
+				  toNode[step].push(nodeId);
+				} else {
+				  toNode[step] = [nodeId];
+				}
+			  }
+
+			  function setNum(nodeId, beg, end) {
+				if (end === undefined) {
+				  num = String(beg);
+				  setStep(beg, nodeId);
+				} else {
+				  num = end + "-" + beg;
+				  setStep(end, nodeId);
+				}
+				if (nodeId in toNum) {
+				  toNum[nodeId] += "," + num;
+				} else {
+				  toNum[nodeId] = num;
+				}
+			  }
+
+			  function _number(wks, num) {
+				var ret = 0;
+				if (wks instanceof Array) {
+				  if (wks.length === 0) {
+					ret = num;
+				  } else if (wks.length === 1) {
+					ret = _number(wks[0], num);
+				  } else {
+					var head = wks[0];
+					var tail = wks.slice(1);
+					var beg = _number(head, num);
+					if (tail[0] instanceof Array) {
+					  var end = _number(tail[0], beg);
+					  setNum(head, beg, end);
+					  beg = end + 1;
+					  tail.shift();
+					}
+					ret = _number(tail, beg);
+				  }
+				} else if ((wks instanceof Object) && 'parallel' in wks) {
+				  var nums = wks.parallel.map(function(branch) {
+					return _number(branch, num);
+				  });
+				  ret = Math.max.apply(null, nums);
+				} else {
+				  setNum(wks, num);
+				  ret = num + 1;
+				}
+				return ret;
+			  }
+
+			  _number(workflow, num);
+			  // console.log('toNodes=', JSON.stringify(toNode));
+			  // console.log('toNum=',JSON.stringify(toNum));
+			  return {toNum: toNum, toNode: toNode};
+			};
+
+			//aigner: New numbering for the workflow nodes
+			Graph.new_number = function(workflow, num) {
+				num = (typeof num === 'undefined') ? 0 : num;
+				var toNum = {};
+				var toNode = [];
+				
+				for (var i=0; i < workflow.length; i++)
+				{
+					//aigner: Number the nodes with respect to the defined process steps
+					//--> toNum
+					//##########################################
+					for (var j=0; j < workflow[i].process_step_blocks.length; j++)
+					{
+						var proc_id_to = workflow[i].process_step_blocks[j];
+						if (proc_id_to)
+						{
+
+							if (!toNum[proc_id_to])
+							{
+								toNum[proc_id_to] = workflow[i].step_number;
+							}
+							else
+							{
+								toNum[proc_id_to] += "," + workflow[i].step_number;
+							}
+						}
+					}
+					for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
+					{
+						var conv_id_to = workflow[i].converger_step_blocks[j];
+						if (conv_id_to)
+						{
+							toNum[conv_id_to] += "," + workflow[i].step_number;
+							var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
+							//aigner: CAUTION --> hard coded exception for coordinator
+							if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
+						}
+					}
+					//##########################################		
+					//--> toNode
+					//##########################################
+					var stepNumber = workflow[i].step_number
+					var nodeId;
+					if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
+					else
+					{
+						var nodeIds = [];
+						for (var j=0; j<workflow[i].edges.length ;j++)
+						{
+							nodeIds.push(workflow[i].edges[j][1]);
+						}
+						nodeId = nodeIds;
+					}
+					toNode[stepNumber] = nodeId;
+					//##########################################
+				}	
+				return {toNum: toNum, toNode: toNode};
+			};
+
+			module.exports = Graph;
+
+			},{}],4:[function(require,module,exports){
+			function Labelizer() {}
+
+			Labelizer.strParse = function(str) {
+			  if (str === "") {
+				return [{base: '', sub: undefined, sup: undefined}];
+			  }
+
+			  //console.log("STR-->")
+			  //console.log(str);
+			  //aigner: Space sign added
+			  var lstr = str.split(',');
+			  var underscores = /_/g;
+			  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
+
+			  var res = lstr.map(function(s) {
+				var base;
+				var sub;
+				var sup;
+				
+				//aigner: Modification. xpath is split after each "/"
+				var s_split = s.split("/");
+				s = s_split[s_split.length-1];
+
+				if ((s.match(underscores) || []).length > 1) {
+				  var mu = s.match(/(.+)^(.+)/);
+				  if (mu) {
+					return {base: mu[1], sub: undefined, sup: mu[2]};
+				  }
+				  return {base: s, sub: undefined, sup: undefined};
+				}
+				var m = s.match(rg);
+				if (m) {
+				  base = (m[1] ? m[1] : "") + m[2];
+				  if (m[3]) {
+					sub = m[3].substring(1);
+				  }
+				  if (m[4]) {
+					sup = m[4].substring(1);
+				  }
+				} else {
+				  throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
+				}
+				return {base: base, sub: sub, sup: sup};
+			  }, this);
+			 
+			  return res;
+			};
+
+			Labelizer.labelize = function() {
+			  var ellipsis = 0;
+
+			  //aigner: createLabel modified. Hide variable names if too long.
+			  function createLabel(selection) 
+			  {
+				selection.each(function(d) {
+					//console.log("Labelize-->");
+					//console.log(d);
+				  var tokens = Labelizer.strParse(d.name);
+				  var text = selection.append("text");
+
+				  var className = selection._groups[0][0].getAttribute("class");
+
+				  if (className.includes("node"))
+				  {
+					tokens.every(function(token, i, ary)
+					{
+						var offsetSub = 0;
+						var offsetSup = 0;
+						//aigner: If the node is too big, it will not be shown at first, only when hovering
+						if (ellipsis < 1 || i < 15) 
+						{
+							text.append("tspan").text(token.base);
+							if (token.sub) 
+							{
+							offsetSub = 10;
+							text.append("tspan")
+							  .attr("class", "sub")
+							  .attr("dy", offsetSub)
+							  .text(token.sub);
+							}
+							if (token.sup) {
+								offsetSup = -10;
+								text.append("tspan")
+								  .attr("class", "sup")
+								  .attr("dx", -5)
+								  .attr("dy", -offsetSub + offsetSup)
+								  .text(token.sup);
+								offsetSub = 0;
+							}
+						} else 
+						{
+							text.append("tspan")
+								.attr("dy", -offsetSub - offsetSup)
+								.text("...");
+							selection.classed("ellipsized", true);
+							return false;
+						}
+						if (i < ary.length - 1) 
+						{
+							  text.append("tspan")
+								.attr("dy", -offsetSub - offsetSup)
+								.text(", ");
+						}
+						return true;
+					}, this);
+				  }
+				  else if(className.includes("edge"))
+				  {	  
+						var offsetSub = 0;
+						var offsetSup = 0;
+						//aigner: If there are more than 5 variables in an edge, they are not shown!
+						tokens.every(function(token, i, ary)
+						{           			
+							if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
+							else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
+							else{text_tmp = "conn."}
+							//if (ary.length>1){text_tmp = text_tmp+"s"};
+							text.append("tspan")
+							.attr("dy", -offsetSub - offsetSup)
+							.text(ary.length + " " + text_tmp);                    
+							
+							selection.classed("ellipsized", true);
+							return false;
+						}, this);
+				  }
+				});
+			  }
+
+			  createLabel.ellipsis = function(value) {  
+				if (!arguments.length) {
+				  return ellipsis;
+				}
+				ellipsis = value;
+				return createLabel;
+			  };
+
+			  return createLabel;
+			};
+
+			Labelizer.tooltipize = function() {
+			  var text = "";
+
+			  function createTooltip(selection) {
+				var tokens = Labelizer.strParse(text);
+				var html = [];
+				tokens.forEach(function(token) {
+				  var item = token.base;
+				  if (token.sub) {
+					item += "<sub>" + token.sub + "</sub>";
+				  }
+				  if (token.sup) {
+					item += "<sup>" + token.sup + "</sup>";
+				  }
+				  html.push(item);
+				}, this);
+				selection.html(html.join(", "));
+			  }
+
+			  createTooltip.text = function(value) {
+				if (!arguments.length) {
+				  return text;
+				}
+				text = value;
+				return createTooltip;
+			  };
+
+			  return createTooltip;
+			};
+
+			module.exports = Labelizer;
+
+			},{}],5:[function(require,module,exports){
+			var d3 = require('d3');
+			var Labelizer = require('./labelizer.js');
+
+			var WIDTH = 1000;
+			var HEIGHT = 500;
+			var X_ORIG = 70;
+			var Y_ORIG = 20;
+			var PADDING = 20;
+			var CELL_W = 250;
+			var CELL_H = 75;
+			var MULTI_OFFSET = 3;
+
+			function Cell(x, y, width, height) {
+			  this.x = x;
+			  this.y = y;
+			  this.width = width;
+			  this.height = height;
+			}
+
+			function Xdsm(graph, svgid, tooltip) {
+			  this.graph = graph;
+			  this.tooltip = tooltip;
+			  this.svg = d3.select(".xdsm")
+						   .append("svg")
+						 .attr("width", WIDTH)
+						 .attr("height", HEIGHT)
+						 .attr("class", svgid);
+
+			  this.grid = [];
+			  this.nodes = [];
+			  this.edges = [];
+			}
+
+			Xdsm.prototype.draw = function(graphName) {
+			  var self = this;
+
+			  if (self.graph.refname) {
+				var ref = self.svg.append('g').classed('title', true);
+
+				var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
+					
+				//ref.append("text").text(graphName);
+				var bbox = ref.nodes()[0].getBBox();
+				ref.insert("rect", "text")
+					.attr('x', bbox.x)
+					.attr('y', bbox.y)
+					.attr('width', bbox.width)
+					.attr('height', bbox.height);
+
+				ref.attr('transform',
+						 'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
+			  }
+
+			  self.nodes = self._createTextGroup("node");
+			  self.edges = self._createTextGroup("edge");
+
+			  // Workflow
+			  self._createWorkflow();
+
+			  // Layout texts
+			  self._layoutText(self.nodes);
+			  self._layoutText(self.edges);
+
+			  // Rectangles for nodes
+			  self.nodes.each(function(d, i) {
+				var that = d3.select(this);
+				that.call(self._customRect.bind(self), d, i, 0);
+				if (d.isMulti) {
+				  that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+				  that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+				}
+			  });
+
+			  // Trapezium for edges
+			  self.edges.each(function(d, i) {
+				var that = d3.select(this);
+				that.call(self._customTrapz.bind(self), d, i, 0);
+				if (d.isMulti) {
+				  that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+				  that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+				}
+			  });
+
+			  // Dataflow
+			  self._createDataflow(self.edges);
+				
+			  //aigner: set svg size
+			  var w = CELL_W * (self.graph.nodes.length + 1);
+			  var h = CELL_H * (self.graph.nodes.length + 1);
+			  self.svg.attr("width", w).attr("height", h);
+
+			  var bordercolor = 'black';
+			  self.svg.append("rect")
+						.classed("border", true)
+						.attr("x", 4)
+						.attr("y", 4)
+						.attr("height", h - 4)
+						.attr("width", w - 4)
+						.style("stroke", bordercolor)
+						.style("fill", "none")
+						.style("stroke-width", 0);
+						
+			  //aigner: PlayButton for animation
+			  var playButton = self.svg.append("g").attr("class", "playButton")
+				  .attr("transform", "translate("+ 10 +","+ 10 +")")
+				  
+			  playButton
+				.append("rect")
+				  .attr("class", "playButton_rect")
+				  .attr("width", 50)
+				  .attr("height", 50)
+				  .attr("rx", 4)
+				  .style("fill", "#555555");
+				  
+			  playButton
+				.append("path")
+				  .attr("class", "playButton_triangle")
+				  .attr("d", "M15 10 L15 40 L35 25 Z")
+				  .style("fill", "white");
+				  
+			  playButton.append("text")
+				  .attr("y",20)
+				  .attr("x",60)
+				  .text("Play Workflow")
+
+			  //aigner: Hide playbutton if there is no workflow process
+			  if(self.graph.nodesByStep.length<1)
+			  {
+				  playButton.attr("visibility","hidden")
+			  }
+			  playButton.append("svg:title").text("Click to play workflow");
+			};
+
+			Xdsm.prototype._createTextGroup = function(kind) {
+			  var self = this;
+
+			  var group = self.svg.append('g').attr("class", kind + "s");
+
+			  var textGroups =
+				group.selectAll("." + kind)
+				  .data(this.graph[kind + "s"])
+				.enter()
+				  .append("g").attr("class", function(d) {
+					var klass = kind === "node" ? d.type : "dataInter";
+					if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
+					  klass = "dataIO";
+					}
+					return d.id + " " + kind + " " + klass;
+				  }).each(function() {
+					var labelize = Labelizer.labelize().ellipsis(5);
+					d3.select(this).call(labelize);
+				  });
+
+			  d3.selectAll(".ellipsized")
+				.on("mouseover", function(d) {
+					d3.select(this).style("cursor", "pointer")
+					self.tooltip.transition().duration(200).style("opacity", 0.9);
+					var pipeData = d.name.split(",");
+					var pipeVariables=[];
+					for (var i=0; i<pipeData.length; i++)
+					{
+						if (pipeData[i].includes("/"))
+						{
+							var splitPipeData = pipeData[i].split("/");
+							pipeVariables.push(splitPipeData[splitPipeData.length-1]);
+						}
+					}
+					
+
+					var pruned_pipeVars = {};
+					var tooltipText="";
+					pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
+					for(var keyName in pruned_pipeVars) {
+						var textTmp;
+						var value = pruned_pipeVars[keyName]
+						if (value>1){textTmp = String(keyName+"("+value+")")}
+						else{textTmp=String(keyName)}
+						if (tooltipText==""){tooltipText+=textTmp}
+						else{tooltipText+=","+textTmp}
+					}
+					
+					var tooltipize = Labelizer.tooltipize().text(tooltipText);
+					self.tooltip.call(tooltipize)
+					  .style("width", "200px")
+					  .style("left", (d3.event.pageX) + "px")
+					  .style("top", (d3.event.pageY - 28) + "px");
+				})
+				.on("mouseout", function() {
+					self.tooltip.transition().duration(500).style("opacity", 0);
+				});
+
+			  return textGroups;
+			};
+
+			Xdsm.prototype._createWorkflow = function() {
+			  //  console.log(JSON.stringify(this.graph.chains));
+			  var workflow = this.svg.insert("g", ":first-child")
+								.attr("class", "workflow");
+			  workflow.selectAll("g")
+				.data(this.graph.chains)
+			  .enter()
+				.insert('g').attr("class", "workflow-chain")
+				.selectAll('polyline')
+				  .data(function(d) { return d; })  // eslint-disable-line brace-style
+				.enter()
+				  .append("polyline")
+					.attr("class", function(d) {
+					  return "link_" + d[0] + "_" + d[1];
+					})
+					.attr("points", function(d) {
+					  var w = CELL_W * Math.abs(d[0] - d[1]);
+					  var h = CELL_H * Math.abs(d[0] - d[1]);
+					  var points = [];
+					  if (d[0] < d[1]) {
+						if (d[0] !== 0) {
+						  points.push((-w) + ",0");
+						}
+						points.push("0,0");
+						if (d[1] !== 0) {
+						  points.push("0," + h);
+						}
+					  } else {
+						if (d[0] !== 0) {
+						  points.push(w + ",0");
+						}
+						points.push("0,0");
+						if (d[1] !== 0) {
+						  points.push("0," + (-h));
+						}
+					  }
+					  return points.join(" ");
+					})
+				  .attr("transform", function(d) {
+					var max = Math.max(d[0], d[1]);
+					var min = Math.min(d[0], d[1]);
+					var w;
+					var h;
+					if (d[0] < d[1]) {
+					  w = CELL_W * max + X_ORIG;
+					  h = CELL_H * min + Y_ORIG;
+					} else {
+					  w = CELL_W * min + X_ORIG;
+					  h = CELL_H * max + Y_ORIG;
+					}
+					return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+				  });
+			};
+
+			Xdsm.prototype._createDataflow = function(edges) {
+			  var dataflow = this.svg.insert("g", ":first-child")
+							   .attr("class", "dataflow");
+
+			  edges.each(function(d, i) {
+				dataflow.insert("polyline", ":first-child")
+				  .attr("points", function() {
+					var w = CELL_W * Math.abs(d.col - d.row);
+					var h = CELL_H * Math.abs(d.col - d.row);
+					var points = [];
+					if (d.iotype === "in") {
+					  if (!d.io.fromU) {
+						points.push((-w) + ",0");
+					  }
+					  points.push("0,0");
+					  if (!d.io.toU) {
+						points.push("0," + h);
+					  }
+					} else {
+					  if (!d.io.fromU) {
+						points.push(w + ",0");
+					  }
+					  points.push("0,0");
+					  if (!d.io.toU) {
+						points.push("0," + (-h));
+					  }
+					}
+					return points.join(" ");
+				  }).attr("transform", function() {
+					var m = (d.col === undefined) ? i : d.col;
+					var n = (d.row === undefined) ? i : d.row;
+					var w = CELL_W * m + X_ORIG;
+					var h = CELL_H * n + Y_ORIG;
+					return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+				  });
+			  });
+			};
+
+			Xdsm.prototype._layoutText = function(items) {
+			  var grid = this.grid;
+			  items.each(function(d, i) {
+				var item = d3.select(this);
+				if (grid[i] === undefined) {
+				  grid[i] = new Array(items.length);
+				}
+				item.select("text").each(function(d, j) {
+				  var that = d3.select(this);
+				  var data = item.data()[0];
+				  var m = (data.row === undefined) ? i : data.row;
+				  var n = (data.col === undefined) ? i : data.col;
+				  var bbox = that.nodes()[j].getBBox();
+				  grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
+				  that.attr("x", function() {
+					return grid[m][n].x;
+				  }).attr("y", function() {
+					return grid[m][n].y;
+				  }).attr("width", function() {
+					return grid[m][n].width;
+				  }).attr("height", function() {
+					return grid[m][n].height;
+				  });
+				});
+			  });
+
+			  items.attr("transform", function(d, i) {
+				var m = (d.col === undefined) ? i : d.col;
+				var n = (d.row === undefined) ? i : d.row;
+				var w = CELL_W * m + X_ORIG;
+				var h = CELL_H * n + Y_ORIG;
+				return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+			  });
+			};
+
+			Xdsm.prototype._customRect = function(node, d, i, offset) {
+			  var grid = this.grid;
+			  node.insert("rect", ":first-child").attr("x", function() {
+				return grid[i][i].x + offset - PADDING;
+			  }).attr("y", function() {
+				return -grid[i][i].height * 2 / 3 - PADDING - offset;
+			  }).attr("width", function() {
+				return grid[i][i].width + (PADDING * 2);
+			  }).attr("height", function() {
+				return grid[i][i].height + (PADDING * 2);
+			  }).attr("rx", function() {
+				var rounded = d.type === 'optimization' ||
+							  d.type === 'mda' ||
+							  d.type === 'doe' ||
+							  d.type === 'converger';
+				return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+			  }).attr("ry", function() {
+				var rounded = d.type === 'optimization' ||
+							  d.type === 'mda' ||
+							  d.type === 'doe' ||
+							  d.type === 'converger';
+				return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+			  });
+			};
+
+			Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
+			  var grid = this.grid;
+			  edge.insert("polygon", ":first-child").attr("points", function(d) {
+				var pad = 5;
+				var w = grid[d.row][d.col].width;
+				var h = grid[d.row][d.col].height;
+				var topleft = (-pad - w / 2 + offset) + ", " +
+							  (-pad - h * 2 / 3 - offset);
+				var topright = (w / 2 + pad + offset + 5) + ", " +
+							   (-pad - h * 2 / 3 - offset);
+				var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
+							   (pad + h / 3 - offset);
+				var botleft = (-pad - w / 2 + offset - 5) + ", " +
+							  (pad + h / 3 - offset);
+				var tpz = [topleft, topright, botright, botleft].join(" ");
+				return tpz;
+			  });
+			};
+
+			module.exports = Xdsm;
+
+			},{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
+			/*
+			 * XDSMjs
+			 * Copyright 2016 Rémi Lafage
+			 */
+			"use strict";
+
+
+
+
+			var d3 = require('d3');
+			var Graph = require('./src/graph');
+			var Xdsm = require('./src/xdsm');
+			var Animation = require('./src/animation');
+
+
+			//aigner: NEW!
+			//#####################################################################//
+			//aigner: functions for drawing expand- and collapse-symbols
+			function drawExpandSymbol(aCircle, line1, line2)
+			{        
+				 aCircle = aCircle
+					.attr("r", 10)
+					.style("stroke", "black")
+					.style("stroke-width", 2)
+					.style("fill", "#99CC00")
+					.style("fill-opacity", .6)
+				line1 = line1
+					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
+					.attr("y1", parseFloat(aCircle.attr("cy")))
+					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
+					.attr("y2", parseFloat(aCircle.attr("cy")))
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+				line2 = line2
+					.attr("x1", parseFloat(aCircle.attr("cx")))
+					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
+					.attr("x2", parseFloat(aCircle.attr("cx")))
+					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+			}
+			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+			{        
+				 var xOffset=150;
+				 var yOffset=12;
+				 aCircle = aCircle
+					.attr("cx", anXdsm.svg.attr("width")-xOffset)
+					.attr("cy", yOffset)
+					.attr("r", 10)
+					.classed("remCircle",true)
+				aMinus = aMinus
+					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+					.attr("y1", yOffset)
+					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+					.attr("y2", yOffset)
+					.classed("remMinus",true)
+			}
+			function drawTreeRemoveSymbol(aRemoveSymbol)
+			{
+				aRemoveSymbol = aRemoveSymbol
+					.attr("class", "treeRemoveSymbol")
+					.attr("transform", "translate(38,12)")
+				var circle = aRemoveSymbol.append("circle");
+				var minus = aRemoveSymbol.append("line");
+				var cx = -20;
+				var cy = 12;
+				circle = circle
+					.attr("cx", cx+5)
+					.attr("cy", cy)
+					.attr("r", 10)
+					.classed("remCircle",true)
+				minus = minus
+					.attr("x1", cx)
+					.attr("y1", cy)
+					.attr("x2", cx+10)
+					.attr("y2", cy)
+					.classed("remMinus",true)
+				aRemoveSymbol
+					.on("mouseover", function(){
+						d3.select(this).style("cursor", "pointer")
+						circle.style("fill", "red").style("fill-opacity", .8);
+						})
+					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			}
+
+			//aigner: Update of the sub workflows
+			function update_subXdsm(xdsms, refName)
+			{
+				var playButton = d3.select(".xdsm").select("."+refName).select(".playButton");
+				var rect = playButton.select(".playButton_rect");
+				playButton.on("mouseover",function(){
+						d3.select(this).style("cursor", "pointer")
+						rect.style("fill","#3399FF");
+					})
+					.on("mousedown", function()
+					{
+						rect.style("fill","#3399FF");
+						var anim = new Animation(xdsms, refName);
+						anim.run();
+					})
+					.on("mouseup", function(){rect.style("fill","#4B4B4B");})
+					.on("mouseout", function(){rect.style("fill","#555555");})
+			}
+			//d3-context-menu for right-click-option
+			d3.contextMenu = function (menu, openCallback) {
+
+				// create the div element that will hold the context menu
+				d3.selectAll('.d3-context-menu').data([1])
+					.enter()
+					.append('div')
+					.attr('class', 'd3-context-menu');
+
+				// close menu
+				d3.select('body').on('click.d3-context-menu', function() {
+					d3.select('.d3-context-menu').style('display', 'none');
+				});
+
+				// this gets executed when a contextmenu event occurs
+				return function(data, index) {	
+					var elm = this;
+
+					d3.selectAll('.d3-context-menu').html('');
+					var list = d3.selectAll('.d3-context-menu').append('ul');
+						list.selectAll('li').data(menu).enter()
+						.append('li')
+						.html(function(d) {
+							return d.title;
+						})
+						.on('mousedown', function(d, i) {
+							d.onMouseDown(elm, data, index);
+						})
+						.on('mouseup', function(d, i) {
+							d.onMouseUp(elm, data, index);
+							d3.select('.d3-context-menu').style('display', 'none');
+						})
+						.on('mouseenter',function(d,i){
+							d.onMouseOver(elm,data,index);
+							if(d.childrenItems.length>0 )
+								 {
+								  d3.select(this).selectAll("ul").remove(); 
+								  d3.select(this)
+									.append("ul")
+									.selectAll("li")
+									   .data(d.childrenItems)
+										.enter().append("li")
+										  .text(function(d) { return d.title; })
+									 .on("mouseenter", function(d,i){
+											d.onMouseOver(elm,data,index);
+										})
+									 .on('click',  function(d, i) {
+											d.onMouseClick(elm, d, index);
+										})
+									 .on('mouseleave',function(d,i){
+										
+										});
+								 }
+							 else
+								 return false;
+						})
+						.on('mouseleave',function(d,i){
+							d3.select(this).selectAll("ul").style('display', 'none')                  
+						});
+					
+					  
+
+					// the openCallback allows an action to fire before the menu is displayed
+					// an example usage would be closing a tooltip
+					if (openCallback) openCallback(data, index);
+
+					// display context menu
+					d3.select('.d3-context-menu')
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style('display', 'block');
+
+					d3.event.preventDefault();
+				};
+			};
+			//aigner: Move to front function
+			d3.selection.prototype.moveToFront = function() {  
+			  return this.each(function(){
+				this.parentNode.appendChild(this);
+			  });
+			};
+			//aigner: Include function
+			function include(arr,obj) {
+					return (arr.indexOf(obj) != -1);
+			}
+
+			//aigner: Function creates a table
+			function tabulate(aTable,data,columns) {
+				var thead = aTable.append('thead');
+				var	tbody = aTable.append('tbody');  
+
+				// create a row for each object in the data
+				var rows = tbody.selectAll('tr')
+				  .data(data)
+				  .enter()
+				  .append('tr');
+
+				// create a cell in each row for each column
+				var cells = rows.selectAll('td')
+				  .data(function (row) {
+					return columns.map(function (column) {
+					  return {column: column, value: row[column]};
+					});
+				  })
+				  .enter()
+				  .append('td')
+					.html(function (d) { return d.value; });
+
+				return aTable;
+			}
+
+			function loader(config) {
+			  return function() {
+				var radius = Math.min(config.width, config.height) / 2;
+				var tau = 2 * Math.PI;
+
+				var arc = d3.svg.arc()
+						.innerRadius(radius*0.5)
+						.outerRadius(radius*0.9)
+						.startAngle(0);
+
+				var svg = d3.select(config.container).append("svg")
+					.attr("id", config.id)
+					.attr("width", config.width)
+					.attr("height", config.height)
+				  .append("g")
+					.attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")")
+
+				var background = svg.append("path")
+						.datum({endAngle: 0.33*tau})
+						.style("fill", "#4D4D4D")
+						.attr("d", arc)
+						.call(spin, 1500)
+
+				function spin(selection, duration) {
+					selection.transition()
+						.ease("linear")
+						.duration(duration)
+						.attrTween("transform", function() {
+							return d3.interpolateString("rotate(0)", "rotate(360)");
+						});
+
+					setTimeout(function() { spin(selection, duration); }, duration);
+				}
+
+				function transitionFunction(path) {
+					path.transition()
+						.duration(7500)
+						.attrTween("stroke-dasharray", tweenDash)
+						.each("end", function() { d3.select(this).call(transition); });
+				}
+
+			  };
+			}
+
+
+			var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
+			
+			//aigner: NEW!
+			//aigner: Here, the data is read and the XDSM is created
+			//#####################################################################//
+			function startXDSM(data, graphID) 
+			{				
+				var graphs, currentGraph, varCategories, entireData;
+				
+				entireData = data;
+				graphs =  entireData.graphs;
+				for (var i=0;i<graphs.length;i++)
+				{
+					if (graphs[i].id==graphID)
+					{
+						currentGraph = graphs[i]
+					}
+				}
+				
+				varCategories =  entireData.categories;
+				
+				//aigner: Get xdsm data
+				var mdo = currentGraph.xdsm;
+				
+				d3.select("body").append("div").attr("class","xdsmDiv")	
+				//################################################################################################//	
+				var headerDiv = d3.select(".xdsmDiv").append("div").attr("class","panel panel-primary")
+				headerDiv.append("div").attr("class","panel-heading text-center")
+					.append("h3")
+					.attr("class","panel-title")
+					.style("font-family","Arial")
+					.style("font-size","20pt")
+					.text("XDSM View")
+				var name_tmp="";
+				if (currentGraph.name){name_tmp=currentGraph.name}
+				else{name_tmp="Graph " + currentGraph.id}
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph name: " + name_tmp)
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph description: " + currentGraph.description)
+				//################################################################################################//	
+				
+				
+				//aigner: Data Model Expand Button
+				//##########################################################
+				var dataModelDiv = d3.select(".xdsmDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
+				var ul = dataModelDiv.append("ul")
+				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
+					.attr("align","left")
+					.style("margin-left","6px")
+					.style("margin-right","-10px")
+					.style("margin-top","10px")
+					.style("margin-bottom","0px")
+					.attr("height","20")
+					.attr("width","20")
+				dropdown1.append("a").text("Data Model")
+				var links = dropdown1.append("ul");
+				for (var j=0; j< varCategories.length; j++)
+				{
+					//console.log(varCategories[j])
+					var linkLi = links.append("li");
+					var linkA = linkLi.append("a")
+						.attr("id",j)
+						.text(varCategories[j].description)
+						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+						.on("click", function()
+						{		
+							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
+						})
+				}
+				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
+				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
+				//##########################################################
+				
+				//aigner: Tree option menu to select which kind of tree view the user wants to see
+				//#####################################################################//
+				var emptyArray;
+				function showFullTree(aCategory,categoryDescr)
+				{
+					//expandSymbolDiv.remove();
+					var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv")
+													.style("left",(d3.event.pageX) + "px")
+													.style("top",(d3.event.pageY - 28) + "px")
+													.style("position", "absolute")
+					var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+					var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+					var name = "Full data model tree view " + "; Categorization: " + categoryDescr;
+					maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aCategory);
+					//Remove Symbol is created
+					var removeSymbol = treeLayout.append("g");
+					drawTreeRemoveSymbol(removeSymbol);
+					removeSymbol.on("mousedown", function(d)
+					{
+						treeLayoutdiv.remove();
+					})
+				}
+				
+				var childrenItems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					childrenItems.push({title: 'according to ' + varCategories[j].description,
+								   varCategory: varCategories[j].name,
+								   description: varCategories[j].description,
+								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
+								   onMouseOver: function(elm,d,i){}})
+				}
+				var treeOptionMenu = [
+				{
+					title: 'Show variable tree...',
+					onMouseDown: function(elm, d, i) {
+					},
+					onMouseUp: function(elm, d, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: childrenItems
+				}
+				]
+				//#####################################################################//
+				
+
+				//create the xdsm div
+				d3.select(".xdsmDiv").append("div").attr("class","xdsm");
+				//create tooltip
+				var tooltip = d3.select(".xdsmDiv").selectAll(".tooltip").data(['tooltip'])
+							  .enter().append("div")
+							.attr("class", "tooltip")
+							.style("opacity", 0);
+
+				var scenarioKeys = Object.keys(mdo).sort();
+				var xdsms = {};
+				
+				//If there is only one MDO and it is not named root, then it is created
+				if (scenarioKeys.indexOf('root') === -1) 
+				{
+					var scenarioKeys_tmp = [];
+					scenarioKeys_tmp.push('root');
+					scenarioKeys = scenarioKeys_tmp;
+					var mdo_tmp={};
+					mdo_tmp['root']=mdo;
+					mdo = mdo_tmp;
+				} 		
+				// new format managing several XDSM
+				var index = scenarioKeys.indexOf('root');
+				if (index > -1) 
+				{
+					scenarioKeys.splice(index, 1);
+				}
+				scenarioKeys.unshift('root');
+
+				var xdsm;
+				scenarioKeys.forEach(function(k) 
+				{
+					if (mdo.hasOwnProperty(k) && k =="root") 
+					{
+						//aigner: Here the graphs are created
+						var graph = new Graph(mdo[k], k);
+						//aigner: Here the xdsms are drawn
+						xdsms[k] = new Xdsm(graph, k, tooltip);
+						xdsms[k].draw(currentGraph.name);
+						xdsm = xdsms[k];
+						update_subXdsm(xdsms, k);
+						prepareTreeLayout(xdsms, k);
+					}
+				}, this)
+				
+					
+				xdsm.svg.selectAll(".node")
+				.each(function(d) 
+				{		
+					var gNode = this;
+					var d3gNode = d3.select(gNode);
+					
+					//aigner: Creation of input/output tree
+					//############################################################
+					function showIOTree(aCategory, categoryDescr, k, io)
+					{
+						var edges = d3.selectAll(".edge");
+						var array="";
+						var name;
+						edges.each(function(d)
+						{			
+							if (io=="in")
+							{
+								name = "Input tree view: " + k.id + "; Categorization: " + categoryDescr;
+								if (d.to == k.id)
+								{
+									array = array + ", " + d.name;
+								}
+							}
+							else if (io=="out")
+							{
+								name = "Output tree view:" + k.id + "; Categorization: " + categoryDescr;
+								if (d.from == k.id)
+								{
+									array = array + ", " + d.name;
+								}
+							}
+						})
+						var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_input_"+k.id)
+														.style("left",(d3.event.pageX) + "px")
+														.style("top",(d3.event.pageY - 28) + "px")
+														.style("position", "absolute")
+						var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+						var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+						maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aCategory);
+						//Remove Symbol is created
+						var removeSymbol = treeLayout.append("g");
+						drawTreeRemoveSymbol(removeSymbol);
+						removeSymbol.on("mousedown", function(d)
+						{
+							treeLayoutdiv.remove();
+						})
+					}
+					//############################################################
+					
+					var inputChildrenitems = [];
+					var outputChildrenitems = [];
+					for (var j=0; j< varCategories.length; j++)
+					{
+						inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+												 varCategory: varCategories[j].name,
+												 description: varCategories[j].description,
+												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,d,"in")},
+												 onMouseOver: function(elm,data,i){}});
+						outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+												 varCategory: varCategories[j].name,
+												 description: varCategories[j].description,
+												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,d,"out")},
+												 onMouseOver: function(elm,data,i){}});
+					}
+					
+					
+					function showToolTable(aTool)
+					{						
+						var toolTableDiv = d3.select(".xdsmDiv").append("div").attr("class","toolTableDiv")
+							.style('left', (d3.event.pageX - 2) + 'px')
+							.style('top', (d3.event.pageY - 2) + 'px')
+							.style("position", "absolute")
+							.on("mouseover", function(){d3.select(this).style("cursor", "grab")})
+						var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+						
+						//Drag Function for variable table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = toolTableDiv.call(d3.drag()
+							.on("start", dragstarted)
+							.on("drag", dragged)
+							.on("end", dragended));
+						function dragstarted() {
+						  d3.select(this).style("cursor", "grabbing")
+						  d3.select(this).raise().classed("active", true);
+						  xOffset_tmp = xPos_init-d3.event.x;
+						  yOffset_tmp = yPos_init-d3.event.y;
+						}
+						function dragged() {
+							 d3.select(this).classed("active", false)
+								.style("left",(d3.event.x+xOffset_tmp) + "px")
+								.style("top",(d3.event.y+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).style("cursor", "grab")
+						  d3.select(this).classed("active", false);
+						  xPos_init = d3.event.x+xOffset_tmp;
+						  yPos_init = d3.event.y+yOffset_tmp;
+						}
+						
+						var aToolNameSplit = aTool.name.split(': ')			
+						var headLine;
+						if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+						else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+						var tabRemoveSVG = toolTableGroup.append("svg")
+							.attr("width",800)
+							.attr("height",26)
+						var tabRemoveRect = tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+							.on("mousedown", function(d)
+							{
+								toolTableDiv.remove();
+							})
+						
+					
+						var data = [];
+						// render the table(s)
+						if (aTool.metadata.length==0)
+						{
+							data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+						}
+						function findSubMetaData(aMetaData)
+						{
+							for(var key in aMetaData)
+							{
+								if (typeof aMetaData[key] === 'object')
+								{
+									data.push({ "name" : key, "value" : ''}) ;
+									findSubMetaData(aMetaData[key]);
+								}
+								else
+								{
+									data.push({ "name" : key, "value" : aMetaData[key] })
+								}
+							}
+						}
+						for (var j=0; j < aTool.metadata.length;j++)
+						{
+							var metaData = aTool.metadata[j];
+							findSubMetaData(metaData);						
+						}
+						var table = toolTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+					}
+					
+					//menu --> functions for right click options
+					var toolMenu = [
+					{
+						title: 'Show competence info',
+						onMouseDown: function(elm, k, i) {
+							showToolTable(k);
+						},
+						onMouseUp: function(elm, k, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Show input variable tree...',
+						onMouseDown: function(elm, k, i) {
+						},
+						onMouseUp: function(elm, k, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: inputChildrenitems
+					},
+					{
+						title: 'Show output variable tree...',
+						onMouseDown: function(elm, k, i) {
+						},
+						onMouseUp: function(elm, k, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: outputChildrenitems
+					}
+					]
+					
+					scenarioKeys.forEach(function(k)
+					{
+						if (k == d.xdsm)
+						{
+							var cx, cy;
+							for (var j=0; j < gNode.childNodes.length; j++)
+							{
+								if(gNode.childNodes[j].nodeName != "text")
+								{
+									cx = gNode.childNodes[j].getAttribute("width")/2-13;
+									cy = -gNode.childNodes[j].getAttribute("height")/2+8;
+								}
+							}
+							//Expand Symbol is created
+							var expandSymbol = d3.select(gNode).append("g").attr("class", "expandSymbol");
+							var circle = expandSymbol.append("circle")
+								.attr("cx", cx)
+								.attr("cy", cy);
+							var line1 = expandSymbol.append("line");
+							var line2 = expandSymbol.append("line");
+							drawExpandSymbol( circle, line1,line2);
+							expandSymbol = expandSymbol
+							.on("mouseover", function(){circle.style("fill-opacity", .8);})
+							.on("mouseout", function(){circle.style("fill-opacity", .6)})
+							
+							//TODO - aigner: on mouseover there should be a text box telling the options
+							d3gNode = d3gNode
+							.on("click", function()
+							{
+								//On mousedown, additional sub-workflows will be visualized
+								var createNew = true;
+								if(xdsms[k]){createNew=false;}                    
+								if (createNew == true)
+								{
+									var graph = new Graph(mdo[k], k);
+									xdsms[k] = new Xdsm(graph, k, tooltip);
+									xdsms[k].draw(currentGraph.name);
+									update_subXdsm(xdsms, k);
+									prepareTreeLayout(xdsms, k);
+									//Remove Symbol is created
+									var removeSymbol = xdsms[k].svg.append("g")
+										.attr("class", "removeSymbol");
+									var circle = removeSymbol.append("circle");
+									var minus = removeSymbol.append("line");
+									drawRemoveSymbol(xdsms[k], circle, minus);
+									//Clicking on remove symbol will remove sub-workflow
+									removeSymbol.append("svg:title").text("Click right to inspect");
+									removeSymbol = removeSymbol
+									.on("mouseover", function(){
+										circle.style("fill", "red").style("fill-opacity", .8);})
+									.on("mouseout", function(){
+										circle.style("fill", "red").style("fill-opacity", .6)})
+									.on("mousedown", function(){circle.style("fill", "darkred").style("fill-opacity",1);})
+									.on("mouseup", function(d)
+									{
+										xdsms[k].svg.remove();
+										d3.select(".treeDiv"+k).remove();
+										delete xdsms[k];
+									})
+									
+									xdsms[k].svg.selectAll(".node")
+										.each(function(d) 
+										{		
+											var gNode = this;
+											d3.select(gNode).on('contextmenu', d3.contextMenu(toolMenu));
+										})
+								}
+							})
+						}
+					})
+					d3gNode.append("svg:title").text("Click right to inspect");
+					d3gNode = d3gNode.on('mouseover', function(){d3.select(this).style("cursor", "pointer")})
+					d3gNode = d3gNode.on('contextmenu', d3.contextMenu(toolMenu))
+				})	
+				
+				
+				function prune_tree(parentXPath, objArray, xPathList) 
+				{ 
+					var firstElement = "/"+xPathList.split("/")[1]+"/";
+					for (var i = 0; i < objArray.length; ++i) 
+					{
+						var obj = objArray[i];
+						var objXPath;
+						
+						//aigner: If object has children append a "/" as xPath separator
+						//else append comma as indicator for last element in the xPath
+						if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+						else{objXPath =  parentXPath+objArray[i].name;}
+						var objXPathFromFirst = objXPath.split(firstElement);
+						
+						// console.log("Current node ->")
+						// console.log(firstElement+objXPathFromFirst[1])
+						// console.log(xPathList)
+												
+						var delete_it = true;
+						if(objXPathFromFirst[1]==undefined)
+						{
+							delete_it = false;
+						}
+						else
+						{
+							if (include(xPathList, firstElement+objXPathFromFirst[1]))
+							{
+								delete_it = false;
+							}
+						}
+						if (delete_it==true)
+						{
+							// console.log("delete ->")
+							// console.log( objXPathFromFirst[1])
+							// console.log(xPathList)
+							
+							objArray.splice(i, 1);
+							i--;
+						}
+						else
+						{
+							// console.log("do not delete ->")
+							// console.log(objXPath);
+							if (obj.children)
+							{
+								if (obj.children.length==0)
+								{
+									objArray.splice(i, 1);
+									i--;
+									prune_tree(parentXPath, objArray, xPathList)
+								}
+								else{prune_tree(objXPath, obj.children, xPathList);}
+								
+							}
+						}
+					}
+				}
+				function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+				{ 
+					var firstElement = "/"+xPathList.split("/")[1]+"/";
+					for (var i = 0; i < objArray.length; ++i) 
+					{
+						var obj = objArray[i];
+						var objXPath;
+						
+						//aigner: If object has children append a "/" as xPath separator
+						//else append comma as indicator for last element in the xPath
+						if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+						else{objXPath =  parentXPath+objArray[i].name;}
+						var objXPathFromFirst = objXPath.split(firstElement);
+						
+						// console.log("Current node ->")
+						// console.log(firstElement+objXPathFromFirst[1])
+						// console.log(xPathList)
+												
+						var delete_it = true;
+						if(objXPathFromFirst[1]==undefined)
+						{
+							delete_it = false;
+						}
+						else
+						{
+							if (include(xPathList, firstElement+objXPathFromFirst[1]))
+							{
+								delete_it = false;
+							}
+						}
+						if (delete_it==true)
+						{
+							// console.log("delete ->")
+							// console.log( objXPathFromFirst[1])
+							// console.log(xPathList)
+							
+							objArray.splice(i, 1);
+							i--;
+						}
+						else
+						{
+							// console.log("do not delete ->")
+							// console.log(objXPath);
+							if (obj.children)
+							{
+								if (obj.children.length==0)
+								{
+									objArray.splice(i, 1);
+									i--;
+									getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+								}
+								else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+							}
+							else 
+							{
+								obj.xPath = objXPath;
+								leafNodes.push(obj);
+							};
+						}
+					}
+				}
+				function clean_tree(objArray)
+				{
+					for (var i = 0; i < objArray.length; ++i) 
+					{
+						var obj = objArray[i];
+						if (obj.children)
+						{
+							if (obj.children.length==0)
+							{
+								objArray.splice(i, 1);
+								i--;
+							}
+							clean_tree(obj.children);
+						}
+					}
+				}
+				function countElements(node, counter) 
+				{
+					counter ++;
+					if (node.children)
+					{
+						if (node.children.length !== 0)
+						{
+							node.children.forEach(function(n)
+							{
+								counter = countElements(n, counter);
+							});
+						}
+					}
+					return counter;
+				}
+				
+				function prepareTreeLayout(xdsms, refName)
+				{			
+					function showEdgeTree(data,aVarCategory,categoryDescr)
+					{
+						//aigner:Split the pipeLineData at the comma separator
+						var array = data.name.split(',')
+						//aigner:Append a comma to all xPath to indicate the end of the xPath
+						for(var i=0;i<array.length;i++){
+							array[i]=array[i]+",";
+						}
+						var treeLayout;
+						var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_"+data.from+"_"+data.to)
+												.style("left",(d3.event.pageX) + "px")
+												.style("top",(d3.event.pageY - 28) + "px")
+												.style("position", "absolute")
+						var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+							
+						treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+						var name = "Tree view: " + data.from + "  →  " + data.to + "; Categorization: " + categoryDescr;
+						//aigner: tree layout is done	
+						maketreeLayout(data.name, treeLayout, treeLayoutSVG, treeLayoutdiv, name, aVarCategory);
+						//Remove Symbol is created
+						var removeSymbol = treeLayout.append("g");
+						drawTreeRemoveSymbol(removeSymbol);
+						removeSymbol.on("mousedown", function(d)
+						{
+							treeLayoutdiv.remove();
+						})		
+						
+					}
+					
+					function showEdgeTable(anEdge)
+					{						
+						var edgeTableDiv = d3.select(".xdsmDiv").append("div").attr("class","edgeTableDiv")
+							.style('left', (d3.event.pageX - 2) + 'px')
+							.style('top', (d3.event.pageY - 2) + 'px')
+							.style("position", "absolute")
+							.on("mouseover", function(){d3.select(this).style("cursor", "grab")})
+						var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+						
+						//Drag Function for edge table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = edgeTableDiv.call(d3.drag()
+							.on("start", dragstarted)
+							.on("drag", dragged)
+							.on("end", dragended));
+						function dragstarted() {
+						  d3.select(this).style("cursor", "grabbing")
+						  d3.select(this).raise().classed("active", true);
+						  xOffset_tmp = xPos_init-d3.event.x;
+						  yOffset_tmp = yPos_init-d3.event.y;
+						}
+						function dragged() {
+							 d3.select(this).classed("active", false)
+								.style("left",(d3.event.x+xOffset_tmp) + "px")
+								.style("top",(d3.event.y+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).style("cursor", "grab")
+						  d3.select(this).classed("active", false);
+						  xPos_init = d3.event.x+xOffset_tmp;
+						  yPos_init = d3.event.y+yOffset_tmp;
+						}
+						
+						var headLine = "Edge Information (" + anEdge.from + " - " + anEdge.to + ")";
+
+						var tabRemoveSVG = edgeTableGroup.append("svg")
+							.attr("width",String(headLine.length*12+"pt"))
+							.attr("height",26)
+						tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+						tabRemoveSymbol.on("mousedown", function(d)
+						{
+							edgeTableDiv.remove();
+						})
+									
+						var anEdgeNameSplit = anEdge.name.split(',')
+						var numberOfconnections = anEdgeNameSplit.length;
+						var theLeafNodes = [];
+						var dimension=0;
+						var nullDim=false;
+						var undefinedLeafs;
+						var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);						
+						var pipeData = anEdge.name;
+						getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+						var undefLeafsNumber=0;
+						var defLeafsNumber=0;
+						for (var k=0;k<theLeafNodes.length;k++)
+						{
+							if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+							else{nullDim=true}
+							if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+							{
+								if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+								else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+								undefLeafsNumber ++;
+							}
+							else
+							{
+								defLeafsNumber++;
+							}
+						}
+						
+						//Render data for table
+						var data = [];
+						data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+						data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+						data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+						if (undefinedLeafs)
+						{
+							data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+						}
+						var table = edgeTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+						if (undefinedLeafs)
+						{
+							var undefLeafTreeSVG = edgeTableGroup.append("svg")
+								.attr("transform", "translate(0,20)")
+								.attr("width",String(headLine.length*9.5+"pt"))
+								.attr("height",50)
+							undefLeafTreeSVG.append("rect")
+								.attr("width", "100%")
+								.attr("height", "100%")
+								.attr("fill", "white");
+							var expandSymbol = undefLeafTreeSVG.append("g")
+								.attr("class", "newExpandSymbol")
+								.attr("transform", "translate(38,12)");
+							var expandRect = expandSymbol.append("rect")
+								.attr("x",-28)
+								.attr("height", 50)
+								.attr("fill", "#555555")
+								.attr("stroke", "none")
+								.attr("stroke-width", 2)
+								.attr("fill-opacity", 1)
+							var expCircle = expandSymbol.append("circle")
+								.attr("cx", -26)
+								.attr("cy", 0);
+							var expLine1 = expandSymbol.append("line");
+							var expLine2 = expandSymbol.append("line");
+							drawExpandSymbol(expCircle,expLine1,expLine2);
+								expCircle = expCircle.attr("fill", "white");
+							expandSymbol
+								.on("mouseover", function(){
+									d3.select(this).style("cursor", "pointer")			
+									expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
+								})
+								.on("mouseout", function(){
+									expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
+								})
+							undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+								.attr("transform", "translate(26,20)")
+								.attr("fill", "black")
+								.style("font-family", "Arial")
+								.style("font-size", "16pt")
+								.style("font-weight", "bold")
+								.text("Show unreferenced connections as tree");
+							expandSymbol.on("mousedown", function(){
+								var treeLayoutdiv = d3.select(".xdsmDiv").append("div").attr("class","treeDiv_"+anEdge.from+"_"+anEdge.to)
+											.style("left",(d3.event.pageX) + "px")
+											.style("top",(d3.event.pageY + 50) + "px")
+											.style("position", "absolute")
+								var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+
+								var pipeData = anEdge.name;
+								var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+								var name = "Unref. connections tree view: " + anEdge.from + "  to  " + anEdge.to + "; Categorization: " + varCategories[0].name;
+								//aigner: tree layout is done	
+								maketreeLayout(undefinedLeafs, treeLayout, treeLayoutSVG, treeLayoutdiv, name, varCategories[0].name);
+								//Remove Symbol is created
+								var removeSymbol = treeLayout.append("g");
+								drawTreeRemoveSymbol(removeSymbol);
+								removeSymbol.on("mousedown", function(d)
+								{
+									treeLayoutdiv.remove();
+								})
+							})
+						}
+						
+					}
+					
+					xdsms[refName].svg.selectAll(".edge")
+					.each(function(d) 
+					{
+						//edgeMenu --> functions for right click options
+						var edgeChildrenItems = [];
+						for (var j=0; j< varCategories.length; j++)
+						{
+							edgeChildrenItems.push({title: 'according to ' + varCategories[j].description,
+													varCategory: varCategories[j].name,
+													description: varCategories[j].description,
+													onMouseClick: function(elm, data, i) {showEdgeTree(d,data.varCategory,data.description)},
+													onMouseOver: function(elm,data,i){}});
+						}
+						var theEdge = this;
+						var edgeMenu = [
+						{
+							title: 'Show edge info',
+							onMouseDown: function(elm, k, i) {
+								showEdgeTable(d)
+							},
+							onMouseUp: function(elm, k, i) {
+							},
+							onMouseOver: function(elm, d, i) {
+							},
+							childrenItems: []
+						},
+						{
+							title: 'Show variable tree...',
+							onMouseDown: function(elm, k, i) {
+							},
+							onMouseUp: function(elm, k, i) {
+							},
+							onMouseOver: function(elm, d, i) {
+							},
+							childrenItems: edgeChildrenItems
+						}
+						]
+						
+						var thisEdge = d3.select(this);
+						thisEdge.append("svg:title").text("Click right to inspect");
+						thisEdge.on('contextmenu', d3.contextMenu(edgeMenu))
+					})
+				}
+				
+				function maketreeLayout(pipeData, layout, svg, div, aName, aVarCategory)
+				{			
+					//aigner: here the tree layout begins
+					//Drag Function for treeLayout
+					var xPos_init = d3.event.pageX - 2;
+					var yPos_init = d3.event.pageY - 2;
+					var xOffset_tmp;
+					var yOffset_tmp;
+					var drag = div.call(d3.drag()
+						.on("start", dragstarted)
+						.on("drag", dragged)
+						.on("end", dragended));
+					function dragstarted() {
+					  d3.select(this).style("cursor", "grabbing")
+					  d3.select(this).raise().classed("active", true);
+					  xOffset_tmp = xPos_init-d3.event.x;
+					  yOffset_tmp = yPos_init-d3.event.y;
+					}
+					function dragged() {
+						 d3.select(this).classed("active", false)
+							.style("left",(d3.event.x+xOffset_tmp) + "px")
+							.style("top",(d3.event.y+yOffset_tmp) + "px")
+					}
+					function dragended() {
+					  d3.select(this).style("cursor", "grab")
+					  d3.select(this).classed("active", false);
+					  xPos_init = d3.event.x+xOffset_tmp;
+					  yPos_init = d3.event.y+yOffset_tmp;
+					}
+					createTree()
+					
+					function createTree()
+					{
+						var schema = currentGraph.variableSchemes[aVarCategory];
+						var treeData = (JSON.parse(JSON.stringify(schema)));				
+						//aigner: Here, the minimalized tree is created!
+						//Transferred variables: 
+						//1) parentXPath --> xPath until current nodes
+						//2) objArray --> Array of current nodes
+						//3) xPathList --> Array of actually used pipeLine data
+						
+						if (pipeData)
+						{
+							prune_tree("/"+treeData.name+"/", treeData.children, pipeData);
+							//aigner: count all descendants of a node
+							var firstEl = pipeData.split("/")[1];
+							if(firstEl != treeData.name)
+							{
+								var cleanOperations = countElements(treeData,0)
+								for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+							}
+						}
+						
+						// Set the dimensions and margins of the diagram
+						var margin = {top: 20, right: 90, bottom: 20, left: 90},
+							width = 960 - margin.left - margin.right,
+							height = 500 - margin.top - margin.bottom;
+
+						// append the svg object to the body of the page
+						// appends a 'group' element to 'svg'
+						// moves the 'group' element to the top left margin
+						var offset_tmp = 60;
+						svg = svg.attr("width", width + margin.right + margin.left+offset_tmp)
+								 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+						div = div.attr("width", width + margin.right + margin.left+offset_tmp)
+								 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+						layout = layout
+							.attr("width", width + margin.right + margin.left)
+							.attr("height", height + margin.top + margin.bottom);
+						var name;
+						var rect = layout.append("rect")
+								.attr("class","treeFrame")
+								.attr("width", 0)
+								.attr("height", 70)
+								.attr("transform", "translate("
+								  + String(10) + "," + String(10) + ")")
+								.attr("fill", "white")
+								.attr("stroke", "darkgrey")
+								.attr("stroke-width", 0)
+								.attr("fill-opacity", 0.8)
+						//aigner: Put remove button on top of the rect
+						d3.selectAll(".treeRemoveSymbol").moveToFront();
+						
+						//aigner: Exit, if no tree data is available!
+						if (!treeData.children || treeData.children.length==0)
+						{
+							var newText = layout.append('text')
+							.attr("dx", 40)
+							.attr("dy", 55)
+							.style("font-family", "Arial")
+							.style("font-size", "32pt")
+							.style("font-weight", "bold")
+							.html(function (d) {
+								return 'No tree view available! &#8594; Please check data for consistency!';
+							});
+							
+							var newWidth;
+							rect.attr("width",  function(d) {
+								newWidth = this.parentNode.getBBox().width+20;
+								return newWidth;}) 
+							div = div.attr("width", newWidth+30)
+							svg = svg.attr("width", newWidth+30)
+							return;
+						}
+						
+						var newText = layout.append('text')
+							.attr("dx", 40)
+							.attr("dy", 30)
+							.style("font-family", "Arial")
+							.style("font-size", "12pt")
+							.style("font-weight", "bold")
+							.text(aName);
+						
+						// Calculate total nodes, max label length
+						var totalNodes = 0;
+						var maxLabelLength = 0;
+						
+						var i = 0,
+							duration = 500,
+							root;
+
+						// declares a tree layout and assigns the size
+						var treemap = d3.tree().size([height, width]);
+
+						// Assigns parent, children, height, depth
+						root = d3.hierarchy(treeData, function(d) { return d.children; });
+						root.x0 = height / 2;
+						root.y0 = 0;
+						
+						// Append a group which holds all nodes and which the zoom Listener can act upon.
+						var svgGroup_xOff = root.data.name.length*10
+						var svgGroup = layout.append("g")
+							.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+						
+							
+						// Collapse root initially
+						collapse(root);
+						update(root);
+
+						// Collapse the node and all it's children
+						function collapse(d) {
+						  if(d.children) {
+							d._children = d.children
+							d._children.forEach(collapse)
+							d.children = null
+						  }
+						}
+						// Collapse the node and all it's children
+						function expand(d) {
+						  if(d._children) {
+							d.children = d._children
+							d.children.forEach(expand)
+							d._children = null
+						  }
+						}
+						// Toggle children on click.
+						function click(d) 
+						{
+							if (d.children) {
+								d._children = d.children;
+								d.children = null;
+							} else 
+							{
+								d.children = d._children;
+								d._children = null;
+							}
+							update(d);
+						}
+						// Collapse/expand entire tree on double-click
+						function dblclick(d) 
+						{
+							if(d.children) 
+							{
+								collapse(d);
+							}
+							else if(d._children)
+							{
+								expand(d);
+							}
+							update(d);
+						}	
+						
+						function update(source) 
+						{
+							var levelWidth = [1];
+							var getLevelWidth = function(level, n) 
+							{
+								if (n.children && n.children.length > 0) {
+									if (levelWidth.length <= level + 1) levelWidth.push(0);
+									
+									//establish maxLabelLength
+									maxLabelLength = Math.max(n.data.name.length, maxLabelLength);
+									
+									levelWidth[level + 1] += n.children.length;
+									n.children.forEach(function(d) {
+										getLevelWidth(level + 1, d);
+									});
+								}
+							};
+							getLevelWidth(0, root);
+							var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+							//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour 
+							
+							layout = layout.attr("height", newHeight + margin.top + margin.bottom)
+							svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom)
+							treemap = treemap.size([newHeight, width]);
+							
+							
+							// Assigns the x and y position for the nodes
+							var treeData = treemap(root);
+
+							// Compute the new tree layout.
+							var nodes = treeData.descendants(),
+								links = treeData.descendants().slice(1);
+							
+							//aigner: count all descendants of a node
+							function countDescendants(node, counter) 
+							{
+								if (node._children)
+								{
+									node._children.forEach(function(n)
+									{
+										counter = countDescendants(n, counter);
+									});
+								}
+								else if (node.children)
+								{
+									node.children.forEach(function(n)
+									{
+										counter = countDescendants(n, counter);
+									});
+								}
+								else
+								{
+									counter ++;
+								}
+								return counter;
+							}
+							
+							
+							var depth_tmp = 0;
+							var labelLength = [];
+							labelLength.push(0);
+							nodes.forEach(function(d) 
+							{				
+								//aigner: If node is collapsed show number of ancestors
+								if (d._children)
+								{
+									d._childrenNum = countDescendants(d, 0);
+									d.data.text = d.data.name + " (" + d._childrenNum + ")";
+								}
+								else 
+								{
+									d.data.text = d.data.name
+								}
+								
+								//aigner: Find maximum labelLength for each level
+								if (d.depth>depth_tmp)
+								{
+									depth_tmp = d.depth;
+									labelLength.push(d.data.text.length);
+								}
+								else
+								{
+									if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);}
+								}
+							});
+							// Set widths between levels based on labelLength of each level.
+							var y_tmp = 100;		
+							var depth_tmp = 0;							
+							nodes.forEach(function(d) 
+							{
+								if (d.depth>depth_tmp)
+								{
+									depth_tmp = d.depth;
+									d.y = y_tmp+(labelLength[depth_tmp])*12+50;
+								}
+								else
+								{
+									d.y = y_tmp;
+								}
+								newWidth=d.y;
+								y_tmp = d.y;
+							});
+							
+							
+							function getTextWidth(text, font) 
+							{
+								// re-use canvas object for better performance
+								var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
+								var context = canvas.getContext("2d");
+								context.font = font;
+								var metrics = context.measureText(text);
+								return metrics.width;
+							}					
+							newWidth=Math.max(newWidth,getTextWidth(aName,"Arial 12pt"));
+							
+							//aigner: Adjust height and width of the frame
+							div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+							div = div.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
+								.on("mousedown", function(d) {
+									//d3.select(this).moveToFront();
+								})
+							svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+							svg = svg.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
+							rect = rect.attr("height", newHeight + margin.top + margin.bottom)
+							rect = rect.attr("width", newWidth + margin.top + margin.bottom+400+maxLabelLength*15)
+							
+							
+							// ****************** Nodes section ***************************
+							// Update the nodes...
+							var node = svgGroup.selectAll('g.treeNode')
+							  .data(nodes, function(d) {return d.id || (d.id = ++i); });
+							
+							var dblclick_timer = false;
+							// Enter any new modes at the parent's previous position.
+							var nodeEnter = node.enter().append('g')
+							  .attr('class', 'treeNode')
+							  .attr("transform", function(d) {
+								return "translate(" + source.y0 + "," + source.x0 + ")";
+							})
+							.on("mousedown", function(d) {
+								//prevent tree from expanding on right click!
+								if (d3.event.which != 3)
+								{
+									// if double click timer is active, this click is the double click
+									if ( dblclick_timer )
+									{
+										clearTimeout(dblclick_timer)
+										dblclick_timer = false
+										// double click code code comes here
+										//console.log("DOUBLE CLICK")
+										dblclick(d);
+									}
+									// otherwise, what to do after single click (double click has timed out)
+									else dblclick_timer = setTimeout( function(){
+										dblclick_timer = false
+										// single click code code comes here
+										//console.log("SINGLE CLICK")
+										click(d);
+									}, 250)
+								}
+								
+							})
+							
+							// Add Circle for the nodes
+							nodeEnter.append('circle')
+							  .attr('class', 'treeNode')
+							  .attr('r', 4.5)
+							  .style("fill", function(d) {
+									if (d._children)
+									{
+										if(aName.includes("Input")){return '#ea9999'}
+										else if(aName.includes("Output")){return '#d6ea99'}
+										else {return "lightsteelblue"}
+									}
+									else {return "#fff"}
+							  })
+							  .style("stroke", function(d) {
+									if(aName.includes("Input")){
+										//console.log(d);
+										return '#CC0000'}
+									else if(aName.includes("Output")){
+										//console.log(d);
+										return '#99CC00'}
+							  });
+
+							// Add labels for the nodes
+							nodeEnter.append('text')
+							  .attr('class', 'nodeText')
+							  .attr("dy", ".35em")
+							  .attr("x", function(d) {
+								  return d.children || d._children ? -13 : 13;
+							  })
+							  .attr("text-anchor", function(d) {
+								  return d.children || d._children ? "end" : "start";
+							  })
+							  //.text(function(d) { return d.data.text; });
+							  
+							  
+							// Function to download data to a file
+							function download(filename, text) {
+								var element = document.createElement('a');
+								element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+								element.setAttribute('download', filename);
+
+								element.style.display = 'none';
+								document.body.appendChild(element);
+
+								element.click();
+
+								document.body.removeChild(element);
+							}
+							
+							//Highlight function, that shows usage of a node in the XDSM
+							function highlight(data,aText)
+							{
+								aText = "/"+data.data.name+aText;
+								if (data.parent){highlight(data.parent,aText)}
+								else
+								{
+									scenarioKeys.forEach(function(k)
+									{
+										var xdsm_tmp;
+										xdsm_tmp = xdsms[k];
+										if (xdsm_tmp)
+										{
+											xdsm_tmp.svg.selectAll(".edge").each(function(p) 
+											{
+												var firstElement_tmp = p.name.split("/")[1]
+												var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+												if (include(p.name,text_fromFirst))
+												{
+													var highlightEdge = d3.select(this).select("polygon");
+													highlightEdge
+														.style("stroke-width",5.)
+														.style("stroke","#CC0000")
+													d3.selectAll(".treeFrame")
+														.attr("fill-opacity", 0.5)
+														.attr("stroke-opacity", 0.5);
+													d3.selectAll(".nodeText").style("fill-opacity",0.5);
+												}
+											})
+										}
+									})
+								}
+							}
+							
+							//Unhighlight function again
+							function unhighlight(data,aText)
+							{
+								aText = "/"+data.data.name+aText;
+								if (data.parent){unhighlight(data.parent,aText)}
+								else
+								{
+									scenarioKeys.forEach(function(k)
+									{
+										var xdsm_tmp;
+										xdsm_tmp = xdsms[k];
+										if (xdsm_tmp)
+										{
+											xdsm_tmp.svg.selectAll(".edge").each(function(p) 
+											{
+												var firstElement_tmp = p.name.split("/")[1]
+												var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+												if (include(p.name,text_fromFirst))
+												{
+													var highlightEdge = d3.select(this).select("polygon");
+													highlightEdge
+														.style("stroke-width",1.)
+														.style("stroke","black");
+													d3.selectAll(".treeFrame")
+														.attr("fill-opacity", 0.8)
+														.attr("stroke-opacity", 0.8);
+													d3.selectAll(".nodeText").style("fill-opacity",1);
+												}
+											})
+										}
+									})
+								}
+							}							
+							  
+							
+							function showVariableTable(aVariable)
+							{						
+								var varTableDiv = d3.select(".xdsmDiv").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name)
+									.style('left', (d3.event.pageX - 2) + 'px')
+									.style('top', (d3.event.pageY - 2) + 'px')
+									.style("position", "absolute")
+									.on("mousedown", function(d) {
+										d3.select(this).moveToFront();
+									})
+								var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+								
+								//Drag Function for variable table
+								var xPos_init = d3.event.pageX - 2;
+								var yPos_init = d3.event.pageY - 2;
+								var xOffset_tmp;
+								var yOffset_tmp;
+								var drag = varTableDiv.call(d3.drag()
+									.on("start", dragstarted)
+									.on("drag", dragged)
+									.on("end", dragended));
+								function dragstarted() {
+								  d3.select(this).raise().classed("active", true);
+								  xOffset_tmp = xPos_init-d3.event.x;
+								  yOffset_tmp = yPos_init-d3.event.y;
+								}
+								function dragged() {
+									 d3.select(this).classed("active", false)
+										.style("left",(d3.event.x+xOffset_tmp) + "px")
+										.style("top",(d3.event.y+yOffset_tmp) + "px")
+								}
+								function dragended() {
+								  d3.select(this).classed("active", false);
+								  xPos_init = d3.event.x+xOffset_tmp;
+								  yPos_init = d3.event.y+yOffset_tmp;
+								}
+								
+								var headLine = "Node Information (" + aName + ")";
+								var tabRemoveSVG = varTableGroup.append("svg")
+									.attr("width",String(headLine.length*9.5+"pt"))
+									.attr("height",26)
+								tabRemoveSVG.append("rect")
+									.attr("width", "100%")
+									.attr("height", "100%")
+									.attr("fill", "white");
+								var tabRemoveSymbol = tabRemoveSVG.append("g");
+								tabRemoveSymbol = tabRemoveSymbol
+									.attr("class", "tabRemoveSymbol")
+									.attr("transform", "translate(26,0)")
+								var circle = tabRemoveSymbol.append("circle")
+									.classed("remCircle",true)
+								var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+								var cx = -20;
+								var cy = 12;
+								circle = circle
+									.attr("cx", cx+5)
+									.attr("cy", cy)
+									.attr("r", 10)
+								minus = minus
+									.attr("x1", cx)
+									.attr("y1", cy)
+									.attr("x2", cx+10)
+									.attr("y2", cy)
+									
+								
+								tabRemoveSVG.append("text").attr("class","tabRemoveText")
+									.attr("transform", "translate(26,20)")
+									.attr("fill", "black")
+									.style("font-family", "Arial")
+									.style("font-size", "16pt")
+									.style("font-weight", "bold")
+									.text(headLine);
+								
+								
+								tabRemoveSymbol
+									.on("mouseover", function(){
+										d3.select(this).style("cursor", "pointer")
+										circle.style("fill", "red").style("fill-opacity", .8);
+										})
+									.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+								tabRemoveSymbol.on("mousedown", function(d)
+								{
+									varTableDiv.remove();
+								})
+								
+								
+								
+								var data = [];
+								// render the table(s)
+								data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" })
+								
+								function getNodeXPath(strWrapper,aNode) 
+								{
+								  strWrapper.val = "/"+aNode.data.name+strWrapper.val;
+								  if (!aNode.parent) 
+								  {
+									return strWrapper;
+								  }
+								  else 
+								  {
+									
+									return getNodeXPath(strWrapper, aNode.parent);
+								  }
+								}
+								var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+								data.push({ "name" : "xPath", "value" : xPath_tmp })
+								if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })}
+								if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })}
+								if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })}
+								if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })}
+								else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+								if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })}
+								var table = varTableGroup.append('table');
+								tabulate(table,data,['name', 'value']); // 2 column table
+							}
+							
+						   
+							//menu --> functions for right click options
+							var nodeMenu = [
+							{
+								title: 'Show node information',
+								onMouseDown: function(elm, d, i) {
+									showVariableTable(d);
+								},
+								onMouseUp: function(elm, d, i) {},
+								onMouseOver: function(elm, d, i) {},
+								childrenItems: []
+							},
+							{
+								title: 'Show usage of node in XDSM',
+								onMouseDown: function(elm, d, i) {
+									var theText="";
+									highlight(d,theText);
+								},
+								onMouseUp: function(elm, d, i) {
+									var theText="";
+									unhighlight(d,theText);
+								},
+								onMouseOver: function(elm, d, i) {
+								},
+								childrenItems: []
+							},
+							{
+								title: 'Copy x-path to clipboard',
+								onMouseDown: function(elm, d, i) {
+									function copyToClipboard(text) 
+									{
+										window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+									}
+									function copyXPathToClipboard(data,aText)
+									{
+										aText = "/"+data.data.name+aText;
+										if (data.parent){copyXPathToClipboard(data.parent,aText)}
+										else{copyToClipboard(aText);}
+									}
+									var copyText="";
+									copyXPathToClipboard(d,copyText);
+									d3.select('.d3-context-menu').style('display', 'none');
+								},
+								onMouseUp: function(elm, d, i) {
+								},
+								onMouseOver: function(elm, d, i) {
+								},
+								childrenItems: []
+							},
+							{
+								title: 'Download full tree as XML-file',
+								onMouseDown: function(elm, d, i) {
+									//Begin xml structure with the first element
+									var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">";
+									//Create a new xml document
+									var parser = new DOMParser();
+									var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+									//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+									var initialXPath = "/"+nodes[0].data.name;								
+									writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+									//remove all attributes dummyID
+									removeAttributeInAllElements(xmlDocument,'dummyID');
+									//Make the xml document a string
+									var serializer = new XMLSerializer();
+									var xmlString = serializer.serializeToString(xmlDocument);
+									xmlString = vkbeautify.xml(xmlString);														
+									//Download a document with the xml-schema
+									download(aName+'_full.xml',xmlString);						
+								},
+								onMouseUp: function(elm, d, i) {
+								},
+								onMouseOver: function(elm, d, i) {
+								},
+								childrenItems: []
+							},
+							{
+								title: 'Download tree as XML-file from current node',
+								onMouseDown: function(elm, d, i) {
+									var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+									var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+									//Create a new xml document
+									var parser = new DOMParser();
+									var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+									//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+									writeTreeToXML(d,xmlDocument,initialXPath);
+									//remove all attributes dummyID
+									removeAttributeInAllElements(xmlDocument,'dummyID');
+									//Make the xml document a string
+									var serializer = new XMLSerializer();
+									xmlString = serializer.serializeToString(xmlDocument);
+									xmlString = vkbeautify.xml(xmlString);														
+									//Download a document with the xml-schema
+									download(aName+"_"+d.data.name+'.xml',xmlString);						
+								},
+								onMouseUp: function(elm, d, i) {
+								},
+								onMouseOver: function(elm, d, i) {
+								},
+								childrenItems: []
+							}
+							]
+							
+							//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+							function writeTreeToXML(aNode,anXMLDoc,anXPath)
+							{
+								//Variable "children" 
+								//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+								var children;
+								if (aNode._children){children = aNode._children;}
+								else if (aNode.children){children = aNode.children;}
+								
+								//Get current xml element with its xPath
+								var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+								if (element != null) {element.value = '...';}
+								
+								//If a node has children (collapsed or expanded), loop through them
+								if (children)
+								{
+									for (var i=0; i < children.length;i++)
+									{
+										//Name of the new XML element --> childName
+										var child = children[i];
+										var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+										var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+										var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+										
+										//The children are appended to the xPath --> newXPath
+										var newXPath = anXPath+"/"+cleanChildName[0];
+										
+										//If childName contains a uID, make the uID an attribute
+										if (childName[1])
+										{
+											if (parseInt(childName[1]))
+											{
+												var dummyID = childName[1];
+												newNode.setAttribute("dummyID", dummyID)
+												newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+											}
+											else
+											{
+												var uID = childName[1];
+												newNode.setAttribute("uID", uID)
+												newXPath = newXPath+"[@uID='"+uID+"']";
+											}
+										}
+										if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+										
+										//Append the newNode to the xml structure
+										element.appendChild(newNode);
+										
+										
+										
+										////aigner: Sorting of XML elements according to "uID"
+										// var items = element.children;
+										// var itemsArr = [];
+										// for (var j in items) {
+											// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+												// itemsArr.push(items[j]);
+											// }
+										// }
+										// itemsArr.sort(function(a,b){
+											// if (a.getAttribute("uID") < b.getAttribute("uID"))
+												// return -1;
+											// if (a.getAttribute("uID") > b.getAttribute("uID"))
+												// return 1;
+											// return 0;
+											// });
+
+										// for (j = 0; j < itemsArr.length; ++j) {
+										  // element.appendChild(itemsArr[j]);
+										// }
+										
+										//call function writeTreeToXML recursively for all children
+										writeTreeToXML(child,anXMLDoc,newXPath)
+									}
+								}
+								else
+								{
+									if (aNode.data.value){element.innerHTML = String(aNode.data.value);}
+									else{element.innerHTML = " ";}
+								}
+								//return the xml document
+								return anXMLDoc;
+							}
+							
+							function removeAttributeInAllElements(aDocument,attribute)
+							{
+							  var matchingElements = [];
+							  var allElements = aDocument.getElementsByTagName('*');
+							  for (var i = 0, n = allElements.length; i < n; i++)
+							  {
+								if (allElements[i].getAttribute(attribute) !== null)
+								{
+									allElements[i].removeAttribute(attribute);
+								}
+							  }
+							  return matchingElements;
+							}
+							
+							function putAncestorsInXMLString(strWrapper, aNode)
+							{
+								//Name of the new XML element
+								var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+								var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+								//If nodeName contains a uID, make the uID an attribute
+								if (nodeName[1])
+								{
+									var uID = nodeName[1];
+									strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+								}
+								else
+								{
+									strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+								}
+								var aParent = aNode.parent;
+								if (aParent)
+								{
+									return putAncestorsInXMLString(strWrapper, aParent);
+								}
+								else 
+								{
+									return strWrapper;
+								}
+							}
+							
+							function putAncestorsInXPath(strWrapper, aNode)
+							{
+								//Name of the new XML element
+								var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+								var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+								//If nodeName contains a uID, make the uID an attribute
+								if (nodeName[1])
+								{
+									var uID = nodeName[1];
+									strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+								}
+								else
+								{
+									strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+								}
+								var aParent = aNode.parent;
+								if (aParent)
+								{
+									return putAncestorsInXPath(strWrapper, aParent);
+								}
+								else 
+								{
+									return strWrapper;
+								}
+							}
+							  
+							nodeEnter = nodeEnter
+							.on('contextmenu', d3.contextMenu(nodeMenu));
+							
+							nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
+							
+							
+
+							// UPDATE
+							var nodeUpdate = nodeEnter.merge(node);
+
+							// Transition to the proper position for the node
+							nodeUpdate.transition()
+							.duration(duration)
+							.attr("transform", function(d) { 
+								return "translate(" + d.y + "," + d.x + ")";
+							 });
+
+							// Update the node attributes and style
+							nodeUpdate.select('circle.treeNode')
+							.attr('r', 4.5)
+							.style("fill", function(d) {
+									if (d._children)
+									{
+										if(aName.includes("Input")){return '#ea9999'}
+										else if(aName.includes("Output")){return '#d6ea99'}
+										else {return "lightsteelblue"}
+									}
+									else {return "#fff"}
+							  })
+							.attr('cursor', 'pointer');
+							
+							nodeUpdate.select('text')
+							.text(function(d) { return d.data.text; });
+
+
+							// Remove any exiting nodes
+							var nodeExit = node.exit().transition()
+							  .duration(duration)
+							  .attr("transform", function(d) {
+								  return "translate(" + source.y + "," + source.x + ")";
+							  })
+							  .remove();
+
+							// ****************** links section ***************************
+
+							// Update the links...
+							var link = svgGroup.selectAll('path.treeLink')
+							  .data(links, function(d) { return d.id; });
+
+							// Enter any new links at the parent's previous position.
+							var linkEnter = link.enter().insert('path', "g")
+							  .attr("class", "treeLink")
+							  .attr('d', function(d){
+								var o = {x: source.x0, y: source.y0}
+								return diagonal(o, o)
+							  });
+
+							// UPDATE
+							var linkUpdate = linkEnter.merge(link);
+
+							// Transition back to the parent element position
+							linkUpdate.transition()
+							  .duration(duration)
+							  .attr('d', function(d){ return diagonal(d, d.parent) });
+
+							// Remove any exiting links
+							var linkExit = link.exit().transition()
+							  .duration(duration)
+							  .attr('d', function(d) {
+								var o = {x: source.x, y: source.y}
+								return diagonal(o, o)
+							  })
+							  .remove();
+
+							// Store the old positions for transition.
+							nodes.forEach(function(d){
+							d.x0 = d.x;
+							d.y0 = d.y;
+							});
+
+							// Creates a curved (diagonal) path from parent to the child nodes
+							function diagonal(s, d) {
+							return "M" + s.y + "," + s.x
+								  + "C" + (s.y + d.y) / 2 + "," + s.x
+								  + " " + (s.y + d.y) / 2 + "," + d.x
+								  + " " + d.y + "," + d.x;
+							}
+						}
+					}
+				}
+			}
+			startXDSM(data,graphID);
+
+			////aigner: Unused funcktions --> Could be helpful at some point
+			////aigner: clone function, so that original object is not overwritten but deep copied
+			// function clone(obj) {
+				// if (null == obj || "object" != typeof obj) return obj;
+				// var copy = obj.constructor();
+				// for (var attr in obj) {
+					// if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
+				// }
+				// return copy;
+			// }
+			////aigner: cleanArray Function
+			// function cleanArray(actual) 
+			// {
+				// var newArray = new Array();
+				// for (var i = 0; i < actual.length; i++) 
+				// {
+					// if (actual[i]) 
+					// {
+						// newArray.push(actual[i]);
+					// }
+				// }
+				// return newArray;
+			// }
+			//#####################################################################//
+
+
+			},{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
+		}
+		
+		function edgeBundles_script(data,graphID)
+		{
+			
+			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
+			2:[function(require,module,exports){
+			"use strict";
+
+			var d3 = require('d3');
+
+			//aigner: functions for drawing expand- and collapse-symbols
+			function drawExpandSymbol(aCircle, line1, line2)
+			{        
+				 aCircle = aCircle
+					.attr("r", 10)
+					.style("stroke", "black")
+					.style("stroke-width", 2)
+					.style("fill", "#99CC00")
+					.style("fill-opacity", .6)
+				line1 = line1
+					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
+					.attr("y1", parseFloat(aCircle.attr("cy")))
+					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
+					.attr("y2", parseFloat(aCircle.attr("cy")))
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+				line2 = line2
+					.attr("x1", parseFloat(aCircle.attr("cx")))
+					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
+					.attr("x2", parseFloat(aCircle.attr("cx")))
+					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+			}
+			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+			{        
+				 var xOffset=150;
+				 var yOffset=12;
+				 aCircle = aCircle
+					.attr("cx", anXdsm.svg.attr("width")-xOffset)
+					.attr("cy", yOffset)
+					.attr("r", 10)
+					.classed("remCircle",true)
+				aMinus = aMinus
+					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+					.attr("y1", yOffset)
+					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+					.attr("y2", yOffset)
+					.classed("remMinus",true)
+			}
+			//d3-context-menu for right-click-option
+			d3.contextMenu = function (menu, openCallback) {
+
+				// create the div element that will hold the context menu
+				d3.selectAll('.d3-context-menu').data([1])
+					.enter()
+					.append('div')
+					.attr('class', 'd3-context-menu');
+
+				// close menu
+				d3.select('body').on('click.d3-context-menu', function() {
+					d3.select('.d3-context-menu').style('display', 'none');
+				});
+
+				// this gets executed when a contextmenu event occurs
+				return function(data, index) {	
+					var elm = this;
+
+					d3.selectAll('.d3-context-menu').html('');
+					var list = d3.selectAll('.d3-context-menu').append('ul');
+						list.selectAll('li').data(menu).enter()
+						.append('li')
+						.html(function(d) {
+							return d.title;
+						})
+						.on('mousedown', function(d, i) {
+							d.onMouseDown(elm, data, index);
+						})
+						.on('mouseup', function(d, i) {
+							d.onMouseUp(elm, data, index);
+							d3.select('.d3-context-menu').style('display', 'none');
+						})
+						.on('mouseenter',function(d,i){
+							d.onMouseOver(elm,data,index);
+							if(d.childrenItems.length>0 )
+								 {
+								  d3.select(this).selectAll("ul").remove(); 
+								  d3.select(this)
+									.append("ul")
+									.selectAll("li")
+									   .data(d.childrenItems)
+										.enter().append("li")
+										  .text(function(d) { return d.title; })
+									 .on("mouseenter", function(d,i){
+											d.onMouseOver(elm,data,index);
+										})
+									 .on('click',  function(d, i) {
+											d.onMouseClick(elm, d, index);
+										})
+									 .on('mouseleave',function(d,i){
+										
+										});
+								 }
+							 else
+								 return false;
+						})
+						.on('mouseleave',function(d,i){
+							d3.select(this).selectAll("ul").style('display', 'none')                  
+						});
+					
+					  
+
+					// the openCallback allows an action to fire before the menu is displayed
+					// an example usage would be closing a tooltip
+					if (openCallback) openCallback(data, index);
+
+					// display context menu
+					d3.select('.d3-context-menu')
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style('display', 'block');
+
+					d3.event.preventDefault();
+				};
+			};
+				
+			function tabulate(aTable,data,columns) {
+				var thead = aTable.append('thead');
+				var	tbody = aTable.append('tbody');  
+
+				// create a row for each object in the data
+				var rows = tbody.selectAll('tr')
+				  .data(data)
+				  .enter()
+				  .append('tr');
+
+				// create a cell in each row for each column
+				var cells = rows.selectAll('td')
+				  .data(function (row) {
+					return columns.map(function (column) {
+					  return {column: column, value: row[column]};
+					});
+				  })
+				  .enter()
+				  .append('td')
+					.html(function (d) { return d.value; });
+
+				return aTable;
+			}
+
+			//aigner: Move to front function
+			d3.selection.prototype.moveToFront = function() {  
+			  return this.each(function(){
+				this.parentNode.appendChild(this);
+			  });
+			};
+			//aigner: Move to back function
+			d3.selection.prototype.moveToBack = function() {  
+				return this.each(function() { 
+					var firstChild = this.parentNode.firstChild; 
+					if (firstChild) { 
+						this.parentNode.insertBefore(this, firstChild); 
+					} 
+				});
+			};
+
+
+			var diameter = 1500,
+				radius = diameter / 2,
+				innerRadius = radius - 250;
+
+			var cluster = d3.layout.cluster()
+				.size([360, innerRadius])
+				.sort(null)
+				.value(function(d) { return d.size; });
+
+			var bundle = d3.layout.bundle();
+
+			var line = d3.svg.line.radial()
+				.interpolate("bundle")
+				.tension(0.5)
+				.radius(function(d) { return d.y; })
+				.angle(function(d) { return d.x / 180 * Math.PI; });
+
+			var svg = d3.select("body").append("div").attr("class","edgeBundlesDiv")
+				svg = svg.append("svg")
+					.attr("class","circleSvg")
+					.attr("width", 10000)
+					.attr("height", 10000)
+					.append("g")
+					.attr("transform", "translate(" + radius*1.2 + "," + radius*1.2+ ")");
+				
+			var width = diameter*1.5;
+			var imgWidth = width;
+
+			var link = svg.append("g").selectAll(".edgeBundlesLink"),
+				invisibleLink = svg.append("g").selectAll(".invisibleLink"),
+				node = svg.append("g").selectAll(".edgeBundlesNode");
+			
+			//aigner: Here the data is read and the edge bundles is created
+			//################################################################################################//			
+			function startEdgeBundles(data, graphID) 
+			{
+				var graphs, currentGraph, varCategories, entireData;
+				
+				entireData = data;
+				graphs =  entireData.graphs;
+				for (var i=0;i<graphs.length;i++)
+				{
+					if (graphs[i].id==graphID)
+					{
+						currentGraph = graphs[i]
+					}
+				}
+				
+				varCategories =  entireData.categories;
+				var classes = currentGraph.edgeBundles;
+				
+				
+				//################################################################################################//	
+				var headerDiv =  d3.select(".edgeBundlesDiv").append("div").attr("class","panel panel-primary")
+				headerDiv.append("div").attr("class","panel-heading text-center")
+					.append("h3")
+					.attr("class","panel-title")
+					.style("font-family","Arial")
+					.style("font-size","20pt")
+					.text("Edge Bundles View")
+				var name_tmp="";
+				if (currentGraph.name){name_tmp=currentGraph.name}
+				else{name_tmp="Graph " + currentGraph.id}
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph name: " + name_tmp)
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph description: " + currentGraph.description)
+				//################################################################################################//	
+				
+				//aigner: Tree option menu to select which kind of tree view the user wants to see
+				//#####################################################################//
+				function showFullTree(categoryID, categoryDescr)
+				{
+					var name_tmp = "Full data model tree view; Categorization: " + categoryDescr;
+					var emptyArray="";
+					var allLinks = d3.selectAll(".edgeBundlesLink");
+					var theSchema = currentGraph.variableSchemes[categoryID];
+					createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
+				}
+				
+				var childrenItems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					childrenItems.push({title: 'according to ' + varCategories[j].description,
+								   varCategory: varCategories[j].name,
+								   description: varCategories[j].description,
+								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
+								   onMouseOver: function(elm,d,i){}})
+				}
+				var treeOptionMenu = [
+				{
+					title: 'Show variable tree...',
+					onMouseDown: function(elm, d, i) {
+					},
+					onMouseUp: function(elm, d, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: childrenItems
+				}
+				]
+				//#####################################################################//
+				//aigner: treeLayout in the bottom
+				//################################################################################################//		
+				//aigner: Data Model Expand Button
+				//##########################################################
+				var dataModelDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
+					dataModelDiv.append("svg:title").text("Click right to inspect")
+				var ul = dataModelDiv.append("ul")
+				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
+					.attr("align","left")
+					.style("margin-left","6px")
+					.style("margin-right","-10px")
+					.style("margin-top","10px")
+					.style("margin-bottom","0px")
+					.attr("height","20")
+					.attr("width","20")
+				dropdown1.append("a").text("Data Model")
+				var links = dropdown1.append("ul");
+				for (var j=0; j< varCategories.length; j++)
+				{
+					//console.log(varCategories[j])
+					var linkLi = links.append("li");
+					var linkA = linkLi.append("a")
+						.attr("id",j)
+						.text(varCategories[j].description)
+						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+						.on("click", function()
+						{		
+							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
+						})
+					
+				}
+				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
+				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
+				//##########################################################
+				//################################################################################################//
+				
+				
+				//aigner: legend
+				//################################################################################################//
+				// var legendDiv = d3.select("body").append("div").attr("class","legendDiv");
+				// var legendSVG = legendDiv.append("svg").attr("width",1000).attr("height",200);
+				// var legend = legendSVG.append("g")
+					// .attr("class", "legend")
+					// .attr("transform", "translate(38,12)");
+				// var legendFrame = legend.append("rect")
+					// .attr("x",-28)
+					// .attr("height", 150)
+					// .attr("width", 400)
+					// .attr("fill", "none")
+					// .attr("stroke", "#8888")
+					// .attr("stroke-width", 3)
+				// legend.append("text")
+					// .attr("transform", "translate(-20,24)")
+					// .attr("font-family","Arial")
+					// .attr("font-size","16pt")
+					// .attr("font-weight",700)
+					// .attr("fill","black")
+					// .text("Legend")
+				// legend.append("line")
+					// .attr("x1", -20)
+					// .attr("y1", 50)
+					// .attr("x2", 20)
+					// .attr("y2", 50)
+					// .style("stroke", "#CC0000")
+					// .style("stroke-width", 5);
+				// legend.append("line")
+					// .attr("x1", -20)
+					// .attr("y1", 90)
+					// .attr("x2", 20)
+					// .attr("y2", 90)
+					// .style("stroke", "#99CC00")
+					// .style("stroke-width", 5);
+				// legend.append("text")
+					// .attr("transform", "translate(30,56)")
+					// .attr("font-family","Arial")
+					// .attr("font-size","12pt")
+					// .attr("fill","black")
+					// .text("Input")
+				// legend.append("text")
+					// .attr("transform", "translate(30,96)")
+					// .attr("font-family","Arial")
+					// .attr("font-size","12pt")
+					// .attr("fill","black")
+					// .text("Output")
+				
+				//################################################################################################//
+				
+				
+				//d3.select(".legendDiv").moveToBack()
+				d3.select(".dataModelDiv").moveToBack()
+				headerDiv.moveToBack()
+				d3.select(".newDiv").moveToBack()
+				d3.select(".vispackDiv").moveToBack()
+				
+				var nodes = cluster.nodes(packageHierarchy(classes));
+				var links = packageImports(nodes);
+				
+				links.forEach(function(d)
+				{
+					d.pipeData_in = d.source.pipeline_data[d.target.name];
+					d.pipeData_out = d.target.pipeline_data[d.source.name];
+					d.pipeDataName_in = "";
+					d.pipeDataName_out = "";
+					if (d.pipeData_in)
+					{
+						for (var i=0; i<d.pipeData_in.length; i++)
+						{
+							d.pipeDataName_in += "," + d.pipeData_in[i];
+						}
+					}
+					if (d.pipeData_out)
+					{
+						for (var i=0; i<d.pipeData_out.length; i++)
+						{
+							d.pipeDataName_out += "," + d.pipeData_out[i];
+						}
+
+					}
+				})
+					
+				link = link
+				  .data(bundle(links))
+				.enter().append("path")
+				  .each(function(d) { 
+					d.source = d[0];
+					d.target = d[d.length - 1];})
+				  .attr("class", "edgeBundlesLink")
+				  .attr("d", line)
+
+				
+				
+				invisibleLink = invisibleLink
+				  .data(bundle(links))
+					.enter().append("path")
+				  .each(function(d) { 
+					d.source = d[0];
+					d.target = d[d.length - 1];
+					d.createNew = true;})
+				  .attr("class", "invisibleLink")
+				  .attr("d", line)
+				  
+					
+				function showLinkTree(aLink,aVarCategory, aCategoryDescr)
+				{
+					var theSchema = currentGraph.variableSchemes[aVarCategory];
+					var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name + "; Categorization: " + aCategoryDescr;
+					createTreeLayout(name_tmp,theSchema,aLink.__data__,link);
+				}
+				
+				function showEdgeTable(aLink)
+				{						
+					aLink.pipeData_in = aLink.source.pipeline_data[aLink.target.name];
+					aLink.pipeData_out = aLink.target.pipeline_data[aLink.source.name];
+					aLink.pipeDataName_in = "";
+					aLink.pipeDataName_out = "";
+					aLink.name = "";
+					if (aLink.pipeData_in)
+					{
+						for (var i=0; i<aLink.pipeData_in.length; i++)
+						{
+							if (i==0){aLink.pipeDataName_in += aLink.pipeData_in[i];}
+							else{aLink.pipeDataName_in += "," + aLink.pipeData_in[i];}
+							
+						}
+						aLink.name += aLink.pipeDataName_in
+					}
+					if (aLink.pipeData_out)
+					{
+						for (var i=0; i<aLink.pipeData_out.length; i++)
+						{
+							if (i==0){aLink.pipeDataName_out += aLink.pipeData_out[i];}
+							else{aLink.pipeDataName_out += "," + aLink.pipeData_out[i];}
+						}
+						aLink.name += aLink.pipeDataName_out
+					}
+					
+					
+					var edgeTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","edgeTableDiv")
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style("position", "absolute")
+						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+					var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+					
+					//Drag Function for edge table
+					var xPos_init = d3.event.pageX - 2;
+					var yPos_init = d3.event.pageY - 2;
+					var xOffset_tmp;
+					var yOffset_tmp;
+					var drag = d3.behavior.drag()
+						.on("dragstart", dragstarted)
+						.on("drag", dragged)
+						.on("dragend", dragended);
+					function dragstarted() {
+					  d3.select(this).style("cursor", "grabbing")		
+					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+					}
+					function dragged() {
+						 d3.select(this)
+							.style("cursor", "grabbing")		
+							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+					}
+					function dragended() {
+					  d3.select(this).style("cursor", "grab")	
+					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+					}
+					edgeTableDiv.call(drag);
+					
+					var headLine = "Edge Information (" + aLink.source.key + " - " + aLink.target.key + ")";
+
+					var tabRemoveSVG = edgeTableGroup.append("svg")
+						.attr("width",String(headLine.length*12+"pt"))
+						.attr("height",26)
+					tabRemoveSVG.append("rect")
+						.attr("width", "100%")
+						.attr("height", "100%")
+						.attr("fill", "white");
+					var tabRemoveSymbol = tabRemoveSVG.append("g");
+					tabRemoveSymbol = tabRemoveSymbol
+						.attr("class", "tabRemoveSymbol")
+						.attr("transform", "translate(26,0)")
+					var circle = tabRemoveSymbol.append("circle")
+						.classed("remCircle",true)
+					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+					var cx = -20;
+					var cy = 12;
+					circle = circle
+						.attr("cx", cx+5)
+						.attr("cy", cy)
+						.attr("r", 10)
+					minus = minus
+						.attr("x1", cx)
+						.attr("y1", cy)
+						.attr("x2", cx+10)
+						.attr("y2", cy)
+						
+					tabRemoveSVG.append("text").attr("class","tabRemoveText")
+						.attr("transform", "translate(26,20)")
+						.attr("fill", "black")
+						.style("font-family", "Arial")
+						.style("font-size", "16pt")
+						.style("font-weight", "bold")
+						.text(headLine);
+					
+					tabRemoveSymbol
+						.on("mouseover", function(){
+							d3.select(this).style("cursor", "pointer")
+							circle.style("fill", "red").style("fill-opacity", .8);
+							})
+						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+					tabRemoveSymbol.on("mousedown", function(d)
+					{
+						edgeTableDiv.remove();
+					})
+								
+					var anEdgeNameSplit = aLink.name.split(',')
+					var numberOfconnections = anEdgeNameSplit.length;
+					var theLeafNodes = [];
+					var dimension=0;
+					var nullDim=false;
+					var undefinedLeafs;
+					var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);
+					var pipeData = aLink.name;
+					getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+					var undefLeafsNumber=0;
+					var defLeafsNumber=0;
+					for (var k=0;k<theLeafNodes.length;k++)
+					{
+						if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+						else{nullDim=true}
+						if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+						{
+							if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+							else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+							undefLeafsNumber ++;
+						}
+						else
+						{
+							defLeafsNumber++;
+						}
+					}		
+					//Render data for table
+					var data = [];
+					data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+					data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+					data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+					if (undefinedLeafs)
+					{
+						data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+					}
+					var table = edgeTableGroup.append('table');
+					tabulate(table,data,['name', 'value']); // 2 column table
+					if (undefinedLeafs)
+					{
+						var text_tmp = "Show unreferenced connections as tree";
+						var undefLeafTreeSVG = edgeTableGroup.append("svg")
+							.attr("transform", "translate(0,20)")
+							.attr("width",String(text_tmp.length*9.5+"pt"))
+							.attr("height",50)
+						undefLeafTreeSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var expandSymbol = undefLeafTreeSVG.append("g")
+							.attr("class", "newExpandSymbol")
+							.attr("transform", "translate(38,12)");
+						var expandRect = expandSymbol.append("rect")
+							.attr("x",-28)
+							.attr("height", 50)
+							.attr("fill", "#555555")
+							.attr("stroke", "none")
+							.attr("stroke-width", 2)
+							.attr("fill-opacity", 1)
+						var expCircle = expandSymbol.append("circle")
+							.attr("cx", -26)
+							.attr("cy", 0);
+						var expLine1 = expandSymbol.append("line");
+						var expLine2 = expandSymbol.append("line");
+						drawExpandSymbol(expCircle,expLine1,expLine2);
+							expCircle = expCircle.attr("fill", "white");
+						expandSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")			
+								expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
+							})
+							.on("mouseout", function(){
+								expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
+							})
+						undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(text_tmp);
+						expandSymbol.on("mousedown", function(){
+							var name_tmp = "Unref. connections tree view: " + aLink.source.name +  "  →  " + aLink.target.name + "; Categorization: schema";
+							createTreeLayout(name_tmp,treeData,aLink,link);
+						})
+					}
+					
+				}
+				
+				//linkMenu --> functions for right click options
+				var linkChildrenItems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
+											varCategory: varCategories[j].name,
+											description: varCategories[j].description,
+											onMouseClick: function(elm, data, i) {showLinkTree(elm,data.varCategory,data.description)},
+											onMouseOver: function(elm,data,i){}});
+				}
+				var linkMenu = [
+				{
+					title: 'Show edge info',
+					onMouseDown: function(elm, k, i) {
+						showEdgeTable(k)
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: []
+				},
+				{
+					title: 'Show variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: linkChildrenItems
+				}
+				]  
+				invisibleLink.append("svg:title").text("Click right to inspect")
+				invisibleLink
+				.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+				.on('contextmenu', d3.contextMenu(linkMenu));
+				
+				//aigner: CAUTION, HACK --> delete the obsolete object that contains duplicate information
+				nodes.forEach(function(aNode,i)
+				{
+					if (aNode.children)
+					{
+						var index = nodes.indexOf(aNode);
+						if (index > -1) 
+						{
+							nodes.splice(index, 1);
+						}
+					}
+				});
+				
+				//aigner: Create the nodes in a circular view
+				node = node
+				  .data(nodes)
+				.enter().append("text")
+				  .attr("class", "edgeBundlesNode")
+				  .attr("dy", ".31em")
+				  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); })
+				  .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+				  .style("font-family","Arial")
+				  .style("font-size","16pt")
+				  .text(function(d) { return d.name; })
+				  .on("mouseover", nodeMouseovered)
+				  .on("mouseout", nodeMouseouted);
+				
+				//aigner: Right click options for tools
+				//##############################################################################################################################
+				//aigner: assign additional node information to nodes coming from xdsm information	
+				var theXDSM = currentGraph.xdsm;
+				nodes.forEach(function(aNode,i)
+				{
+					var xdsmNodes = theXDSM.nodes;
+					for (var i=0; i< xdsmNodes.length; i++)
+					{
+						var xdsmNode = xdsmNodes[i];
+						if (xdsmNode.name == aNode.name)
+						{
+							aNode.id = xdsmNode.id;
+							aNode.metadata = xdsmNode.metadata;
+							aNode.type = xdsmNode.type;
+						}
+					}
+				});		
+				
+				//aigner: Table for competence/tool information
+				//############################################################
+				function showToolTable(aTool)
+				{									
+					var toolTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","toolTableDiv")
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style("position", "absolute")
+						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+					var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+					
+					//Drag Function for edge table
+					var xPos_init = d3.event.pageX - 2;
+					var yPos_init = d3.event.pageY - 2;
+					var xOffset_tmp;
+					var yOffset_tmp;
+					var drag = d3.behavior.drag()
+						.on("dragstart", dragstarted)
+						.on("drag", dragged)
+						.on("dragend", dragended);
+					function dragstarted() {
+					  d3.select(this).style("cursor", "grabbing")		
+					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+					}
+					function dragged() {
+						 d3.select(this)
+							.style("cursor", "grabbing")		
+							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+					}
+					function dragended() {
+					  d3.select(this).style("cursor", "grab")	
+					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+					}
+					toolTableDiv.call(drag);
+					
+					var aToolNameSplit = aTool.name.split(': ')			
+					var headLine;
+					if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+					else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+					var tabRemoveSVG = toolTableGroup.append("svg")
+						.attr("width",800)
+						.attr("height",26)
+					var tabRemoveRect = tabRemoveSVG.append("rect")
+						.attr("width", "100%")
+						.attr("height", "100%")
+						.attr("fill", "white");
+					var tabRemoveSymbol = tabRemoveSVG.append("g");
+					tabRemoveSymbol = tabRemoveSymbol
+						.attr("class", "tabRemoveSymbol")
+						.attr("transform", "translate(26,0)")
+					var circle = tabRemoveSymbol.append("circle")
+						.classed("remCircle",true)
+					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+					var cx = -20;
+					var cy = 12;
+					circle = circle
+						.attr("cx", cx+5)
+						.attr("cy", cy)
+						.attr("r", 10)
+					minus = minus
+						.attr("x1", cx)
+						.attr("y1", cy)
+						.attr("x2", cx+10)
+						.attr("y2", cy)
+						
+					tabRemoveSVG.append("text").attr("class","tabRemoveText")
+						.attr("transform", "translate(26,20)")
+						.attr("fill", "black")
+						.style("font-family", "Arial")
+						.style("font-size", "16pt")
+						.style("font-weight", "bold")
+						.text(headLine);
+					
+					tabRemoveSymbol
+						.on("mouseover", function(){
+							d3.select(this).style("cursor", "pointer")
+							circle.style("fill", "red").style("fill-opacity", .8);
+							})
+						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+						.on("mousedown", function(d)
+						{
+							toolTableDiv.remove();
+						})
+					
+				
+					var data = [];
+					// render the table(s)
+					if (aTool.metadata.length==0)
+					{
+						data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+					}
+					function findSubMetaData(aMetaData)
+					{
+						for(var key in aMetaData)
+						{
+							if (typeof aMetaData[key] === 'object')
+							{
+								data.push({ "name" : key, "value" : ''}) ;
+								findSubMetaData(aMetaData[key]);
+							}
+							else
+							{
+								data.push({ "name" : key, "value" : aMetaData[key] })
+							}
+						}
+					}
+					for (var j=0; j < aTool.metadata.length;j++)
+					{
+						var metaData = aTool.metadata[j];
+						findSubMetaData(metaData);						
+					}
+					var table = toolTableGroup.append('table');
+					tabulate(table,data,['name', 'value']); // 2 column table
+				}
+				//############################################################
+				
+				//aigner: Creation of input/output tree
+				//############################################################
+				function showIOTree(categoryName, categoryDescr, theNode, io)
+				{	
+					var links = d3.selectAll(".edgeBundlesLink")[0];
+					var array={name_in:"",name_out:"",name:""};
+					var name_tmp = "";
+								
+					links.forEach(function(d)
+					{	
+						var theLink = d.__data__;
+						
+						
+						var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+						var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+						if (!pipeData_in){pipeData_in = [];}
+						if (!pipeData_out){pipeData_out = [];}
+						theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+						theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+						theLink.name_in = "";
+						theLink.name_out = "";
+						theLink.name = "";
+						if (theLink.pipeData_in)
+						{
+							for (var i=0; i<theLink.pipeData_in.length; i++)
+							{
+								if (i==0){theLink.name_in += theLink.pipeData_in[i];}
+								else{theLink.name_in += "," + theLink.pipeData_in[i];}
+								
+							}
+							theLink.name += theLink.name_in
+						}
+						if (theLink.pipeData_out)
+						{
+							for (var i=0; i<theLink.pipeData_out.length; i++)
+							{
+								if (i==0){theLink.name_out += theLink.pipeData_out[i];}
+								else{theLink.name_out += "," + theLink.pipeData_out[i];}
+							}
+							theLink.name += theLink.name_out
+						}
+					
+						if (io=="in")
+						{
+							if (theLink.target == theNode)
+							{
+								if (array.name_in == ""){array.name_in +=theLink.name_out;}
+								else{array.name_in += "," + theLink.name_out;}
+								array.name_out = "";
+								array.name = array.name_in;
+							}
+							if (theLink.source == theNode)
+							{
+								if (array.name_in == ""){array.name_in +=theLink.name_in;}
+								else{array.name_in += "," + theLink.name_in;}
+								array.name_out = "";
+								array.name = array.name_in;
+							}
+							name_tmp = "Input tree view: " + theNode.id + "; Categorization: " + categoryDescr;
+						}
+						else if (io=="out")
+						{
+							if (theLink.source == theNode)
+							{
+								if (array.name_out == ""){array.name_out +=theLink.name_out;}
+								else{array.name_out += "," + theLink.name_out;}
+								array.name_in = "";
+								array.name = array.name_out;
+							}
+							if (theLink.target == theNode)
+							{
+								if (array.name_out == ""){array.name_out +=theLink.name_in;}
+								else{array.name_out += "," + theLink.name_in;}
+								array.name_in = "";
+								array.name = array.name_out;
+							}
+							name_tmp = "Output tree view: " + theNode.id + "; Categorization: " + categoryDescr;
+						}
+					})		
+					var theSchema = currentGraph.variableSchemes[categoryName]		
+					createTreeLayout(name_tmp,theSchema,array,link)
+				}
+				//############################################################
+				
+				var inputChildrenitems = [];
+				var outputChildrenitems = [];
+				var inputChildrenitems = [];
+				var outputChildrenitems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+											 varCategory: varCategories[j].name,
+											 description: varCategories[j].description,
+											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"in")},
+											 onMouseOver: function(elm,data,i){}});
+					outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+											 varCategory: varCategories[j].name,
+											 description: varCategories[j].description,
+											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"out")},
+											 onMouseOver: function(elm,data,i){}});
+				}
+				//menu --> functions for right click options
+				var toolMenu = [
+				{
+					title: 'Show competence info',
+					onMouseDown: function(elm, k, i) {
+						showToolTable(k);
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: []
+				},
+				{
+					title: 'Show input variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: inputChildrenitems
+				},
+				{
+					title: 'Show output variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: outputChildrenitems
+				}
+				]
+				
+				node.on('contextmenu', d3.contextMenu(toolMenu));
+				//##############################################################################################################################
+			};
+			startEdgeBundles(data,graphID);
+
+			function nodeMouseovered(d) {
+				d3.select(this).append("svg:title").text("Click right to inspect");
+				d3.select(this).style("cursor", "pointer")
+			  node
+				  .each(function(n) { 
+				  n.target = n.source = false; });
+
+			  link
+				  .classed("edgeBundlesLink--target", function(l) { if (l.target === d) return l.source.source = true; })
+				  .classed("edgeBundlesLink--source", function(l) { if (l.source === d) return l.target.target = true; })
+				  .filter(function(l) { return l.target === d || l.source === d; })
+				  .each(function() { this.parentNode.appendChild(this); });
+				  
+			  node
+				  .classed("edgeBundlesNode--target", function(n) { return n.target; })
+				  .classed("edgeBundlesNode--source", function(n) { return n.source; })
+			}
+
+			function nodeMouseouted(d) {
+			  link
+				  .classed("edgeBundlesLink--target", false)
+				  .classed("edgeBundlesLink--source", false);
+
+			  node
+				  .classed("edgeBundlesNode--target", false)
+				  .classed("edgeBundlesNode--source", false);
+			}
+
+			d3.select(self.frameElement).style("height", diameter + "px");
+
+			// Lazily construct the package hierarchy from class names.
+			function packageHierarchy(classes) {
+			  var map = {};
+
+			  function find(name, data) {
+				var node = map[name], i;
+				if (!node) {
+				  node = map[name] = data || {name: name, children: []};
+				  if (name.length) {
+					node.parent = find(name.substring(0, i = name.lastIndexOf("/")));
+					node.parent.children.push(node);
+					node.key = name.substring(i + 1);
+				  }
+				}
+				return node;
+			  }
+
+			  classes.forEach(function(d) {
+				find(d.name, d);
+			  });
+
+			  return map[""];
+			}
+
+			// Return a list of imports for the given array of nodes.
+			function packageImports(nodes) {
+			  var map = {},
+			  map2 = {},
+			  input = [];
+
+			  // Compute a map from name to node.
+			  nodes.forEach(function(d) {
+				map[d.name] = d;
+				map2[d.pipeline_data] = d;
+			  });
+
+			  // For each import, construct a link from the source to target node.
+			  nodes.forEach(function(d) 
+			  {
+				if(d.input)
+				{
+					d.input.forEach(function(i) 
+					{
+						if (map[i])
+						{
+							input.push({source: map[d.name], 
+									target: map[i],
+									pipeline_data: map2[d.pipeline_data]});	
+						}
+					})
+				}
+
+			   });
+			  return input;
+			}
+
+			function include(arr,obj) {
+				return (arr.indexOf(obj) != -1);
+			}
+
+			function prune_schema(parentXPath, objArray, xPathList_in, xPathList_out) 
+			{ 
+				var firstElement_in = "/"+xPathList_in.split("/")[1]+"/";
+				var firstElement_out = "/"+xPathList_out.split("/")[1]+"/";
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					obj.pipeLineIn = false;
+					obj.pipeLineOut = false;
+					var objXPath;
+					
+					//aigner: If object has children append a "/" as xPath separator
+					//else append comma as indicator for last element in the xPath
+					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+					else{objXPath =  parentXPath+objArray[i].name;}
+					var objXPathFromFirst_in = objXPath.split(firstElement_in);
+					var objXPathFromFirst_out = objXPath.split(firstElement_out);
+					
+					// console.log("Current node ->")
+					// console.log(firstElement_in+objXPathFromFirst_in[1])
+					// console.log(firstElement_out+objXPathFromFirst_out[1])
+					// console.log(xPathList_out)
+											
+					var delete_it = true;
+					if (xPathList_in!="")
+					{
+						if(objXPathFromFirst_in[1]==undefined)
+						{
+							delete_it = false;
+						}
+						else
+						{
+							if (include(xPathList_in, firstElement_in+objXPathFromFirst_in[1]))
+							{
+								obj.pipeLineIn = true;
+								delete_it = false;
+							}
+						}
+					}
+					if (xPathList_out!="")
+					{
+						if(objXPathFromFirst_out[1]==undefined)
+						{
+							delete_it = false;
+						}
+						else
+						{
+							if (include(xPathList_out, firstElement_out+objXPathFromFirst_out[1]))
+							{
+								obj.pipeLineOut = true;
+								delete_it = false;
+							}
+						}
+					}
+					
+					if (delete_it==true)
+					{
+						// console.log("delete ->")
+						// console.log( objXPathFromFirst_in[1])
+						// console.log(xPathList)
+						
+						objArray.splice(i, 1);
+						i--;
+					}
+					else
+					{
+						// console.log("do not delete ->")
+						// console.log(objXPath);
+						if (obj.children)
+						{
+							if (obj.children.length==0)
+							{
+								objArray.splice(i, 1);
+								i--;
+								prune_schema(parentXPath, objArray, xPathList_in, xPathList_out)
+							}
+							else{prune_schema(objXPath, obj.children, xPathList_in, xPathList_out);}
+							
+						}
+					}
+				}
+			}
+			function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+			{ 
+				var firstElement = "/"+xPathList.split("/")[1]+"/";
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					var objXPath;
+					
+					//aigner: If object has children append a "/" as xPath separator
+					//else append comma as indicator for last element in the xPath
+					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+					else{objXPath =  parentXPath+objArray[i].name;}
+					var objXPathFromFirst = objXPath.split(firstElement);
+					
+					// console.log("Current node ->")
+					// console.log(firstElement+objXPathFromFirst[1])
+					// console.log(xPathList)
+											
+					var delete_it = true;
+					if(objXPathFromFirst[1]==undefined)
+					{
+						delete_it = false;
+					}
+					else
+					{
+						if (include(xPathList, firstElement+objXPathFromFirst[1]))
+						{
+							delete_it = false;
+						}
+					}
+					if (delete_it==true)
+					{
+						// console.log("delete ->")
+						// console.log( objXPathFromFirst[1])
+						// console.log(xPathList)
+						
+						objArray.splice(i, 1);
+						i--;
+					}
+					else
+					{
+						// console.log("do not delete ->")
+						// console.log(objXPath);
+						if (obj.children)
+						{
+							if (obj.children.length==0)
+							{
+								objArray.splice(i, 1);
+								i--;
+								getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+							}
+							else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+						}
+						else 
+						{
+							obj.xPath = objXPath;
+							leafNodes.push(obj);
+						};
+					}
+				}
+			}
+			function clean_tree(objArray)
+			{
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					if (obj.children)
+					{
+						if (obj.children.length==0)
+						{
+							objArray.splice(i, 1);
+							i--;
+						}
+						clean_tree(obj.children);
+					}
+				}
+			}
+			function countElements(node, counter) 
+			{
+				counter ++;
+				if (node.children)
+				{
+					if (node.children.length !== 0)
+					{
+						node.children.forEach(function(n)
+						{
+							counter = countElements(n, counter);
+						});
+					}
+				}
+				return counter;
+			}
+
+			function createTreeLayout(theName, schema,aLink,theAllLinks)
+			{
+				var theLink = aLink;
+				if (aLink.source && aLink.target)
+				{
+					var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+					var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+					if (!pipeData_in){pipeData_in = [];}
+					if (!pipeData_out){pipeData_out = [];}
+					theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+					theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+					theLink.name_in = "";
+					theLink.name_out = "";
+					theLink.name = "";
+					if (theLink.pipeData_in)
+					{
+						for (var i=0; i<theLink.pipeData_in.length; i++)
+						{
+							if (i==0){theLink.name_in += theLink.pipeData_in[i];}
+							else{theLink.name_in += "," + theLink.pipeData_in[i];}
+							
+						}
+						theLink.name += theLink.name_in
+					}
+					if (theLink.pipeData_out)
+					{
+						for (var i=0; i<theLink.pipeData_out.length; i++)
+						{
+							if (i==0){theLink.name_out += theLink.pipeData_out[i];}
+							else{theLink.name_out += "," + theLink.pipeData_out[i];}
+						}
+						theLink.name += theLink.name_out
+					}
+				}
+				
+				var treeData = (JSON.parse(JSON.stringify(schema)));
+				if (theLink)
+				{
+					prune_schema("/"+treeData.name+"/", treeData.children, theLink.name_in, theLink.name_out);
+					//aigner: count all descendants of a node
+					var firstEl = theLink.name.split("/")[1];
+					if(firstEl != treeData.name)
+					{
+						var cleanOperations = countElements(treeData,0)
+						for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+					}
+				}
+					
+				var width= 1000;
+				var height= 500;
+				var xOffset = 10;
+				var xOffset2 = 100;
+				var canvas = d3.select(".circleSvg");
+				// Calculate total nodes, max label length
+				var totalNodes = 0;
+				var maxLabelLength = 0;
+				// variables for drag/drop
+				var selectedNode = null;
+				var draggingNode = null;
+				// Misc. variables
+				var i = 0;
+				var duration = 500;
+				var root;
+				
+
+				// size of the diagram
+				var viewerWidth = width/3;
+				var viewerHeight = height-50;
+
+				var tree = d3.layout.tree()
+					.size([viewerHeight, viewerWidth])
+
+				// define a d3 diagonal projection for use by the node paths later on.
+				var diagonal = d3.svg.diagonal()
+					.projection(function(d) {
+						return [d.y+xOffset, d.x];
+					});
+
+				// A recursive helper function for performing some setup by walking through all nodes
+
+				function visit(parent, visitFn, childrenFn) {
+					if (!parent) return;
+
+					visitFn(parent);
+
+					var children = childrenFn(parent);
+					if (children) {
+						var count = children.length;
+						for (var i = 0; i < count; i++) {
+							visit(children[i], visitFn, childrenFn);
+						}
+					}
+				}
+
+				// Call visit function to establish maxLabelLength
+				visit(treeData, function(d) {
+					totalNodes++;
+					maxLabelLength = Math.max(d.name.length, maxLabelLength);
+				}, function(d) {
+					return d.children && d.children.length > 0 ? d.children : null;
+				});
+				
+				function getMaxLength(data)
+				{
+					var maxLen=0;;
+					for (var i = 0; i < data.length; i++)
+					{
+						maxLen = Math.max(data[i].name.length, maxLen);
+					}
+					for (var i = 0; i < data.length; i++)
+					{
+						data[i].labelLength = maxLen;
+						if (data[i].children)
+						{getMaxLength(data[i].children);}
+						if (data[i]._children)
+						{getMaxLength(data[i]._children);}
+					}
+					
+				}
+				if(treeData._children)
+				{getMaxLength(treeData._children);}
+				if(treeData.children)
+				{getMaxLength(treeData.children);}
+				treeData.labelLength = treeData.name.length;
+
+				// sort the tree according to the node names
+				function sortTree() {
+					tree.sort(function(a, b) {
+						return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
+					});
+				}
+				// Sort the tree initially incase the JSON isn't in a sorted order.
+				//sortTree()
+
+
+				// Collapse the node and all it's children
+				function collapse(d) {
+				  if(d.children) {
+					d._children = d.children
+					d._children.forEach(collapse)
+					d.children = null
+				  }
+				}
+				// Collapse the node and all it's children
+				function expand(d) {
+				  if(d._children) {
+					d.children = d._children
+					d.children.forEach(expand)
+					d._children = null
+				  }
+				}
+				// Toggle children on click.
+				function click(d) 
+				{
+					if (d.children) {
+						d._children = d.children;
+						d.children = null;
+					} else 
+					{
+						d.children = d._children;
+						d._children = null;
+					}
+					update(d,theAllLinks);
+				}
+				// Collapse/expand entire tree on double-click
+				function dblclick(d) 
+				{
+					if(d.children) 
+					{
+						collapse(d);
+					}
+					else if(d._children)
+					{
+						expand(d);
+					}
+					update(d,theAllLinks);
+				}	
+
+				
+				
+				//aigner: Here the tree layout is created
+				var treeLayoutdiv = d3.select(".edgeBundlesDiv").append("div").attr("class","treeDiv_"+theName)
+										.style("left",(d3.event.pageX) + "px")
+										.style("top",(d3.event.pageY - 28) + "px")
+										.style("position", "absolute")
+										.on("mousedown", function(d) {
+											d3.select(this).moveToFront();
+										})
+										
+				var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+				var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
+								.attr("transform", "translate(50,0)");
+				var margin = {top: 20, right: 90, bottom: 20, left: 90},
+							  width = 960 - margin.left - margin.right,
+							  height = 500 - margin.top - margin.bottom;
+
+				// append the svg object to the body of the page
+				// appends a 'group' element to 'svg'
+				// moves the 'group' element to the top left margin
+				var offset_tmp = 60;
+				treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+				treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp)
+						 .on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+				treeGroup = treeGroup
+					.attr("width", width + margin.right + margin.left)
+					.attr("height", height + margin.top + margin.bottom);
+					
+				//Drag Function for treeLayout
+				var xPos_init = d3.event.pageX - 2;
+				var yPos_init = d3.event.pageY - 2;
+				var xOffset_tmp;
+				var yOffset_tmp;
+				var drag = d3.behavior.drag()
+					.on("dragstart", dragstarted)
+					.on("drag", dragged)
+					.on("dragend", dragended);
+				function dragstarted() {
+				  d3.select(this).style("cursor", "grabbing")		
+				  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+				  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+				}
+				function dragged() {
+					 d3.select(this)
+						.style("cursor", "grabbing")		
+						.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+						.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+				}
+				function dragended() {
+				  d3.select(this).style("cursor", "grab")	
+				  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+				  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+				}
+				treeLayoutdiv.call(drag);
+				
+				var frame = treeGroup.append("rect")
+					.attr("class","treeFrame")
+					.attr("stroke-width", 1)
+					.attr("stroke", "white")
+					.attr("fill-opacity", .8);
+				
+				var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
+					
+				
+				var r=8;
+				var cx=r+2;
+				var cy=r+2;
+				var circle = removeSymbol.append("circle")
+					.attr("cx", cx)
+					.attr("cy", cy)
+					.attr("r", r)
+					.style("stroke", "black")
+					.style("stroke-width", 1.5)
+					.style("fill", "red")
+					.style("fill-opacity", .6)
+				var minus = removeSymbol.append("line")
+					.attr("x1", cx+r/2)
+					.attr("y1", cy)
+					.attr("x2", cx-r/2)
+					.attr("y2", cy)
+					.style("stroke", "black")
+					.style("stroke-width", 1.5);
+					
+				removeSymbol
+					.on("mouseover", function(){
+						d3.select(this).style("cursor", "pointer")
+						circle.style("fill", "red").style("fill-opacity", .8);})
+					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+					.on("mousedown",function()
+					{
+						treeLayoutdiv.remove();
+					})
+				
+				
+				// Define the root
+				root = treeData;
+				root.x0 = 0;
+				root.y0 = 0;
+				
+				// Append a group which holds all nodes and which the zoom Listener can act upon.
+				var svgGroup_xOff = root.name.length*10+50
+				var svgGroup = treeGroup.append("g")
+					.attr("class","tree_"+theName)
+					.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+				
+				collapse(root);
+				update(root,theAllLinks);
+				
+				var frametext = treeGroup.append("text")
+					.attr("class", "frametext")
+					.attr("x",30)
+					.attr("y",15)
+					.attr("text-anchor","start")
+					.attr("font-family","Arial")
+					.attr("font-size","18px")
+					.attr("font-weight","bold")
+					.text(theName)
+				
+				function update(source,allLinks) {
+					// Compute the new height, function counts total children of root node and sets tree height accordingly.
+					// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
+					// This makes the layout more consistent.
+					var levelWidth = [1];
+					var levelLength = [1];
+					var childCount = function(level, n) {
+
+						if (n.children && n.children.length > 0) {
+							if (levelWidth.length <= level + 1) levelWidth.push(0);
+							
+							levelWidth[level + 1] += n.children.length;
+							n.children.forEach(function(d) {
+								childCount(level + 1, d);
+							});
+						}
+					};
+					childCount(0, root);
+
+					var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+					var newWidth = viewerWidth+300;
+					
+					//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
+					tree = tree.size([newHeight, newWidth]);
+					
+					frame = frame.attr("width",newWidth)
+						.attr("height",newHeight+60)
+						.attr("fill","white");
+						
+					
+					
+					// Compute the new tree layout.
+					var nodes = tree.nodes(root),
+						links = tree.links(nodes);
+						
+						
+					//aigner: count all descendants of a node
+					function countDescendants(node, counter) 
+					{
+						if (node._children)
+						{
+							node._children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else if (node.children)
+						{
+							node.children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else
+						{
+							counter ++;
+						}
+						return counter;
+					}
+					
+					
+					var depths = [];
+					var labelLength = [];
+					nodes.forEach(function(d) 
+					{				
+						//aigner: If node is collapsed show number of ancestors
+						if (d._children)
+						{
+							d._childrenNum = countDescendants(d, 0);
+							d.text = d.name + " (" + d._childrenNum + ")";
+						}
+						else 
+						{
+							d.text = d.name
+						}
+						
+						//aigner: Find maximum labelLength for each level
+						if (!depths.includes(d.depth))
+						{
+							depths.push(d.depth);
+							labelLength.push(d.text.length);
+						}
+						else
+						{
+							if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
+						}
+					});
+					// Set widths between levels based on labelLength of each level.
+					var newWidth=0;	
+					var depth_tmp = 0;			
+					nodes.forEach(function(d) 
+					{
+						if (d.parent)
+						{
+							d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
+						}
+						else{d.y=0}
+						
+						
+						if (newWidth<d.y)
+						{newWidth=d.y;}
+						
+						// console.log("##############")
+						// console.log(d.name)
+						// console.log("x = " + d.x)
+						// console.log("y = " + d.y)
+						// console.log("depth = " + depths.indexOf(d.depth))
+						// console.log("##############")
+					});	
+					
+					function getTextWidth(text, font) 
+					{
+						// re-use canvas object for better performance
+						var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
+						var context = canvas.getContext("2d");
+						context.font = font;
+						var metrics = context.measureText(text);
+						return metrics.width;
+					}					
+					newWidth=Math.max(newWidth,getTextWidth(theName,"Arial 12pt"));
+
+					// console.log(depths)		
+					// console.log(labelLength)		
+					
+					//aigner: Adjust height and width of the frame
+					treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+					treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+					frame = frame.attr("height", newHeight + margin.top + margin.bottom)
+					frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
+
+
+					// Update the nodes…
+					var treeNode = svgGroup.selectAll("g.treeNode")
+						.data(nodes, function(d) {
+							return d.id || (d.id = ++i);
+						});
+
+					var dblclick_timer = false;
+					// Enter any new nodes at the parent's previous position.
+					var nodeEnter = treeNode.enter().append('g')
+					  .attr('class', 'treeNode')
+					  .attr("transform", function(d) {
+						return "translate(" + source.y0 + "," + source.x0 + ")";
+					})
+					.on("mousedown", function(d) {
+						if (d3.event.which != 3)
+						{
+							// if double click timer is active, this click is the double click
+							if ( dblclick_timer )
+							{
+								clearTimeout(dblclick_timer)
+								dblclick_timer = false
+								// double click code code comes here
+								//console.log("DOUBLE CLICK")
+								dblclick(d);
+							}
+							// otherwise, what to do after single click (double click has timed out)
+							else dblclick_timer = setTimeout( function(){
+								dblclick_timer = false
+								// single click code code comes here
+								//console.log("SINGLE CLICK")
+								click(d);
+							}, 250)
+						}
+					})
+						
+					
+					nodeEnter.append("circle")
+						.attr('class', 'nodeCircle')
+						.attr("r", 0)
+						.style("fill", function(d) {
+							if (d._children)
+							{
+								if(d.pipeLineIn && !d.pipeLineOut){return '#ea9999'}
+								else if(!d.pipeLineIn && d.pipeLineOut){return '#d6ea99'}
+								else {return "lightsteelblue"}
+							}
+							else{return "#fff";}
+						})		
+						.style("stroke", function(d) {
+							if(d.pipeLineIn && !d.pipeLineOut){
+								//console.log(d);
+								return '#CC0000'}
+							else if(!d.pipeLineIn && d.pipeLineOut){
+								//console.log(d);
+								return '#99CC00'}
+						})
+						.attr("cx", function(d) {return xOffset});
+
+					nodeEnter.append("text")
+						.attr("x", function(d) 
+						{
+								return d.children || d._children ? -10+xOffset : 10+xOffset;
+						})
+						.attr("dy", ".35em")
+						.attr('class', 'nodeText')
+						.attr("text-anchor", function(d) {
+							return d.children || d._children ? "end" : "start";
+						})
+						.text(function(d) {
+							return d.text;
+						})
+						.style("fill-opacity", 0)
+						
+
+					// Update the text to reflect whether node has children or not.
+					treeNode.select('text')
+						.attr("x", function(d) {
+							return d.children || d._children ? -10+xOffset : 10+xOffset;
+						})
+						.attr("text-anchor", function(d) {
+							return d.children || d._children ? "end" : "start";
+						})
+						.text(function(d) {
+							return d.text;
+						});
+
+					// Change the circle fill depending on whether it has children and is collapsed
+					treeNode.select("circle.nodeCircle")
+						.attr("r", 4.5)
+						.style("fill", function(d) {
+							if (d._children)
+							{
+								if(d.pipeLineIn && !d.pipeLineOut){return '#ea9999'}
+								else if(!d.pipeLineIn && d.pipeLineOut){return '#d6ea99'}
+								else {return "lightsteelblue"}
+							}
+							else{return "#fff";}
+						})			
+					
+					
+					function showVariableTable(aVariable)
+					{						
+						var varTableDiv = d3.select(".edgeBundlesDiv").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
+							.style('left', (d3.event.pageX - 2) + 'px')
+							.style('top', (d3.event.pageY - 2) + 'px')
+							.style("position", "absolute")
+							.on("mousedown", function(d) {
+								d3.select(this).moveToFront();
+							})
+						var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+						
+						//Drag Function for node table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = d3.behavior.drag()
+							.on("dragstart", dragstarted)
+							.on("drag", dragged)
+							.on("dragend", dragended);
+						function dragstarted() {
+						  d3.select(this).style("cursor", "grabbing")		
+						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+						}
+						function dragged() {
+							 d3.select(this)
+								.style("cursor", "grabbing")		
+								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).style("cursor", "grab")	
+						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+						}
+						varTableDiv.call(drag);
+						
+						var headLine = "Node Information (" + theName + ")";
+						var tabRemoveSVG = varTableGroup.append("svg")
+							.attr("width",String(headLine.length*9.5+"pt"))
+							.attr("height",26)
+						tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+						tabRemoveSymbol.on("mousedown", function(d)
+						{
+							varTableDiv.remove();
+						})
+						
+						var data = [];
+						// render the table(s)
+						data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
+						
+						function getNodeXPath(strWrapper,aNode) 
+						{
+						  strWrapper.val = "/"+aNode.name+strWrapper.val;
+						  if (!aNode.parent) 
+						  {
+							return strWrapper;
+						  }
+						  else 
+						  {
+							
+							return getNodeXPath(strWrapper, aNode.parent);
+						  }
+						}
+						var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+						data.push({ "name" : "xPath", "value" : xPath_tmp })
+						if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
+						if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
+						if (aVariable.children || aVariable._children)
+						{
+							var childrenNum=0;
+							if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
+							if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
+							data.push({ "name" : "Number of children", "value" : childrenNum })
+						}
+						if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
+						else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+						if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
+						var table = varTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+					}
+					
+					//Highlight function, that shows usage of a node in the XDSM
+					function highlight(data,aText)
+					{
+						aText = "/"+data.name+aText;
+						if (data.parent){highlight(data.parent,aText)}
+						else
+						{
+							allLinks[0].forEach(function(aLink)
+							{
+								
+								aLink.__data__.pipeData_in = aLink.__data__.source.pipeline_data[aLink.__data__.target.name];
+								aLink.__data__.pipeData_out = aLink.__data__.target.pipeline_data[aLink.__data__.source.name];
+								aLink.__data__.pipeDataName_in = "";
+								aLink.__data__.pipeDataName_out = "";
+								aLink.__data__.name = "";
+								if (aLink.__data__.pipeData_in)
+								{
+									for (var i=0; i<aLink.__data__.pipeData_in.length; i++)
+									{
+										if (i==0){aLink.__data__.pipeDataName_in += aLink.__data__.pipeData_in[i];}
+										else{aLink.__data__.pipeDataName_in += "," + aLink.__data__.pipeData_in[i];}
+										
+									}
+									aLink.__data__.name += aLink.__data__.pipeDataName_in
+								}
+								if (aLink.__data__.pipeData_out)
+								{
+									for (var i=0; i<aLink.__data__.pipeData_out.length; i++)
+									{
+										if (i==0){aLink.__data__.pipeDataName_out += aLink.__data__.pipeData_out[i];}
+										else{aLink.__data__.pipeDataName_out += "," + aLink.__data__.pipeData_out[i];}
+									}
+									aLink.__data__.name += aLink.__data__.pipeDataName_out
+								}
+							})
+											
+							//var allLinks_tmp = allLinks[0];
+							allLinks[0].forEach(function(p) {
+								var firstElement_tmp = p.__data__.name.split("/")[1]
+								var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+								if (include(p.__data__.name,text_fromFirst))
+								{
+									d3.select(p)
+										.style("stroke-opacity", 1.0)
+								}
+								else
+								{
+									d3.select(p).style("stroke-opacity", 0);			
+								}
+							});
+						}
+					}
+					
+					//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+					function writeTreeToXML(aNode,anXMLDoc,anXPath)
+					{
+						//Variable "children" 
+						//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+						var children;
+						if (aNode._children){children = aNode._children;}
+						else if (aNode.children){children = aNode.children;}
+						
+						//Get current xml element with its xPath
+						var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+						if (element != null) {element.value = '...';}
+						
+						//If a node has children (collapsed or expanded), loop through them
+						if (children)
+						{
+							for (var i=0; i < children.length;i++)
+							{
+								//Name of the new XML element --> childName
+								var child = children[i];
+								var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+								var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+								var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+								
+								//The children are appended to the xPath --> newXPath
+								var newXPath = anXPath+"/"+cleanChildName[0];
+								
+								//If childName contains a uID, make the uID an attribute
+								if (childName[1])
+								{
+									if (parseInt(childName[1]))
+									{
+										var dummyID = childName[1];
+										newNode.setAttribute("dummyID", dummyID)
+										newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+									}
+									else
+									{
+										var uID = childName[1];
+										newNode.setAttribute("uID", uID)
+										newXPath = newXPath+"[@uID='"+uID+"']";
+									}
+								}
+								if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+								
+								//Append the newNode to the xml structure
+								element.appendChild(newNode);
+								
+								
+								
+								////aigner: Sorting of XML elements according to "uID"
+								// var items = element.children;
+								// var itemsArr = [];
+								// for (var j in items) {
+									// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+										// itemsArr.push(items[j]);
+									// }
+								// }
+								// itemsArr.sort(function(a,b){
+									// if (a.getAttribute("uID") < b.getAttribute("uID"))
+										// return -1;
+									// if (a.getAttribute("uID") > b.getAttribute("uID"))
+										// return 1;
+									// return 0;
+									// });
+
+								// for (j = 0; j < itemsArr.length; ++j) {
+								  // element.appendChild(itemsArr[j]);
+								// }
+								
+								//call function writeTreeToXML recursively for all children
+								writeTreeToXML(child,anXMLDoc,newXPath)
+							}
+						}
+						else
+						{
+							if (aNode.value){element.innerHTML = String(aNode.value);}
+							else{element.innerHTML = " ";}
+						}
+						//return the xml document
+						return anXMLDoc;
+					}
+					
+					function removeAttributeInAllElements(aDocument,attribute)
+					{
+					  var matchingElements = [];
+					  var allElements = aDocument.getElementsByTagName('*');
+					  for (var i = 0, n = allElements.length; i < n; i++)
+					  {
+						if (allElements[i].getAttribute(attribute) !== null)
+						{
+							allElements[i].removeAttribute(attribute);
+						}
+					  }
+					  return matchingElements;
+					}
+					
+					function putAncestorsInXMLString(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						else
+						{
+							strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXMLString(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					
+					function putAncestorsInXPath(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+						}
+						else
+						{
+							strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXPath(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					
+					// Function to download data to a file
+					function download(filename, text) {
+						var element = document.createElement('a');
+						element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+						element.setAttribute('download', filename);
+
+						element.style.display = 'none';
+						document.body.appendChild(element);
+
+						element.click();
+
+						document.body.removeChild(element);
+					}
+					
+					//menu --> functions for right click options
+					var nodeMenu = [
+					{
+						title: 'Show node information',
+						onMouseDown: function(elm, d, i) {
+							showVariableTable(d);
+						},
+						onMouseUp: function(elm, d, i) {},
+						onMouseOver: function(elm, d, i) {},
+						childrenItems: []
+					},
+					{
+						title: 'Show usage of node in diagram',
+						onMouseDown: function(elm, d, i) {
+							d3.selectAll(".treeFrame").attr("fill-opacity", .5);
+							d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
+							var theText="";
+							highlight(d,theText);
+						},
+						onMouseUp: function(elm, d, i) {				
+							d3.selectAll(".edgeBundlesLink")
+								.style("stroke-opacity",.4)
+							d3.selectAll(".treeFrame").attr("fill-opacity", .8);
+							d3.selectAll(".nodeText").style("fill-opacity", 1);					
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Copy x-path to clipboard',
+						onMouseDown: function(elm, d, i) {
+							function copyToClipboard(text) 
+							{
+								window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+							}
+							function copyXPathToClipboard(data,aText)
+							{
+								aText = "/"+data.name+aText;
+								if (data.parent){copyXPathToClipboard(data.parent,aText)}
+								else{copyToClipboard(aText);}
+							}
+							var copyText="";
+							copyXPathToClipboard(d,copyText);
+							d3.select('.d3-context-menu').style('display', 'none');
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download full tree as XML-file',
+						onMouseDown: function(elm, d, i) {
+							//Begin xml structure with the first element
+							var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+							var initialXPath = "/"+nodes[0].name;								
+							writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							var xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(theName+'_full.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download tree as XML-file from current node',
+						onMouseDown: function(elm, d, i) {
+							var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+							var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+							writeTreeToXML(d,xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(theName+"_"+d.name+'.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					}
+					]
+					
+					nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
+					
+					nodeEnter = nodeEnter.on('contextmenu', d3.contextMenu(nodeMenu));
+								
+					// UPDATE		
+					// Transition nodes to their new position.
+					var nodeUpdate = treeNode.transition()
+						.duration(duration)
+						.attr("transform", function(d) {
+							return "translate(" + d.y + "," + d.x + ")";
+						});
+
+					// Fade the text in
+					nodeUpdate.select("text")
+						.style("fill-opacity", 1);
+					
+					//New object for invisible nodes
+					var exitNodes = [];
+					
+					// Remove any exiting nodes
+					var nodeExit = treeNode.exit().transition()
+					  .duration(duration)
+					  .attr("transform", function(d) {
+						  return "translate(" + source.y + "," + source.x + ")";
+					  })
+					  .remove();
+					
+					function translation(d) 
+					{
+						
+						var closestAncestor;
+						closestAncestor = findClosestAncestor(nodes,d);
+						exitNodes.push(d);
+						exitNodes[exitNodes.length-1].x = closestAncestor.x;
+						exitNodes[exitNodes.length-1].y = closestAncestor.y;
+						return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")";
+					}
+					
+					function findClosestAncestor(allNodes, element) 
+					{
+						var level = 0;
+						var closestAncestor;
+						for (var i=0;i<allNodes.length;i++)
+						{
+							if (!allNodes[i].level){allNodes[i].level=0};
+							if (isDescendant(allNodes[i],element) && allNodes[i].level >= level)
+							{
+								level = allNodes[i].level;
+								closestAncestor = allNodes[i];
+							}
+						}
+						return closestAncestor;
+					}
+					
+					function isDescendant(parent, child) 
+					{
+						 var node = child.parent;
+						 while (node != null) 
+						 {
+							if (node == parent) 
+							{
+								return true;
+							}
+							node = node.parent;
+						 }
+						 return false;
+					}
+				
+
+					// Update the links…
+					var link = svgGroup.selectAll("path.treeLink")
+						.data(links, function(d) {
+							return d.target.id;
+						});
+
+					// Enter any new links at the parent's previous position.
+					link.enter().insert("path", "g")
+						.attr("class", "treeLink")
+						.attr("d", function(d) {
+							var o = {
+								x: source.x0,
+								y: source.y0
+							};
+							return diagonal({
+								source: o,
+								target: o
+							});
+						});
+
+					// Transition links to their new position.
+					link.transition()
+						.duration(duration)
+						.attr("d", diagonal);
+
+					// Transition exiting nodes to the parent's new position.
+					link.exit().transition()
+						.duration(duration)
+						.attr("d", function(d) {
+							var o = {
+								x: source.x,
+								y: source.y
+							};
+							return diagonal({
+								source: o,
+								target: o
+							});
+						})
+						.remove();
+					
+					// Stash the old positions for transition.
+					nodes.forEach(function(d) {						
+						d.x0 = d.x;
+						d.y0 = d.y;
+					});
+				}
+			}
+
+			},{"d3":1}]},{},[2]);
+		}
+		
+		function sankeyDiagram_script(data, graphID)
+		{
+			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
+			2:[function(require,module,exports){
+			"use strict";
+
+			var d3 = require('d3');
+
+
+			//aigner: functions for drawing expand- and collapse-symbols
+			function drawExpandSymbol(aCircle, line1, line2)
+			{        
+				 aCircle = aCircle
+					.attr("r", 10)
+					.style("stroke", "black")
+					.style("stroke-width", 2)
+					.style("fill", "#99CC00")
+					.style("fill-opacity", .6)
+				line1 = line1
+					.attr("x1", parseFloat(aCircle.attr("cx"))-5)
+					.attr("y1", parseFloat(aCircle.attr("cy")))
+					.attr("x2", parseFloat(aCircle.attr("cx"))+5)
+					.attr("y2", parseFloat(aCircle.attr("cy")))
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+				line2 = line2
+					.attr("x1", parseFloat(aCircle.attr("cx")))
+					.attr("y1", parseFloat(aCircle.attr("cy"))-5)
+					.attr("x2", parseFloat(aCircle.attr("cx")))
+					.attr("y2", parseFloat(aCircle.attr("cy"))+5)
+					.style("stroke", "black")
+					.style("stroke-width", 2);
+			}
+			function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+			{        
+				 var xOffset=150;
+				 var yOffset=12;
+				 aCircle = aCircle
+					.attr("cx", anXdsm.svg.attr("width")-xOffset)
+					.attr("cy", yOffset)
+					.attr("r", 10)
+					.classed("remCircle",true)
+				aMinus = aMinus
+					.attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+					.attr("y1", yOffset)
+					.attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+					.attr("y2", yOffset)
+					.classed("remMinus",true)
+			}
+			d3.contextMenu = function (menu, openCallback) {
+
+				// create the div element that will hold the context menu
+				d3.selectAll('.d3-context-menu').data([1])
+					.enter()
+					.append('div')
+					.attr('class', 'd3-context-menu');
+
+				// close menu
+				d3.select('body').on('click.d3-context-menu', function() {
+					d3.select('.d3-context-menu').style('display', 'none');
+				});
+
+				// this gets executed when a contextmenu event occurs
+				return function(data, index) {	
+					var elm = this;
+
+					d3.selectAll('.d3-context-menu').html('');
+					var list = d3.selectAll('.d3-context-menu').append('ul');
+						list.selectAll('li').data(menu).enter()
+						.append('li')
+						.html(function(d) {
+							return d.title;
+						})
+						.on('mousedown', function(d, i) {
+							d.onMouseDown(elm, data, index);
+						})
+						.on('mouseup', function(d, i) {
+							d.onMouseUp(elm, data, index);
+							d3.select('.d3-context-menu').style('display', 'none');
+						})
+						.on('mouseenter',function(d,i){
+							d.onMouseOver(elm,data,index);
+							if(d.childrenItems.length>0 )
+								 {
+								  d3.select(this).selectAll("ul").remove(); 
+								  d3.select(this)
+									.append("ul")
+									.selectAll("li")
+									   .data(d.childrenItems)
+										.enter().append("li")
+										  .text(function(d) { return d.title; })
+									 .on("mouseenter", function(d,i){
+											d.onMouseOver(elm,data,index);
+										})
+									 .on('click',  function(d, i) {
+											d.onMouseClick(elm, d, index);
+										})
+									 .on('mouseleave',function(d,i){
+										
+										});
+								 }
+							 else
+								 return false;
+						})
+						.on('mouseleave',function(d,i){
+							d3.select(this).selectAll("ul").style('display', 'none')                  
+						});
+					
+					  
+
+					// the openCallback allows an action to fire before the menu is displayed
+					// an example usage would be closing a tooltip
+					if (openCallback) openCallback(data, index);
+
+					// display context menu
+					d3.select('.d3-context-menu')
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style('display', 'block');
+
+					d3.event.preventDefault();
+				};
+			};
+
+			//aigner: Include function
+			function include(arr,obj) {
+					return (arr.indexOf(obj) != -1);
+			}
+
+			//aigner: Function creates a table
+			function tabulate(aTable,data,columns) {
+				var thead = aTable.append('thead');
+				var	tbody = aTable.append('tbody');  
+
+				// create a row for each object in the data
+				var rows = tbody.selectAll('tr')
+				  .data(data)
+				  .enter()
+				  .append('tr');
+
+				// create a cell in each row for each column
+				var cells = rows.selectAll('td')
+				  .data(function (row) {
+					return columns.map(function (column) {
+					  return {column: column, value: row[column]};
+					});
+				  })
+				  .enter()
+				  .append('td')
+					.html(function (d) { return d.value; });
+
+				return aTable;
+			}
+
+			//aigner: Move to front function
+			d3.selection.prototype.moveToFront = function() {  
+			  return this.each(function(){
+				this.parentNode.appendChild(this);
+			  });
+			};
+			//aigner: Move to back function
+			d3.selection.prototype.moveToBack = function() {  
+				return this.each(function() { 
+					var firstChild = this.parentNode.firstChild; 
+					if (firstChild) { 
+						this.parentNode.insertBefore(this, firstChild); 
+					} 
+				});
+			};
+
+
+			//aigner: biHisankey functions (Source: http://bl.ocks.org/Neilos/584b9a5d44d5fe00f779)
+			d3.biHiSankey = function () {
+			  "use strict";
+
+			  var biHiSankey = {},
+				nodeWidth = 24,
+				nodeSpacing = 8,
+				linkSpacing = 5,
+				arrowheadScaleFactor = 0, // Specifies the proportion of a link's stroke width to be allowed for the marker at the end of the link.
+				size = [1, 1], // default to one pixel by one pixel
+				nodes = [],
+				nodeMap = {},
+				parentNodes = [],
+				leafNodes = [],
+				links = [],
+				xScaleFactor = 1,
+				yScaleFactor = 1,
+				defaultLinkCurvature = 0.5;
+
+			  function center(node) {
+				return node.y + node.height / 2;
+			  }
+
+			  function value(link) {
+				return link.value;
+			  }
+
+			  function initializeNodeArrayProperties(node) {
+				node.sourceLinks = [];
+				node.rightLinks = [];
+				node.targetLinks = [];
+				node.leftLinks = [];
+				node.connectedNodes = [];
+				node.children = [];
+				node.ancestors = [];
+			  }
+			  // generates the nodeMap {"1": <node1>, "2": <node2>}
+			  // and initializes the array properties of each node
+			  function initializeNodeMap() {
+				nodes.forEach(function (node) {
+				  nodeMap[node.id] = node;
+				  initializeNodeArrayProperties(node);
+				});
+			  }
+
+			  function computeLeafNodes() {
+				leafNodes = nodes.filter(function (node) {
+				  return !node.children.length;
+				});
+			  }
+
+			  function computeParentNodes() {
+				parentNodes = nodes.filter(function (node) {
+				  return node.children.length;
+				});
+			  }
+
+			  function addAncestorsToChildren(node) {
+				node.children.forEach(function (child) {
+				  child.ancestors = child.ancestors.concat(this.ancestors.concat([this]));
+				  addAncestorsToChildren(child);
+				}, node);
+			  }
+
+			  // generate hierarchical connections between parent and child nodes
+			  function computeNodeHierarchy() {
+				var parent,
+					rootNodes = [];
+
+				nodes.forEach(function (node) {
+				  parent = null;
+				  if (parent) {
+					node.parent = parent;
+					parent.children.push(node);
+				  } else {
+					node.parent = null;
+					rootNodes.push(node);
+				  }
+				});
+
+				computeLeafNodes();
+				computeParentNodes();
+
+				rootNodes.forEach(function (rNode) {
+				  addAncestorsToChildren(rNode);
+				});
+			  }
+
+			  // Populate the sourceLinks and targetLinks for each node.
+			  function computeNodeLinks() {
+				var sourceNode, targetNode;
+				links.forEach(function (link) {
+				  sourceNode = nodeMap[link.source] || link.source;
+				  targetNode = nodeMap[link.target] || link.target;
+				  link.id = link.source + '-' + link.target;
+				  link.source = sourceNode;
+				  link.target = targetNode;
+				  sourceNode.sourceLinks.push(link);
+				  targetNode.targetLinks.push(link);
+				});
+			  }
+
+			  function visible(linkCollection) {
+				return linkCollection.filter(function (link) {
+				  return link.source.state === "collapsed" && link.target.state === "collapsed";
+				});
+			  }
+
+			  // When child nodes are collapsed into their parents (or higher ancestors)
+			  // the links between the child nodes should be represented by links
+			  // between the containing ancestors. This function adds those extra links.
+			  function computeAncestorLinks() {
+				// Leaf nodes are never parents of other nodes
+				// Duplicate source and target links between a leaf node and another leaf node
+				// and add to the leaf nodes' parents
+				leafNodes.forEach(function (leafNode) {
+				  leafNode.sourceLinks.forEach(function (sourceLink) {
+					var ancestorTargets,
+					target = sourceLink.target;
+					if (leafNodes.indexOf(target) >= 0) {
+					  ancestorTargets = target.ancestors.filter(function (tAncestor) {
+						return leafNode.ancestors.indexOf(tAncestor) < 0;
+					  });
+					  ancestorTargets.forEach(function (ancestorTarget) {
+						var ancestorLink = { source: leafNode,
+											target: ancestorTarget,
+											value: sourceLink.value,
+											id: leafNode.id + "-" + ancestorTarget.id };
+
+						leafNode.sourceLinks.push(ancestorLink);
+						ancestorTarget.targetLinks.push(ancestorLink);
+						links.push(ancestorLink);
+					  });
+					}
+				  });
+
+				  leafNode.targetLinks.forEach(function (targetLink) {
+					var ancestorSources, source = targetLink.source;
+					if (leafNodes.indexOf(source) >= 0) {
+					  ancestorSources = source.ancestors.filter(function (sAncestor) {
+						return leafNode.ancestors.indexOf(sAncestor) < 0;
+					  });
+					  ancestorSources.forEach(function (ancestorSource) {
+						var ancestorLink = { source: ancestorSource,
+											target: leafNode,
+											value: targetLink.value,
+											id: ancestorSource.id + "-" + leafNode.id };
+						ancestorSource.sourceLinks.push(ancestorLink);
+						leafNode.targetLinks.push(ancestorLink);
+						links.push(ancestorLink);
+					  });
+					}
+				  });
+				});
+
+				// Add links between parents (for when both parents are in collapsed state)
+				parentNodes.forEach(function (parentNode) {
+				  parentNode.sourceLinks.forEach(function (sourceLink) {
+					var ancestorTargets, target = sourceLink.target;
+					if (leafNodes.indexOf(target) >= 0) {
+					  ancestorTargets = target.ancestors.filter(function (tAncestor) {
+						return parentNode.ancestors.indexOf(tAncestor) < 0;
+					  });
+					  ancestorTargets.forEach(function (ancestorTarget) {
+						var ancestorLink = { source: parentNode,
+											target: ancestorTarget,
+											value: sourceLink.value,
+											id: parentNode.id + "-" + ancestorTarget.id };
+
+						parentNode.sourceLinks.push(ancestorLink);
+						ancestorTarget.targetLinks.push(ancestorLink);
+						links.push(ancestorLink);
+					  });
+					}
+				  });
+				});
+			  }
+
+			  // To reduce clutter in the diagram merge links that are from the
+			  // same source to the same target by creating a new link
+			  // with a value equal to the sum of the values of the merged links
+			  function mergeLinks() {
+				var linkGroups = d3.nest()
+				  .key(function (link) { return link.source.id + "->" + link.target.id; })
+				  .entries(links)
+				  .map(function (object) { return object.values; });
+
+				links = linkGroups.map(function (linkGroup) {
+				  return linkGroup.reduce(function (previousLink, currentLink) {
+					return {
+					  "source": previousLink.source,
+					  "target": previousLink.target,
+					  "id": d3.min([previousLink.id, currentLink.id]),
+					  "value": previousLink.value + currentLink.value
+					};
+				  });
+				});
+			  }
+
+			  function nodeHeight(sideLinks) {
+				var spacing = Math.max(sideLinks.length - 1, 0) * linkSpacing,
+					scaledValueSum = d3.sum(sideLinks, value) * yScaleFactor;
+				return scaledValueSum + spacing;
+			  }
+
+			  // Compute the value of each node by summing the associated links.
+			  // Compute the number of spaces between the links
+			  // Compute the number of source links for later decrementing
+			  function computeNodeValues() {
+				nodes.forEach(function (node) {
+				  node.value = Math.max(
+					d3.sum(node.leftLinks, value),
+					d3.sum(node.rightLinks, value)
+				  );
+				  node.inputs = d3.sum(visible(node.targetLinks), value);
+				  node.outputs = d3.sum(visible(node.sourceLinks), value);
+				  node.height = Math.max(nodeHeight(visible(node.leftLinks)), nodeHeight(visible(node.rightLinks)));
+				  node.linkSpaceCount = Math.max(Math.max(node.leftLinks.length, node.rightLinks.length) - 1, 0);
+				});
+			  }
+
+			  function computeConnectedNodes() {
+				var sourceNode, targetNode;
+				links.forEach(function (link) {
+				  sourceNode = link.source;
+				  targetNode = link.target;
+				  if (sourceNode.connectedNodes.indexOf(targetNode) < 0) {
+					sourceNode.connectedNodes.push(targetNode);
+				  }
+				  if (targetNode.connectedNodes.indexOf(sourceNode) < 0) {
+					targetNode.connectedNodes.push(sourceNode);
+				  }
+				});
+			  }
+
+			  function sourceAndTargetNodesWithSameX() {
+				var nodeArray = [];
+				links.filter(function (link) {
+				  return link.target.x === link.source.x;
+				}).forEach(function (link) {
+				  if (nodeArray.indexOf(link.target) < 0) {
+					nodeArray.push(link.target);
+				  }
+				});
+				return nodeArray;
+			  }
+
+			  function compressInXDirection() {
+				var connectedNodesXPositions,
+					nodesByXPosition = d3.nest()
+					  .key(function (node) { return node.x; })
+					  .sortKeys(d3.ascending)
+					  .entries(nodes)
+					  .map(function (object) { return object.values; });
+
+				nodesByXPosition.forEach(function (xnodes) {
+				  xnodes.forEach(function (node) {
+					connectedNodesXPositions = node.connectedNodes.map(function (connectedNode) {
+					  return connectedNode.x;
+					});
+					// keep decrementing the x value of the node
+					// unless it would have the same x value as one of its source or target nodes
+					// or node.x is already 0
+					while (node.x > 0 && connectedNodesXPositions.indexOf(node.x - 1) < 0) {
+					  node.x -= 1;
+					}
+				  });
+				});
+			  }
+
+			  function scaleNodeXPositions() {
+				var minX = d3.min(nodes, function (node) { return node.x; }),
+					maxX = d3.max(nodes, function (node) { return node.x; }) - minX;
+				xScaleFactor = (size[0] - nodeWidth) / maxX;
+
+				nodes.forEach(function (node) {
+				  node.x *= xScaleFactor;
+				});
+			  }
+
+			  function computeNodeXPositions() {
+				var remainingNodes = nodes,
+					nextNodes,
+					x = 0,
+					addToNextNodes = function (link) {
+					  if (nextNodes.indexOf(link.target) < 0 && link.target.x === this.x) {
+						nextNodes.push(link.target);
+					  }
+					},
+					setValues = function (node) {
+					  node.x = x;
+					  node.width = nodeWidth;
+					  node.sourceLinks.forEach(addToNextNodes, node);
+					};
+
+				while (remainingNodes.length) {
+				  nextNodes = [];
+				  remainingNodes.forEach(setValues);
+				  if (nextNodes.length) {
+					remainingNodes = nextNodes;
+				  } else {
+					remainingNodes = sourceAndTargetNodesWithSameX();
+				  }
+				  x += 1;
+				}
+
+				compressInXDirection();
+				scaleNodeXPositions();
+			  }
+
+			  function computeLeftAndRightLinks() {
+				var source, target;
+				nodes.forEach(function (node) {
+				  node.rightLinks = [];
+				  node.leftLinks = [];
+				});
+				links.forEach(function (link) {
+				  source = link.source;
+				  target = link.target;
+				  if (source.x < target.x) {
+					source.rightLinks.push(link);
+					target.leftLinks.push(link);
+					link.direction = 1;
+				  } else {
+					source.leftLinks.push(link);
+					target.rightLinks.push(link);
+					link.direction = -1;
+				  }
+				});
+			  }
+
+			  function adjustTop(adjustment) {
+				nodes.forEach(function (node) {
+				  node.y -= adjustment;
+				});
+			  }
+
+			  function computeNodeYPositions(iterations) {
+				var minY,
+					alpha,
+					nodesByXPosition = d3.nest()
+					  .key(function (node) { return node.x; })
+					  .sortKeys(d3.ascending)
+					  .entries(nodes)
+					  .map(function (object) { return object.values; });
+
+				function calculateYScaleFactor() {
+				  var linkSpacesCount, nodeValueSum, discretionaryY;
+				  yScaleFactor = d3.min(nodesByXPosition, function (nodes) {
+					linkSpacesCount = d3.sum(nodes, function (node) {
+					  return node.linkSpaceCount;
+					});
+					nodeValueSum = d3.sum(nodes, function (node) {
+					  return node.value;
+					});
+					discretionaryY = (size[1]
+									- (nodes.length - 1) * nodeSpacing
+									- linkSpacesCount * linkSpacing);
+
+					return  discretionaryY / nodeValueSum;
+				  });
+
+				  // Fat links are those with lengths less than about 4 times their heights
+				  // Fat links don't bend well
+				  // Test that yScaleFactor is not so big that it causes "fat" links; adjust yScaleFactor accordingly
+				  links.forEach(function (link) {
+					var linkLength = Math.abs(link.source.x - link.target.x),
+						linkHeight = link.value * yScaleFactor;
+					if (linkLength / linkHeight < 4) {
+					  yScaleFactor = 0.25 * linkLength / link.value;
+					}
+				  });
+				}
+
+				function initializeNodeYPosition() {
+				  nodesByXPosition.forEach(function (nodes) {
+					nodes.forEach(function (node, i) {
+					  node.y = i;
+					  node.heightAllowance = node.value * yScaleFactor + linkSpacing * node.linkSpaceCount;
+					});
+				  });
+				}
+
+				function calculateLinkThickness() {
+				  links.forEach(function (link) {
+					link.thickness = link.value * yScaleFactor;
+				  });
+				}
+
+				function relaxLeftToRight(alpha) {
+				  function weightedSource(link) {
+					return center(link.source) * link.value;
+				  }
+
+				  nodesByXPosition.forEach(function (nodes) {
+					nodes.forEach(function (node) {
+					  if (node.rightLinks.length) {
+						var y = d3.sum(node.rightLinks, weightedSource) / d3.sum(node.rightLinks, value);
+						node.y += (y - center(node)) * alpha;
+					  }
+					});
+				  });
+				}
+
+				function relaxRightToLeft(alpha) {
+				  function weightedTarget(link) {
+					return center(link.target) * link.value;
+				  }
+
+				  nodesByXPosition.slice().reverse().forEach(function (nodes) {
+					nodes.forEach(function (node) {
+					  if (node.leftLinks.length) {
+						var y = d3.sum(node.leftLinks, weightedTarget) / d3.sum(node.leftLinks, value);
+						node.y += (y - center(node)) * alpha;
+					  }
+					});
+				  });
+				}
+
+				function resolveCollisions() {
+				  function ascendingYPosition(a, b) {
+					return a.y - b.y;
+				  }
+
+				  nodesByXPosition.forEach(function (nodes) {
+					var node,
+						dy,
+						y0 = 0,
+						n = nodes.length,
+						i;
+
+					nodes.sort(ascendingYPosition);
+
+					// Push any overlapping nodes down.
+					for (i = 0; i < n; ++i) {
+					  node = nodes[i];
+					  dy = y0 - node.y;
+					  if (dy > 0) {
+						node.y += dy;
+					  }
+					  y0 = node.y + node.heightAllowance + nodeSpacing;
+					}
+
+					// If the bottommost node goes outside the bounds, push it back up.
+					dy = y0 - nodeSpacing - size[1];
+					if (dy > 0) {
+					  node.y -= dy;
+					  y0 = node.y;
+
+					  // Push any overlapping nodes back up.
+					  for (i = n - 2; i >= 0; --i) {
+						node = nodes[i];
+						dy = node.y + node.heightAllowance + nodeSpacing - y0;
+						if (dy > 0) {
+						  node.y -= dy;
+						}
+						y0 = node.y;
+					  }
+					}
+				  });
+				}
+
+				calculateYScaleFactor();
+				initializeNodeYPosition();
+				calculateLinkThickness();
+				resolveCollisions();
+
+				for (alpha = 1; iterations > 0; --iterations) {
+				  alpha *= 0.99;
+				  relaxRightToLeft(alpha);
+				  resolveCollisions();
+				  relaxLeftToRight(alpha);
+				  resolveCollisions();
+				}
+
+				minY = d3.min(nodes, function (node) { return node.y; });
+				adjustTop(minY);
+			  }
+
+			  function computeLinkYPositions() {
+
+				function ascendingLeftNodeYPosition(a, b) {
+				  var aLeftNode = (a.direction > 0) ? a.source : a.target,
+					  bLeftNode = (b.direction > 0) ? b.source : b.target;
+				  return aLeftNode.y - bLeftNode.y;
+				}
+
+				function ascendingRightNodeYPosition(a, b) {
+				  var aRightNode = (a.direction > 0) ? a.target : a.source,
+					  bRightNode = (b.direction > 0) ? b.target : b.source;
+				  return aRightNode.y - bRightNode.y;
+				}
+
+				nodes.forEach(function (node) {
+				  node.rightLinks.sort(ascendingRightNodeYPosition);
+				  node.leftLinks.sort(ascendingLeftNodeYPosition);
+				});
+
+				nodes.forEach(function (node) {
+				  var rightY = 0, leftY = 0;
+
+				  node.rightLinks.forEach(function (link) {
+					if (link.direction > 0) {
+					  link.sourceY = rightY;
+					  if (link.target.state === "collapsed") {
+						rightY += link.thickness + linkSpacing;
+					  }
+					}
+					else {
+					  link.targetY = rightY;
+					  if (link.source.state === "collapsed") {
+						rightY += link.thickness + linkSpacing;
+					  }
+					}
+				  });
+
+				  node.leftLinks.forEach(function (link) {
+					if (link.direction < 0) {
+					  link.sourceY = leftY;
+					  if (link.target.state === "collapsed") {
+						leftY += link.thickness + linkSpacing;
+					  }
+					}
+					else {
+					  link.targetY = leftY;
+					  if (link.source.state === "collapsed") {
+						leftY += link.thickness + linkSpacing;
+					  }
+					}
+				  });
+
+				});
+			  }
+
+
+			  biHiSankey.arrowheadScaleFactor = function (_) {
+				if (!arguments.length) { return arrowheadScaleFactor; }
+				arrowheadScaleFactor = +_;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.collapsedNodes = function () {
+				return nodes.filter(function (node) { return node.state === "collapsed"; });
+			  };
+
+			  biHiSankey.connected = function (nodeA, nodeB) {
+				return nodeA.connectedNodes.indexOf(nodeB) >= 0;
+			  };
+
+			  biHiSankey.expandedNodes = function () {
+				return nodes.filter(function (node) { return node.state === "expanded"; });
+			  };
+
+			  biHiSankey.layout = function (iterations) {
+				computeNodeXPositions();
+				computeLeftAndRightLinks();
+				computeNodeValues();
+				computeNodeYPositions(iterations);
+				computeNodeValues();
+				computeLinkYPositions();
+				return biHiSankey;
+			  };
+
+			  biHiSankey.link = function () {
+				var curvature = defaultLinkCurvature;
+
+				function leftToRightLink(link) {
+				  var arrowHeadLength = link.thickness * arrowheadScaleFactor,
+					  straightSectionLength = (3 * link.thickness / 4) - arrowHeadLength,
+					  x0 = link.source.x + link.source.width,
+					  x1 = x0 + arrowHeadLength / 2,
+					  x4 = link.target.x - straightSectionLength - arrowHeadLength,
+					  xi = d3.interpolateNumber(x0, x4),
+					  x2 = xi(curvature),
+					  x3 = xi(1 - curvature),
+					  y0 = link.source.y + link.sourceY + link.thickness / 2,
+					  y1 = link.target.y + link.targetY + link.thickness / 2;
+				  return "M" + x0 + "," + y0
+					   + "L" + x1 + "," + y0
+					   + "C" + x2 + "," + y0
+					   + " " + x3 + "," + y1
+					   + " " + x4 + "," + y1
+					   + "L" + (x4 + straightSectionLength) + "," + y1;
+				}
+
+				function rightToLeftLink(link) {
+				  var arrowHeadLength = link.thickness * arrowheadScaleFactor,
+					  straightSectionLength = link.thickness / 4,
+					  x0 = link.source.x,
+					  x1 = x0 - arrowHeadLength / 2,
+					  x4 = link.target.x + link.target.width + straightSectionLength + arrowHeadLength,
+					  xi = d3.interpolateNumber(x0, x4),
+					  x2 = xi(curvature),
+					  x3 = xi(1 - curvature),
+					  y0 = link.source.y + link.sourceY + link.thickness / 2,
+					  y1 = link.target.y + link.targetY + link.thickness / 2;
+				  return "M" + x0 + "," + y0
+					   + "L" + x1 + "," + y0
+					   + "C" + x2 + "," + y0
+					   + " " + x3 + "," + y1
+					   + " " + x4 + "," + y1
+					   + "L" + (x4 - straightSectionLength) + "," + y1;
+				}
+
+				function link(d) {
+				  if (d.source.x < d.target.x) {
+					return leftToRightLink(d);
+				  }
+				  return rightToLeftLink(d);
+				}
+
+				link.curvature = function (_) {
+				  if (!arguments.length) { return curvature; }
+				  curvature = +_;
+				  return link;
+				};
+
+				return link;
+			  };
+
+			  biHiSankey.links = function (_) {
+				if (!arguments.length) { return links; }
+				links = _.filter(function (link) {
+				  return link.source !== link.target; // filter out links that go nowhere
+				});
+				return biHiSankey;
+			  };
+
+			  biHiSankey.linkSpacing = function (_) {
+				if (!arguments.length) { return linkSpacing; }
+				linkSpacing = +_;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.nodes = function (_) {
+				if (!arguments.length) { return nodes; }
+				nodes = _;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.nodeWidth = function (_) {
+				if (!arguments.length) { return nodeWidth; }
+				nodeWidth = +_;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.nodeSpacing = function (_) {
+				if (!arguments.length) { return nodeSpacing; }
+				nodeSpacing = +_;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.relayout = function () {
+				computeLeftAndRightLinks();
+				computeNodeValues();
+				computeLinkYPositions();
+				return biHiSankey;
+			  };
+
+			  biHiSankey.size = function (_) {
+				if (!arguments.length) { return size; }
+				size = _;
+				return biHiSankey;
+			  };
+
+			  biHiSankey.visibleLinks = function () {
+				return visible(links);
+			  };
+
+			  biHiSankey.initializeNodes = function (callback) {
+				initializeNodeMap();
+				computeNodeHierarchy();
+				computeNodeLinks();
+				computeAncestorLinks();
+				mergeLinks();
+				computeConnectedNodes();
+				nodes.forEach(callback);
+				return biHiSankey;
+			  };
+
+			  return biHiSankey;
+			};
+
+
+			'use strict';
+
+			var sankeyDiagramDiv, svg, tooltip, biHiSankey, path, defs, colorScale, isTransitioning;
+
+			var OPACITY = {
+				NODE_DEFAULT: 0.9,
+				NODE_FADED: 0.1,
+				NODE_HIGHLIGHT: 0.8,
+				LINK_DEFAULT: 0.6,
+				LINK_FADED: 0.05,
+				LINK_HIGHLIGHT: 0.9
+			  },
+			  LINK_COLOR = "#b3b3b3",
+			  INFLOW_COLOR = "#CC0000",
+			  OUTFLOW_COLOR = "#99CC00",
+			  NODE_WIDTH = 36,
+			  COLLAPSER = {
+				RADIUS: NODE_WIDTH / 2,
+				SPACING: 2
+			  },
+			  OUTER_MARGIN = 10,
+			  MARGIN = {
+				TOP: 2 * (COLLAPSER.RADIUS + OUTER_MARGIN),
+				RIGHT: OUTER_MARGIN,
+				BOTTOM: OUTER_MARGIN,
+				LEFT: OUTER_MARGIN
+			  },
+			  TRANSITION_DURATION = 400,
+			  HEIGHT = 2000 - MARGIN.TOP - MARGIN.BOTTOM,
+			  WIDTH = 960 - MARGIN.LEFT - MARGIN.RIGHT,
+			  LAYOUT_INTERATIONS = 32,
+			  REFRESH_INTERVAL = 7000;
+
+			var formatNumber = function (d) {
+			  var numberFormat = d3.format(",.0f"); // zero decimal places
+			  return  numberFormat(d) + " connections";
+			},
+
+			formatFlow = function (d) {
+			  var flowFormat = d3.format(",.0f"); // zero decimal places with sign
+			  return flowFormat(Math.abs(d));
+			},
+
+			// Used when temporarily disabling user interractions to allow animations to complete
+			disableUserInterractions = function (time) {
+			  isTransitioning = true;
+			  setTimeout(function(){
+				isTransitioning = false;
+			  }, time);
+			},
+
+			hideTooltip = function () {
+			  return tooltip.transition()
+				.duration(TRANSITION_DURATION)
+				.style("opacity", 0);
+			},
+
+			showTooltip = function () {
+			  return tooltip
+				.style("left", d3.event.pageX + "px")
+				.style("top", d3.event.pageY + 15 + "px")
+				.transition()
+				  .duration(TRANSITION_DURATION)
+				  .style("opacity", 1);
+			};
+
+			colorScale = d3.scale.category10(),
+
+			sankeyDiagramDiv =  d3.select("body").append("div").attr("class","sankeyDiagramDiv")
+			svg = sankeyDiagramDiv.append("svg")
+					.attr("width", WIDTH + MARGIN.LEFT + MARGIN.RIGHT)
+					.attr("height", HEIGHT + MARGIN.TOP + MARGIN.BOTTOM)
+				  .append("g")
+					.attr("transform", "translate(" + MARGIN.LEFT + "," + MARGIN.TOP + ")");
+
+			svg.append("g").attr("id", "links");
+			svg.append("g").attr("id", "nodes");
+			svg.append("g").attr("id", "collapsers");
+
+			tooltip = d3.select(".sankeyDiagramDiv").append("div").attr("id", "tooltip");
+
+			tooltip.style("opacity", 0)
+				.append("p")
+				  .attr("class", "value");
+
+			biHiSankey = d3.biHiSankey();
+
+			// Set the biHiSankey diagram properties
+			biHiSankey
+			  .nodeWidth(NODE_WIDTH)
+			  .nodeSpacing(10)
+			  .linkSpacing(4)
+			  .arrowheadScaleFactor(0.5) // Specifies that 0.5 of the link's stroke WIDTH should be allowed for the marker at the end of the link.
+			  .size([WIDTH, HEIGHT]);
+
+			path = biHiSankey.link().curvature(0.45);
+
+			defs = svg.append("defs");
+
+			defs.append("marker")
+			  .style("fill", LINK_COLOR)
+			  .attr("id", "arrowHead")
+			  .attr("viewBox", "0 0 6 10")
+			  .attr("refX", "1")
+			  .attr("refY", "5")
+			  .attr("markerUnits", "strokeWidth")
+			  .attr("markerWidth", "1")
+			  .attr("markerHeight", "1")
+			  .attr("orient", "auto")
+			  .append("path")
+				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+			defs.append("marker")
+			  .style("fill", OUTFLOW_COLOR)
+			  .attr("id", "arrowHeadInflow")
+			  .attr("viewBox", "0 0 6 10")
+			  .attr("refX", "1")
+			  .attr("refY", "5")
+			  .attr("markerUnits", "strokeWidth")
+			  .attr("markerWidth", "1")
+			  .attr("markerHeight", "1")
+			  .attr("orient", "auto")
+			  .append("path")
+				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+			defs.append("marker")
+			  .style("fill", INFLOW_COLOR)
+			  .attr("id", "arrowHeadOutlow")
+			  .attr("viewBox", "0 0 6 10")
+			  .attr("refX", "1")
+			  .attr("refY", "5")
+			  .attr("markerUnits", "strokeWidth")
+			  .attr("markerWidth", "1")
+			  .attr("markerHeight", "1")
+			  .attr("orient", "auto")
+			  .append("path")
+				.attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+			function update() {
+			  var link, linkEnter, node, nodeEnter, collapser, collapserEnter;
+
+			  function dragmove(node) {
+				node.x = Math.max(0, Math.min(WIDTH - node.width, d3.event.x));
+				node.y = Math.max(0, Math.min(HEIGHT - node.height, d3.event.y));
+				d3.select(this)
+					.attr("transform", "translate(" + node.x + "," + node.y + ")")
+					.style("cursor", "grabbing")
+				biHiSankey.relayout();
+				svg.selectAll(".sankeyNode").selectAll("rect").attr("height", function (d) { return d.height; });
+				link.attr("d", path);
+			  }
+
+			  function containChildren(node) {
+				node.children.forEach(function (child) {
+				  child.state = "contained";
+				  child.parent = this;
+				  child._parent = null;
+				  containChildren(child);
+				}, node);
+			  }
+
+			  function expand(node) {
+				node.state = "expanded";
+				node.children.forEach(function (child) {
+				  child.state = "collapsed";
+				  child._parent = this;
+				  child.parent = null;
+				  containChildren(child);
+				}, node);
+			  }
+
+			  function collapse(node) {
+				node.state = "collapsed";
+				containChildren(node);
+			  }
+
+			  function restoreLinksAndNodes() {
+				link
+				  .style("stroke", LINK_COLOR)
+				  .style("marker-end", function () { return 'url(#arrowHead)'; })
+				  .transition()
+					.duration(TRANSITION_DURATION)
+					.style("opacity", OPACITY.LINK_DEFAULT);
+				
+
+				node
+				  .selectAll("rect")
+					.style("fill", function (d) {
+					  d.color = colorScale(d.name.replace(/ .*/, ""));
+					  return d.color;
+					})
+					.style("stroke", function (d) {
+					  return d3.rgb(colorScale(d.name.replace(/ .*/, ""))).darker(0.1);
+					})
+					.style("fill-opacity", OPACITY.NODE_DEFAULT);
+
+				node.filter(function (n) { return n.state === "collapsed"; })
+				  .transition()
+					.duration(TRANSITION_DURATION)
+					.style("opacity", OPACITY.NODE_DEFAULT);
+			  }
+
+			  function showHideChildren(node) {
+				disableUserInterractions(2 * TRANSITION_DURATION);
+				hideTooltip();
+				if (node.state === "collapsed") { expand(node); }
+				else { collapse(node); }
+
+				biHiSankey.relayout();
+				update();
+				link.attr("d", path);
+				restoreLinksAndNodes();
+			  }
+
+			  function highlightConnected(g) {
+				link.filter(function (d) { return d.source === g; })
+				  .style("marker-end", function () { return 'url(#arrowHeadInflow)'; })
+				  .style("stroke", OUTFLOW_COLOR)
+				  .style("opacity", OPACITY.LINK_DEFAULT);
+
+				link.filter(function (d) { return d.target === g; })
+				  .style("marker-end", function () { return 'url(#arrowHeadOutlow)'; })
+				  .style("stroke", INFLOW_COLOR)
+				  .style("opacity", OPACITY.LINK_DEFAULT);
+				  
+				link.forEach(function (aLink) {
+				  aLink.moveToFront;
+				});
+			  }
+
+			  function fadeUnconnected(g) {
+				link.filter(function (d) { return d.source !== g && d.target !== g; })
+				  .style("marker-end", function () { return 'url(#arrowHead)'; })
+				  .transition()
+					.duration(TRANSITION_DURATION)
+					.style("opacity", OPACITY.LINK_FADED);
+
+				node.filter(function (d) {
+				  return (d.name === g.name) ? false : !biHiSankey.connected(d, g);
+				}).transition()
+				  .duration(TRANSITION_DURATION)
+				  .style("opacity", OPACITY.NODE_FADED);
+			  }
+
+			  link = svg.select("#links").selectAll("path.link")
+				.data(biHiSankey.visibleLinks(), function (d) { return d.id; });
+
+			  link.transition()
+				.duration(TRANSITION_DURATION)
+				.style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
+				.attr("d", path)
+				.style("opacity", OPACITY.LINK_DEFAULT);
+
+
+			  link.exit().remove();
+
+
+			  linkEnter = link.enter().append("path")
+				.attr("class", "link")
+				.style("fill", "none");
+
+			  linkEnter.on('mouseenter', function (d) {
+				if (!isTransitioning) {
+				  showTooltip().select(".value").text(function () {
+					if (d.direction > 0) {
+					  return d.source.name + " → " + d.target.name + "\n" + formatNumber(d.value);
+					}
+					return d.target.name + " ← " + d.source.name + "\n" + formatNumber(d.value);
+				  });
+
+				  d3.select(this)
+					.style("stroke", LINK_COLOR)
+					.transition()
+					  .duration(TRANSITION_DURATION / 2)
+					  .style("opacity", OPACITY.LINK_HIGHLIGHT);
+				}
+			  });
+
+			  linkEnter.on('mouseleave', function () {
+				if (!isTransitioning) {
+				  hideTooltip();
+
+				  d3.select(this)
+					.style("stroke", LINK_COLOR)
+					.transition()
+					  .duration(TRANSITION_DURATION / 2)
+					  .style("opacity", OPACITY.LINK_DEFAULT);
+				}
+			  });
+			  
+			  
+				function showLinkTree(aLink,aVarCategory)
+				{
+					var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name
+					var theSchema = currentGraph.variableSchemes[aVarCategory];
+					createTreeLayout(name_tmp,theSchema,aLink.__data__.name,link);
+				}
+				
+				function showEdgeTable(aLink)
+				{						
+					var edgeTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","edgeTableDiv")
+						.style('left', (d3.event.pageX - 2) + 'px')
+						.style('top', (d3.event.pageY - 2) + 'px')
+						.style("position", "absolute")
+						.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+					var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+					
+					//Drag Function for edge table
+					var xPos_init = d3.event.pageX - 2;
+					var yPos_init = d3.event.pageY - 2;
+					var xOffset_tmp;
+					var yOffset_tmp;
+					var drag = d3.behavior.drag()
+						.on("dragstart", dragstarted)
+						.on("drag", dragged)
+						.on("dragend", dragended);
+					function dragstarted() {
+					  d3.select(this).style("cursor", "grabbing")		
+					  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+					  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+					}
+					function dragged() {
+						 d3.select(this)
+							.style("cursor", "grabbing")		
+							.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+							.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+					}
+					function dragended() {
+					  d3.select(this).style("cursor", "grab")	
+					  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+					  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+					}
+					edgeTableDiv.call(drag);
+					
+					var headLine = "Edge Information (" + aLink.from + " - " + aLink.to + ")";
+
+					var tabRemoveSVG = edgeTableGroup.append("svg")
+						.attr("width",String(headLine.length*12+"pt"))
+						.attr("height",26)
+					tabRemoveSVG.append("rect")
+						.attr("width", "100%")
+						.attr("height", "100%")
+						.attr("fill", "white");
+					var tabRemoveSymbol = tabRemoveSVG.append("g");
+					tabRemoveSymbol = tabRemoveSymbol
+						.attr("class", "tabRemoveSymbol")
+						.attr("transform", "translate(26,0)")
+					var circle = tabRemoveSymbol.append("circle")
+						.classed("remCircle",true)
+					var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+					var cx = -20;
+					var cy = 12;
+					circle = circle
+						.attr("cx", cx+5)
+						.attr("cy", cy)
+						.attr("r", 10)
+					minus = minus
+						.attr("x1", cx)
+						.attr("y1", cy)
+						.attr("x2", cx+10)
+						.attr("y2", cy)
+						
+					tabRemoveSVG.append("text").attr("class","tabRemoveText")
+						.attr("transform", "translate(26,20)")
+						.attr("fill", "black")
+						.style("font-family", "Arial")
+						.style("font-size", "16pt")
+						.style("font-weight", "bold")
+						.text(headLine);
+					
+					tabRemoveSymbol
+						.on("mouseover", function(){
+							d3.select(this).style("cursor", "pointer")
+							circle.style("fill", "red").style("fill-opacity", .8);
+							})
+						.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+					tabRemoveSymbol.on("mousedown", function(d)
+					{
+						edgeTableDiv.remove();
+					})
+								
+					var anEdgeNameSplit = aLink.name.split(',')
+					var numberOfconnections = anEdgeNameSplit.length;
+					var theLeafNodes = [];
+					var dimension=0;
+					var nullDim=false;
+					var undefinedLeafs;
+					var treeData = jQuery.extend(true, {}, currentGraph.variableSchemes[varCategories[0].name]);
+					var pipeData = aLink.name;
+					getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+					var undefLeafsNumber=0;
+					var defLeafsNumber=0;
+					for (var k=0;k<theLeafNodes.length;k++)
+					{
+						if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+						else{nullDim=true}
+						if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+						{
+							if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+							else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+							undefLeafsNumber ++;
+						}
+						else
+						{
+							defLeafsNumber++;
+						}
+					}		
+					//Render data for table
+					var data = [];
+					data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+					data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+					data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+					if (undefinedLeafs)
+					{
+						data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+					}
+					var table = edgeTableGroup.append('table');
+					tabulate(table,data,['name', 'value']); // 2 column table
+					if (undefinedLeafs)
+					{
+						var text_tmp = "Show unreferenced connections as tree"
+						var undefLeafTreeSVG = edgeTableGroup.append("svg")
+							.attr("transform", "translate(0,20)")
+							.attr("width",String(text_tmp.length*9.5+"pt"))
+							.attr("height",50)
+						undefLeafTreeSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var expandSymbol = undefLeafTreeSVG.append("g")
+							.attr("class", "newExpandSymbol")
+							.attr("transform", "translate(38,12)");
+						var expandRect = expandSymbol.append("rect")
+							.attr("x",-28)
+							.attr("height", 50)
+							.attr("fill", "#555555")
+							.attr("stroke", "none")
+							.attr("stroke-width", 2)
+							.attr("fill-opacity", 1)
+						var expCircle = expandSymbol.append("circle")
+							.attr("cx", -26)
+							.attr("cy", 0);
+						var expLine1 = expandSymbol.append("line");
+						var expLine2 = expandSymbol.append("line");
+						drawExpandSymbol(expCircle,expLine1,expLine2);
+							expCircle = expCircle.attr("fill", "white");
+						expandSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")			
+								expCircle.style("fill", "#99CC00").style("fill-opacity", .8);
+							})
+							.on("mouseout", function(){
+								expCircle.style("fill", "#99CC00").style("fill-opacity", .6);
+							})
+						undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(text_tmp);
+						expandSymbol.on("mousedown", function(){
+							var name_tmp = "Unref. connections tree view: " + aLink.source.name +  "  →  " + aLink.target.name + "; Categorization: schema"
+							createTreeLayout(name_tmp,treeData,aLink.name,link);
+						})
+					}
+					
+				}
+				
+				//linkMenu --> functions for right click options
+				var linkChildrenItems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
+											varCategory: varCategories[j].name,
+											onMouseClick: function(elm, data, i) {showLinkTree(elm,data.varCategory)},
+											onMouseOver: function(elm,data,i){}});
+				}
+				var linkMenu = [
+				{
+					title: 'Show edge info',
+					onMouseDown: function(elm, k, i) {
+						showEdgeTable(k)
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: []
+				},
+				{
+					title: 'Show variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: linkChildrenItems
+				}
+				]
+
+				var thisLink = d3.select(this);
+				linkEnter.on('contextmenu', d3.contextMenu(linkMenu))
+
+			  linkEnter.sort(function (a, b) { return b.thickness - a.thickness; })
+				.classed("leftToRight", function (d) {
+				  return d.direction > 0;
+				})
+				.classed("rightToLeft", function (d) {
+				  return d.direction < 0;
+				})
+				.style("marker-end", function () {
+				  return 'url(#arrowHead)';
+				})
+				.style("stroke", LINK_COLOR)
+				.style("opacity", 0)
+				.transition()
+				  .delay(TRANSITION_DURATION)
+				  .duration(TRANSITION_DURATION)
+				  .attr("d", path)
+				  .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
+				  .style("opacity", OPACITY.LINK_DEFAULT);
+
+
+			  node = svg.select("#nodes").selectAll(".sankeyNode")
+				  .data(biHiSankey.collapsedNodes(), function (d) { return d.id; });
+
+
+			  node.transition()
+				.duration(TRANSITION_DURATION)
+				.attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; })
+				.style("opacity", OPACITY.NODE_DEFAULT)
+				.select("rect")
+				  
+				  .style("stroke", function(d) { 
+					  return d3.rgb(d.color).darker(2); })
+				  .style("stroke-WIDTH", "1px")
+				  .attr("height", function (d) { return d.height; })
+				  .attr("width", biHiSankey.nodeWidth());
+
+
+			  node.exit()
+				.transition()
+				  .duration(TRANSITION_DURATION)
+				  .attr("transform", function (d) {
+					var collapsedAncestor, endX, endY;
+					collapsedAncestor = d.ancestors.filter(function (a) {
+					  return a.state === "collapsed";
+					})[0];
+					endX = collapsedAncestor ? collapsedAncestor.x : d.x;
+					endY = collapsedAncestor ? collapsedAncestor.y : d.y;
+					return "translate(" + endX + "," + endY + ")";
+				  })
+				  .remove();
+
+
+			  nodeEnter = node.enter().append("g").attr("class", "sankeyNode");
+
+			  nodeEnter
+				.attr("transform", function (d) {
+				  var startX = d._parent ? d._parent.x : d.x,
+					  startY = d._parent ? d._parent.y : d.y;
+				  return "translate(" + startX + "," + startY + ")";
+				})
+				.style("opacity", 1e-6)
+				.transition()
+				  .duration(TRANSITION_DURATION)
+				  .style("opacity", OPACITY.NODE_DEFAULT)
+				  .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; });
+
+			  nodeEnter.append("text");
+			  nodeEnter.append("rect")
+				.style("fill", function(d) { 
+					  return d.color = colorScale(d.name.replace(/ .*/, "")); })
+				  .style("stroke", function(d) { 
+					  return d3.rgb(d.color).darker(2); })
+				.style("stroke-WIDTH", "1px")
+				.attr("height", function (d) { return d.height; })
+				.attr("width", biHiSankey.nodeWidth());
+				
+			  node.append("svg:title").text("Click left to drag, click right to inspect")
+			  node.on("mouseenter", function (g) {
+				if (!isTransitioning) {
+				  restoreLinksAndNodes();
+				  highlightConnected(g);
+				  fadeUnconnected(g);
+
+				  d3.select(this).select("rect")
+					.style("stroke", function (d) {
+					  return d3.rgb(d.color).darker(0.1);
+					})
+					.style("fill-opacity", OPACITY.LINK_DEFAULT);
+
+				  tooltip
+					.style("left", g.x + MARGIN.LEFT + "px")
+					.style("top", d3.event.pageY-40 + "px")
+					.transition()
+					  .duration(TRANSITION_DURATION)
+					  .style("opacity", 1).select(".value")
+					  .text(function () {
+						var additionalInstructions = g.children.length ? "\n(Double click to expand)" : "";
+						return g.name + "\nInputs: " + formatFlow(g.inputs) + "\nOutputs: " + formatFlow(g.outputs);
+					  });
+				}
+			  });
+
+			  node.on("mouseleave", function () {
+				if (!isTransitioning) {
+				  hideTooltip();
+				  restoreLinksAndNodes();
+				}
+			  });
+
+			  node.filter(function (d) { return d.children.length; })
+				.on("dblclick", showHideChildren);
+				
+				
+				//aigner: Right click options for tools
+				//##############################################################################################################################
+				
+				//aigner: Table for competence/tool information
+				//############################################################
+				function showToolTable(aTool)
+					{						
+						var toolTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","toolTableDiv")
+							.style('left', (d3.event.x - 2) + 'px')
+							.style('top', (d3.event.y - 2) + 'px')
+							.style("position", "absolute")
+							.on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+						var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+						
+						//Drag Function for variable table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = d3.behavior.drag()
+							.on("dragstart", dragstarted)
+							.on("drag", dragged)
+							.on("dragend", dragended);
+						function dragstarted() {
+						  d3.select(this).style("cursor", "grabbing")		
+						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+						}
+						function dragged() {
+							 d3.select(this)
+								.style("cursor", "grabbing")		
+								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).style("cursor", "grab")	
+						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+						}
+						toolTableDiv.call(drag);
+						
+						var aToolNameSplit = aTool.name.split(': ')			
+						var headLine;
+						if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+						else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+						var tabRemoveSVG = toolTableGroup.append("svg")
+							.attr("width",800)
+							.attr("height",26)
+						var tabRemoveRect = tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+							.on("mousedown", function(d)
+							{
+								toolTableDiv.remove();
+							})
+						
+					
+						var data = [];
+						// render the table(s)
+						if (aTool.metadata.length==0)
+						{
+							data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+						}
+						function findSubMetaData(aMetaData)
+						{
+							for(var key in aMetaData)
+							{
+								if (typeof aMetaData[key] === 'object')
+								{
+									data.push({ "name" : key, "value" : ''}) ;
+									findSubMetaData(aMetaData[key]);
+								}
+								else
+								{
+									data.push({ "name" : key, "value" : aMetaData[key] })
+								}
+							}
+						}
+						for (var j=0; j < aTool.metadata.length;j++)
+						{
+							var metaData = aTool.metadata[j];
+							findSubMetaData(metaData);						
+						}
+						var table = toolTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+					}
+				//############################################################
+				
+				//aigner: Creation of input/output tree
+				//############################################################
+				function showIOTree(categoryID, categoryDescr, theNode, io)
+				{	
+					var links = d3.selectAll(".link");
+					var array="";
+					var name_tmp = "";
+					links.each(function(theLink)
+					{		
+						if (io=="in")
+						{
+							if (theLink.to == theNode.id)
+							{
+								array = array + ", " + theLink.name;
+							}
+							name_tmp = "Input tree view:" + theNode.id + "; Categorization: " + categoryDescr;
+						}
+						else if (io=="out")
+						{
+							if (theLink.from == theNode.id)
+							{
+								array = array + ", " + theLink.name;
+							}
+							name_tmp = "Output tree view:" + theNode.id + "; Categorization: " + categoryDescr;
+						}
+					})
+					
+					var theSchema = currentGraph.variableSchemes[categoryID];
+					createTreeLayout(name_tmp,theSchema,array,link)
+				}
+				//############################################################
+
+				var inputChildrenitems = [];
+				var outputChildrenitems = [];
+				var inputChildrenitems = [];
+				var outputChildrenitems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+											 varCategory: varCategories[j].name,
+											 description: varCategories[j].description,
+											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"in")},
+											 onMouseOver: function(elm,data,i){}});
+					outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+											 varCategory: varCategories[j].name,
+											 description: varCategories[j].description,
+											 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"out")},
+											 onMouseOver: function(elm,data,i){}});
+				}
+				//menu --> functions for right click options
+				var toolMenu = [
+				{
+					title: 'Show competence info',
+					onMouseDown: function(elm, k, i) {
+						showToolTable(k);
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: []
+				},
+				{
+					title: 'Show input variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: inputChildrenitems
+				},
+				{
+					title: 'Show output variable tree...',
+					onMouseDown: function(elm, k, i) {
+					},
+					onMouseUp: function(elm, k, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: outputChildrenitems
+				}
+				]
+				//##############################################################################################################################
+				
+				node.on('contextmenu', d3.contextMenu(toolMenu));
+				
+			  // allow nodes to be dragged to new positions
+			  node.call(d3.behavior.drag()
+				.origin(function (d) 
+				{ 
+					 d3.select(this).style("cursor", "grabbing")	
+					return d; 
+				})
+				.on("dragstart", function () {
+					d3.select(this).style("cursor", "grabbing")	
+					this.parentNode.appendChild(this); })
+				.on("drag", dragmove));
+
+			  // add in the text for the nodes
+			  node.filter(function (d) { return d.value !== 0; })
+				.select("text")
+				  .attr("x", -6)
+				  .attr("y", function (d) { return d.height / 2; })
+				  .attr("dy", ".35em")
+				  .attr("text-anchor", "end")
+				  .attr("transform", null)
+				  .text(function (d) { return d.name; })
+				.filter(function (d) { return d.x < WIDTH / 2; })
+				  .attr("x", 6 + biHiSankey.nodeWidth())
+				  .attr("text-anchor", "start");
+
+
+			  collapser = svg.select("#collapsers").selectAll(".collapser")
+				.data(biHiSankey.expandedNodes(), function (d) { return d.id; });
+
+
+			  collapserEnter = collapser.enter().append("g").attr("class", "collapser");
+
+			  collapserEnter.append("circle")
+				.attr("r", COLLAPSER.RADIUS)
+				.style("fill", function (d) {
+				  d.color = colorScale(d.name.replace(/ .*/, ""));
+				  return d.color;
+				});
+
+			  collapserEnter
+				.style("opacity", OPACITY.NODE_DEFAULT)
+				.attr("transform", function (d) {
+				  return "translate(" + (d.x + d.width / 2) + "," + (d.y + COLLAPSER.RADIUS) + ")";
+				});
+
+			  collapserEnter.on("dblclick", showHideChildren);
+
+			  collapser.select("circle")
+				.attr("r", COLLAPSER.RADIUS);
+
+			  collapser.transition()
+				.delay(TRANSITION_DURATION)
+				.duration(TRANSITION_DURATION)
+				.attr("transform", function (d, i) {
+				  return "translate("
+					+ (COLLAPSER.RADIUS + i * 2 * (COLLAPSER.RADIUS + COLLAPSER.SPACING))
+					+ ","
+					+ (-COLLAPSER.RADIUS - OUTER_MARGIN)
+					+ ")";
+				});
+
+			  collapser.on("mouseenter", function (g) {
+				if (!isTransitioning) {
+				  showTooltip().select(".value")
+					.text(function () {
+					  return g.name + "\n(Double click to collapse)";
+					});
+
+				  d3.select(this)
+					.style("opacity", OPACITY.NODE_HIGHLIGHT)
+					.select("circle")
+
+				  node.filter(function (d) {
+					return d.ancestors.indexOf(g) >= 0;
+				  }).style("opacity", OPACITY.NODE_HIGHLIGHT)
+					.select("rect")
+				}
+			  });
+
+			  collapser.on("mouseleave", function (g) {
+				if (!isTransitioning) {
+				  hideTooltip();
+				  d3.select(this)
+					.style("opacity", OPACITY.NODE_DEFAULT)
+					.select("circle")
+
+				  node.filter(function (d) {
+					return d.ancestors.indexOf(g) >= 0;
+				  }).style("opacity", OPACITY.NODE_DEFAULT)
+					.select("rect")
+				}
+			  });
+
+			  collapser.exit().remove();
+
+			}
+
+			function prune_schema(parentXPath, objArray, xPathList) 
+			{ 
+				var firstElement = "/"+xPathList.split("/")[1]+"/";
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					var objXPath;
+					
+					//aigner: If object has children append a "/" as xPath separator
+					//else append comma as indicator for last element in the xPath
+					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+					else{objXPath =  parentXPath+objArray[i].name;}
+					var objXPathFromFirst = objXPath.split(firstElement);
+					
+					// console.log("Current node ->")
+					// console.log(firstElement+objXPathFromFirst[1])
+					// console.log(xPathList)
+											
+					var delete_it = true;
+					if(objXPathFromFirst[1]==undefined)
+					{
+						delete_it = false;
+					}
+					else
+					{
+						if (include(xPathList, firstElement+objXPathFromFirst[1]))
+						{
+							delete_it = false;
+						}
+					}
+					if (delete_it==true)
+					{
+						// console.log("delete ->")
+						// console.log( objXPathFromFirst[1])
+						// console.log(xPathList)
+						
+						objArray.splice(i, 1);
+						i--;
+					}
+					else
+					{
+						// console.log("do not delete ->")
+						// console.log(objXPath);
+						if (obj.children)
+						{
+							if (obj.children.length==0)
+							{
+								objArray.splice(i, 1);
+								i--;
+								prune_schema(parentXPath, objArray, xPathList)
+							}
+							else{prune_schema(objXPath, obj.children, xPathList);}
+							
+						}
+					}
+				}
+			}
+			function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+			{ 
+				var firstElement = "/"+xPathList.split("/")[1]+"/";
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					var objXPath;
+					
+					//aigner: If object has children append a "/" as xPath separator
+					//else append comma as indicator for last element in the xPath
+					if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+					else{objXPath =  parentXPath+objArray[i].name;}
+					var objXPathFromFirst = objXPath.split(firstElement);
+					
+					// console.log("Current node ->")
+					// console.log(firstElement+objXPathFromFirst[1])
+					// console.log(xPathList)
+											
+					var delete_it = true;
+					if(objXPathFromFirst[1]==undefined)
+					{
+						delete_it = false;
+					}
+					else
+					{
+						if (include(xPathList, firstElement+objXPathFromFirst[1]))
+						{
+							delete_it = false;
+						}
+					}
+					if (delete_it==true)
+					{
+						// console.log("delete ->")
+						// console.log( objXPathFromFirst[1])
+						// console.log(xPathList)
+						
+						objArray.splice(i, 1);
+						i--;
+					}
+					else
+					{
+						// console.log("do not delete ->")
+						// console.log(objXPath);
+						if (obj.children)
+						{
+							if (obj.children.length==0)
+							{
+								objArray.splice(i, 1);
+								i--;
+								getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+							}
+							else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+						}
+						else 
+						{
+							obj.xPath = objXPath;
+							leafNodes.push(obj);
+						};
+					}
+				}
+			}
+			function clean_tree(objArray)
+			{
+				for (var i = 0; i < objArray.length; ++i) 
+				{
+					var obj = objArray[i];
+					if (obj.children)
+					{
+						if (obj.children.length==0)
+						{
+							objArray.splice(i, 1);
+							i--;
+						}
+						clean_tree(obj.children);
+					}
+				}
+			}
+			function countElements(node, counter) 
+			{
+				counter ++;
+				if (node.children)
+				{
+					if (node.children.length !== 0)
+					{
+						node.children.forEach(function(n)
+						{
+							counter = countElements(n, counter);
+						});
+					}
+				}
+				return counter;
+			}
+			function createTreeLayout(theName,schema,theLinks,theAllLinks)
+			{	
+				var treeData = (JSON.parse(JSON.stringify(schema)));
+					
+				if (theLinks)
+				{
+					prune_schema("/"+treeData.name+"/", treeData.children, theLinks);
+					//aigner: count all descendants of a node
+					var firstEl = theLinks.split("/")[1];
+					if(firstEl != treeData.name)
+					{
+						var cleanOperations = countElements(treeData,0)
+						for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+					}
+				}
+					
+					
+				var width= 1000;
+				var height= 500;
+				var xOffset = 10;
+				var xOffset2 = 100;	
+				
+				// Calculate total nodes, max label length
+				var totalNodes = 0;
+				var maxLabelLength = 0;
+				// variables for drag/drop
+				var selectedNode = null;
+				var draggingNode = null;
+				// Misc. variables
+				var i = 0;
+				var duration = 500;
+				var root;
+				
+
+				// size of the diagram
+				var viewerWidth = width/3;
+				var viewerHeight = height+50;
+
+				var tree = d3.layout.tree()
+					.size([viewerHeight, viewerWidth])
+
+				// define a d3 diagonal projection for use by the node paths later on.
+				var diagonal = d3.svg.diagonal()
+					.projection(function(d) {
+						return [d.y+xOffset, d.x];
+					});
+
+				// A recursive helper function for performing some setup by walking through all nodes
+
+				function visit(parent, visitFn, childrenFn) {
+					if (!parent) return;
+
+					visitFn(parent);
+
+					var children = childrenFn(parent);
+					if (children) {
+						var count = children.length;
+						for (var i = 0; i < count; i++) {
+							visit(children[i], visitFn, childrenFn);
+						}
+					}
+				}
+
+				// Call visit function to establish maxLabelLength
+				visit(treeData, function(d) {
+					totalNodes++;
+					maxLabelLength = Math.max(d.name.length, maxLabelLength);
+				}, function(d) {
+					return d.children && d.children.length > 0 ? d.children : null;
+				});
+				
+				function getMaxLength(data)
+				{
+					var maxLen=0;;
+					for (var i = 0; i < data.length; i++)
+					{
+						maxLen = Math.max(data[i].name.length, maxLen);
+					}
+					for (var i = 0; i < data.length; i++)
+					{
+						data[i].labelLength = maxLen;
+						if (data[i].children)
+						{getMaxLength(data[i].children);}
+						if (data[i]._children)
+						{getMaxLength(data[i]._children);}
+					}
+					
+				}
+				if(treeData._children)
+				{getMaxLength(treeData._children);}
+				if(treeData.children)
+				{getMaxLength(treeData.children);}
+				treeData.labelLength = treeData.name.length;
+
+
+				// Collapse the node and all it's children
+				function collapse(d) {
+				  if(d.children) {
+					d._children = d.children
+					d._children.forEach(collapse)
+					d.children = null
+				  }
+				}
+				// Collapse the node and all it's children
+				function expand(d) {
+				  if(d._children) {
+					d.children = d._children
+					d.children.forEach(expand)
+					d._children = null
+				  }
+				}
+				// Toggle children on click.
+				function click(d) 
+				{
+					if (d.children) {
+						d._children = d.children;
+						d.children = null;
+					} else 
+					{
+						d.children = d._children;
+						d._children = null;
+					}
+					update(d,theAllLinks);
+				}
+				// Collapse/expand entire tree on double-click
+				function dblclick(d) 
+				{
+					if(d.children) 
+					{
+						collapse(d);
+					}
+					else if(d._children)
+					{
+						expand(d);
+					}
+					update(d,theAllLinks);
+				}	
+
+				
+				//aigner: Here the tree layout is created
+				var treeLayoutdiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","treeDiv_"+theName)
+										.style("left",(d3.event.pageX) + "px")
+										.style("top",(d3.event.pageY - 28) + "px")
+										.style("position", "absolute")
+										.on("mousedown", function(d) {
+											d3.select(this).moveToFront();
+										})
+										
+				var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+				var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
+								.attr("transform", "translate(50,0)");
+				var margin = {top: 20, right: 90, bottom: 20, left: 90},
+							  width = 960 - margin.left - margin.right,
+							  height = 500 - margin.top - margin.bottom;
+
+				// append the svg object to the body of the page
+				// appends a 'group' element to 'svg'
+				// moves the 'group' element to the top left margin
+				var offset_tmp = 60;
+				treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+				treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp)
+						 .on("mouseover",function(){d3.select(this).style("cursor", "grab")})
+				treeGroup = treeGroup
+					.attr("width", width + margin.right + margin.left)
+					.attr("height", height + margin.top + margin.bottom);
+					
+				
+				//Drag Function for treeLayout
+				var xPos_init = d3.event.pageX - 2;
+				var yPos_init = d3.event.pageY - 2;
+				var xOffset_tmp;
+				var yOffset_tmp;
+				var drag = d3.behavior.drag()
+					.on("dragstart", dragstarted)
+					.on("drag", dragged)
+					.on("dragend", dragended);
+				function dragstarted() {
+				  d3.select(this).style("cursor", "grabbing")		
+				  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+				  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+				}
+				function dragged() {
+					 d3.select(this)
+						.style("cursor", "grabbing")		
+						.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+						.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+				}
+				function dragended() {
+				  d3.select(this).style("cursor", "grab")	
+				  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+				  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+				}
+				treeLayoutdiv.call(drag);
+
+				
+				var frame = treeGroup.append("rect")
+					.attr("class","treeFrame")
+					.attr("stroke-width", 1)
+					.attr("stroke", "white")
+					.attr("fill-opacity", .8);
+				
+				var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
+					
+				
+				var r=8;
+				var cx=r+2;
+				var cy=r+2;
+				var circle = removeSymbol.append("circle")
+					.attr("cx", cx)
+					.attr("cy", cy)
+					.attr("r", r)
+					.style("stroke", "black")
+					.style("stroke-width", 1.5)
+					.style("fill", "red")
+					.style("fill-opacity", .6)
+				var minus = removeSymbol.append("line")
+					.attr("x1", cx+r/2)
+					.attr("y1", cy)
+					.attr("x2", cx-r/2)
+					.attr("y2", cy)
+					.style("stroke", "black")
+					.style("stroke-width", 1.5);
+					
+				removeSymbol
+					.on("mouseover", function(){
+						d3.select(this).style("cursor", "pointer")
+						circle.style("fill", "red").style("fill-opacity", .8);})
+					.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+					.on("mousedown",function()
+					{
+						treeLayoutdiv.remove();
+					})
+					
+
+				
+				// Define the root
+				root = treeData;
+				root.x0 = 0;
+				root.y0 = 0;
+				
+				// Append a group which holds all nodes and which the zoom Listener can act upon.
+				var svgGroup_xOff = root.name.length*10+50
+				var svgGroup = treeGroup.append("g")
+					.attr("class","tree_"+theName)
+					.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+				
+				collapse(root);
+				update(root,theAllLinks);
+				
+				var frametext = treeGroup.append("text")
+					.attr("class", "frametext")
+					.attr("x",30)
+					.attr("y",15)
+					.attr("text-anchor","start")
+					.attr("font-family","Arial")
+					.attr("font-size","18px")
+					.attr("font-weight","bold")
+					.text(theName)
+				
+				function update(source,allLinks) 
+				{
+					// Compute the new height, function counts total children of root node and sets tree height accordingly.
+					// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
+					// This makes the layout more consistent.
+					var levelWidth = [1];
+					var levelLength = [1];
+					var childCount = function(level, n) {
+
+						if (n.children && n.children.length > 0) {
+							if (levelWidth.length <= level + 1) levelWidth.push(0);
+							
+							levelWidth[level + 1] += n.children.length;
+							n.children.forEach(function(d) {
+								childCount(level + 1, d);
+							});
+						}
+					};
+					childCount(0, root);
+
+					var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+					var newWidth = viewerWidth+300;
+					
+					//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
+					tree = tree.size([newHeight, newWidth]);
+					
+					frame = frame.attr("width",newWidth)
+						.attr("height",newHeight+60)
+						.attr("fill","white");
+						
+					
+					
+					// Compute the new tree layout.
+					var nodes = tree.nodes(root),
+						links = tree.links(nodes);
+						
+						
+					//aigner: count all descendants of a node
+					function countDescendants(node, counter) 
+					{
+						if (node._children)
+						{
+							node._children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else if (node.children)
+						{
+							node.children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else
+						{
+							counter ++;
+						}
+						return counter;
+					}
+					
+					
+					var depths = [];
+					var labelLength = [];
+					nodes.forEach(function(d) 
+					{				
+						//aigner: If node is collapsed show number of ancestors
+						if (d._children)
+						{
+							d._childrenNum = countDescendants(d, 0);
+							d.text = d.name + " (" + d._childrenNum + ")";
+						}
+						else 
+						{
+							d.text = d.name
+						}
+						
+						//aigner: Find maximum labelLength for each level
+						if (!depths.includes(d.depth))
+						{
+							depths.push(d.depth);
+							labelLength.push(d.text.length);
+						}
+						else
+						{
+							if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
+						}
+					});
+					// Set widths between levels based on labelLength of each level.
+					var newWidth=0;	
+					var depth_tmp = 0;			
+					nodes.forEach(function(d) 
+					{
+						if (d.parent)
+						{
+							d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
+						}
+						else{d.y=0}
+						
+						
+						if (newWidth<d.y)
+						{newWidth=d.y;}
+						
+						// console.log("##############")
+						// console.log(d.name)
+						// console.log("x = " + d.x)
+						// console.log("y = " + d.y)
+						// console.log("depth = " + depths.indexOf(d.depth))
+						// console.log("##############")
+					});	
+					
+					
+
+					// console.log(depths)		
+					// console.log(labelLength)		
+					
+					//aigner: Adjust height and width of the frame
+					treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+					treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+					frame = frame.attr("height", newHeight + margin.top + margin.bottom)
+					frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
+
+					
+					
+					
+					
+					function showVariableTable(aVariable)
+					{					
+						var varTableDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
+							.style('left', (d3.event.pageX - 2) + 'px')
+							.style('top', (d3.event.pageY - 2) + 'px')
+							.style("position", "absolute")
+							.on("mouseover",function(){ d3.select(this).style("cursor", "grab")})
+							.on("mousedown", function(d) {
+								d3.select(this).moveToFront();
+							})
+						var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+						
+						//Drag Function for node table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = d3.behavior.drag()
+							.on("dragstart", dragstarted)
+							.on("drag", dragged)
+							.on("dragend", dragended);
+						function dragstarted() {
+						  d3.select(this).style("cursor", "grabbing")		
+						  xOffset_tmp = xPos_init-d3.event.sourceEvent.pageX;
+						  yOffset_tmp = yPos_init-d3.event.sourceEvent.pageY;
+						}
+						function dragged() {
+							 d3.select(this)
+								.style("cursor", "grabbing")		
+								.style("left",(d3.event.sourceEvent.pageX+xOffset_tmp) + "px")
+								.style("top",(d3.event.sourceEvent.pageY+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).style("cursor", "grab")	
+						  xPos_init = d3.event.sourceEvent.pageX+xOffset_tmp;
+						  yPos_init = d3.event.sourceEvent.pageY+yOffset_tmp;
+						}
+						varTableDiv.call(drag);
+						
+						var headLine = "Node Information (" + theName + ")";
+						var tabRemoveSVG = varTableGroup.append("svg")
+							.attr("width",String(headLine.length*9.5+"pt"))
+							.attr("height",26)
+						tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+						tabRemoveSymbol.on("mousedown", function(d)
+						{
+							varTableDiv.remove();
+						})
+						
+						var data = [];
+						// render the table(s)
+						data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
+						
+						function getNodeXPath(strWrapper,aNode) 
+						{
+						  strWrapper.val = "/"+aNode.name+strWrapper.val;
+						  if (!aNode.parent) 
+						  {
+							return strWrapper;
+						  }
+						  else 
+						  {
+							
+							return getNodeXPath(strWrapper, aNode.parent);
+						  }
+						}
+						var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+						data.push({ "name" : "xPath", "value" : xPath_tmp })
+						if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
+						if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
+						if (aVariable.children || aVariable._children)
+						{
+							var childrenNum=0;
+							if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
+							if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
+							data.push({ "name" : "Number of children", "value" : childrenNum })
+						}
+						if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
+						else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+						if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
+						var table = varTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+					}
+					
+					//Highlight function, that shows usage of a node in the XDSM
+					function highlight(data,aText)
+					{
+						aText = "/"+data.name+aText;
+						if (data.parent){highlight(data.parent,aText)}
+						else
+						{
+							var allLinks_tmp = allLinks[0];
+							allLinks_tmp.forEach(function(p) {
+								var firstElement_tmp = p.__data__.name.split("/")[1]
+								var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+								if (include(p.__data__.name,text_fromFirst))
+								{
+									d3.select(p).style("opacity", .8);			
+								}
+								else
+								{
+									d3.select(p).style("opacity", 0);			
+								}
+							});
+						}
+					}
+					
+					//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+					function writeTreeToXML(aNode,anXMLDoc,anXPath)
+					{
+						//Variable "children" 
+						//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+						var children;
+						if (aNode._children){children = aNode._children;}
+						else if (aNode.children){children = aNode.children;}
+						
+						//Get current xml element with its xPath
+						var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+						if (element != null) {element.value = '...';}
+						
+						//If a node has children (collapsed or expanded), loop through them
+						if (children)
+						{
+							for (var i=0; i < children.length;i++)
+							{
+								//Name of the new XML element --> childName
+								var child = children[i];
+								var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+								var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+								var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+								
+								//The children are appended to the xPath --> newXPath
+								var newXPath = anXPath+"/"+cleanChildName[0];
+								
+								//If childName contains a uID, make the uID an attribute
+								if (childName[1])
+								{
+									if (parseInt(childName[1]))
+									{
+										var dummyID = childName[1];
+										newNode.setAttribute("dummyID", dummyID)
+										newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+									}
+									else
+									{
+										var uID = childName[1];
+										newNode.setAttribute("uID", uID)
+										newXPath = newXPath+"[@uID='"+uID+"']";
+									}
+								}
+								if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+								
+								//Append the newNode to the xml structure
+								element.appendChild(newNode);
+								
+								
+								
+								////aigner: Sorting of XML elements according to "uID"
+								// var items = element.children;
+								// var itemsArr = [];
+								// for (var j in items) {
+									// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+										// itemsArr.push(items[j]);
+									// }
+								// }
+								// itemsArr.sort(function(a,b){
+									// if (a.getAttribute("uID") < b.getAttribute("uID"))
+										// return -1;
+									// if (a.getAttribute("uID") > b.getAttribute("uID"))
+										// return 1;
+									// return 0;
+									// });
+
+								// for (j = 0; j < itemsArr.length; ++j) {
+								  // element.appendChild(itemsArr[j]);
+								// }
+								
+								//call function writeTreeToXML recursively for all children
+								writeTreeToXML(child,anXMLDoc,newXPath)
+							}
+						}
+						else
+						{
+							if (aNode.value){element.innerHTML = String(aNode.value);}
+							else{element.innerHTML = " ";}
+						}
+						//return the xml document
+						return anXMLDoc;
+					}
+					
+					function removeAttributeInAllElements(aDocument,attribute)
+					{
+					  var matchingElements = [];
+					  var allElements = aDocument.getElementsByTagName('*');
+					  for (var i = 0, n = allElements.length; i < n; i++)
+					  {
+						if (allElements[i].getAttribute(attribute) !== null)
+						{
+							allElements[i].removeAttribute(attribute);
+						}
+					  }
+					  return matchingElements;
+					}
+					
+					function putAncestorsInXMLString(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						else
+						{
+							strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXMLString(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					
+					function putAncestorsInXPath(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+						}
+						else
+						{
+							strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXPath(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					
+					// Function to download data to a file
+					function download(filename, text) {
+						var element = document.createElement('a');
+						element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+						element.setAttribute('download', filename);
+
+						element.style.display = 'none';
+						document.body.appendChild(element);
+
+						element.click();
+
+						document.body.removeChild(element);
+					}
+					
+					//menu --> functions for right click options
+					var nodeMenu = [
+					{
+						title: 'Show node information',
+						onMouseDown: function(elm, d, i) {
+							showVariableTable(d);
+						},
+						onMouseUp: function(elm, d, i) {},
+						onMouseOver: function(elm, d, i) {},
+						childrenItems: []
+					},
+					{
+						title: 'Show usage of node in diagram',
+						onMouseDown: function(elm, d, i) {
+							d3.selectAll(".treeFrame").attr("fill-opacity", .5);
+							d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
+							var theText="";
+							highlight(d,theText);
+						},
+						onMouseUp: function(elm, d, i) {				
+							d3.selectAll(".link").style("opacity",.6)
+							d3.selectAll(".treeFrame").attr("fill-opacity", .8);
+							d3.selectAll(".nodeText").style("fill-opacity", 1);					
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Copy x-path to clipboard',
+						onMouseDown: function(elm, d, i) {
+							function copyToClipboard(text) 
+							{
+								window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+							}
+							function copyXPathToClipboard(data,aText)
+							{
+								aText = "/"+data.name+aText;
+								if (data.parent){copyXPathToClipboard(data.parent,aText)}
+								else{copyToClipboard(aText);}
+							}
+							var copyText="";
+							copyXPathToClipboard(d,copyText);
+							d3.select('.d3-context-menu').style('display', 'none');
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download full tree as XML-file',
+						onMouseDown: function(elm, d, i) {
+							//Begin xml structure with the first element
+							var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+							var initialXPath = "/"+nodes[0].name;								
+							writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							var xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(theName+'_full.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download tree as XML-file from current node',
+						onMouseDown: function(elm, d, i) {
+							var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+							var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+							writeTreeToXML(d,xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(theName+"_"+d.name+'.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					}
+					]
+					
+					
+					
+					
+
+					// Update the nodes…
+					var treeNode = svgGroup.selectAll("g.treeNode")
+						.data(nodes, function(d) {
+							return d.id || (d.id = ++i);
+						});
+
+					var dblclick_timer = false;
+					// Enter any new nodes at the parent's previous position.
+					var nodeEnter = treeNode.enter().append('g')
+					  .attr('class', 'treeNode')
+					  .attr("transform", function(d) {
+						return "translate(" + source.y0 + "," + source.x0 + ")";
+					})
+					.on('contextmenu', d3.contextMenu(nodeMenu))
+					.on("mousedown", function(d) {
+						if (d3.event.which != 3)
+						{
+							// if double click timer is active, this click is the double click
+							if ( dblclick_timer )
+							{
+								clearTimeout(dblclick_timer)
+								dblclick_timer = false
+								// double click code code comes here
+								//console.log("DOUBLE CLICK")
+								dblclick(d);
+							}
+							// otherwise, what to do after single click (double click has timed out)
+							else dblclick_timer = setTimeout( function(){
+								dblclick_timer = false
+								// single click code code comes here
+								//console.log("SINGLE CLICK")
+								click(d);
+							}, 250)
+						}
+					})
+						
+					nodeEnter.append("circle")
+						.attr('class', 'nodeCircle')
+						.attr("r", 0)
+						.style("fill", function(d) {
+							if (d._children)
+							{
+								if(theName.includes("Input")){return '#ea9999'}
+								else if(theName.includes("Output")){return '#d6ea99'}
+								else {return "lightsteelblue"}
+							}
+							else {return "#fff"}
+						})
+						.style("stroke", function(d) {
+							if(theName.includes("Input")){
+								//console.log(d);
+								return '#CC0000'}
+							else if(theName.includes("Output")){
+								//console.log(d);
+								return '#99CC00'}
+						})
+						.attr("cx", function(d) {return xOffset});
+
+					nodeEnter.append("text")
+						.attr("x", function(d) 
+						{
+								return d.children || d._children ? -10+xOffset : 10+xOffset;
+						})
+						.attr("dy", ".35em")
+						.attr('class', 'nodeText')
+						.attr("text-anchor", function(d) {
+							return d.children || d._children ? "end" : "start";
+						})
+						.text(function(d) {
+							return d.text;
+						})
+						.style("fill-opacity", 0)
+						
+
+					// Update the text to reflect whether node has children or not.
+					treeNode.select('text')
+						.attr("x", function(d) {
+							return d.children || d._children ? -10+xOffset : 10+xOffset;
+						})
+						.attr("text-anchor", function(d) {
+							return d.children || d._children ? "end" : "start";
+						})
+						.text(function(d) {
+							return d.text;
+						});
+
+					// Change the circle fill depending on whether it has children and is collapsed
+					treeNode.select("circle.nodeCircle")
+						.attr("r", 4.5)
+						.style("fill", function(d) {
+							if (d._children)
+							{
+								if (d._children)
+								{
+									if(theName.includes("Input")){return '#ea9999'}
+									else if(theName.includes("Output")){return '#d6ea99'}
+									else {return "lightsteelblue"}
+								}
+								else {return "#fff"}
+							}
+							else{return "#fff";}
+						})					
+								
+					// UPDATE		
+					// Transition nodes to their new position.
+					var nodeUpdate = treeNode.transition()
+						.duration(duration)
+						.attr("transform", function(d) {
+							return "translate(" + d.y + "," + d.x + ")";
+						});
+
+					// Fade the text in
+					nodeUpdate.select("text")
+						.style("fill-opacity", 1);
+					
+					nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
+					
+					// Remove any exiting nodes
+					var nodeExit = treeNode.exit().transition()
+					  .duration(duration)
+					  .attr("transform", function(d) {
+						  return "translate(" + source.y + "," + source.x + ")";
+					  })
+					  .remove();
+
+					// Update the links…
+					var link = svgGroup.selectAll("path.treeLink")
+						.data(links, function(d) {
+							return d.target.id;
+						});
+
+					// Enter any new links at the parent's previous position.
+					link.enter().insert("path", "g")
+						.attr("class", "treeLink")
+						.attr("d", function(d) {
+							var o = {
+								x: source.x0,
+								y: source.y0
+							};
+							return diagonal({
+								source: o,
+								target: o
+							});
+						});
+
+					// Transition links to their new position.
+					link.transition()
+						.duration(duration)
+						.attr("d", diagonal);
+
+					// Transition exiting nodes to the parent's new position.
+					link.exit().transition()
+						.duration(duration)
+						.attr("d", function(d) {
+							var o = {
+								x: source.x,
+								y: source.y
+							};
+							return diagonal({
+								source: o,
+								target: o
+							});
+						})
+						.remove();
+					
+					// Stash the old positions for transition.
+					nodes.forEach(function(d) {						
+						d.x0 = d.x;
+						d.y0 = d.y;
+					});
+				}
+			}
+
+			
+			//aigner: Here the data is read and the sankey diagram is created
+			//#####################################################################//
+			var graphs,	currentGraph, varCategories, entireData;
+			function startSankeyDiagram(data, graphID) 
+			{
+				entireData = data;
+				graphs =  entireData.graphs;
+				for (var i=0;i<graphs.length;i++)
+				{
+					if (graphs[i].id==graphID)
+					{
+						currentGraph = graphs[i]
+					}
+				}
+				varCategories =  entireData.categories;
+				
+				
+				var graph = currentGraph.xdsm;
+				var theNodes = graph.nodes
+				var theLinks = graph.edges
+				theLinks.forEach(function (link) {
+				  link.source = link.from;
+				  link.target = link.to;
+				  link.value = link.name.split(",").length
+				});
+				
+				//################################################################################################//	
+				var headerDiv = sankeyDiagramDiv.append("div").attr("class","panel panel-primary")
+				headerDiv.append("div").attr("class","panel-heading text-center")
+						.append("h3")
+						.attr("class","panel-title")
+						.style("font-family","Arial")
+						.style("font-size","20pt")
+						.text("Sankey Diagram")
+				var name_tmp="";
+				if (currentGraph.name){name_tmp=currentGraph.name}
+				else{name_tmp="Graph " + currentGraph.id}
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph name: " + name_tmp)
+				headerDiv.append("div").attr("class","panel-body")
+					.style("font-family","Arial")
+					.style("font-size","16pt")
+					.text("Graph description: " + currentGraph.description)
+				//################################################################################################//	
+				
+				//aigner: Tree option menu to select which kind of tree view the user wants to see
+				//#####################################################################//
+				function showFullTree(categoryID, categoryDescr)
+				{
+					var name_tmp = "Full data model tree view; Categorization: " + categoryDescr;
+					var emptyArray="";
+					var allLinks = d3.selectAll(".link");
+					var theSchema = currentGraph.variableSchemes[categoryID];
+					createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
+				}
+				
+				var childrenItems = [];
+				for (var j=0; j< varCategories.length; j++)
+				{
+					childrenItems.push({title: 'according to ' + varCategories[j].description,
+								   varCategory: varCategories[j].name,
+								   description: varCategories[j].description,
+								   onMouseClick: function(elm, d, i) {showFullTree(d.varCategory,d.description)},
+								   onMouseOver: function(elm,d,i){}})
+				}
+				var treeOptionMenu = [
+				{
+					title: 'Show variable tree...',
+					onMouseDown: function(elm, d, i) {
+					},
+					onMouseUp: function(elm, d, i) {
+					},
+					onMouseOver: function(elm, d, i) {
+					},
+					childrenItems: childrenItems
+				}
+				]
+				//#####################################################################//
+				
+				
+				//aigner: treeLayout in the bottom
+				//################################################################################################//		
+				//aigner: Data Model Expand Button
+				//##########################################################
+				var dataModelDiv = d3.select(".sankeyDiagramDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
+				var ul = dataModelDiv.append("ul")
+				var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+				dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
+					.attr("align","left")
+					.style("margin-left","6px")
+					.style("margin-right","-10px")
+					.style("margin-top","10px")
+					.style("margin-bottom","0px")
+					.attr("height","20")
+					.attr("width","20")
+				dropdown1.append("a").text("Data Model")
+				var links = dropdown1.append("ul");
+				for (var j=0; j< varCategories.length; j++)
+				{
+					//console.log(varCategories[j])
+					var linkLi = links.append("li");
+					var linkA = linkLi.append("a")
+						.attr("id",j)
+						.text(varCategories[j].description)
+						.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+						.on("click", function()
+						{		
+							showFullTree(varCategories[this.id].name,varCategories[this.id].description)
+						})
+				}
+				//aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
+				dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
+				//##########################################################
+				//################################################################################################//
+				
+				d3.select(".dataModelDiv").moveToBack()
+				headerDiv.moveToBack()
+				d3.select(".newDiv").moveToBack()
+				d3.select(".vispackDiv").moveToBack()
+				
+				biHiSankey
+				  .nodes(theNodes)
+				  .links(theLinks)
+				  .initializeNodes(function (node) {
+					node.state = node.parent ? "contained" : "collapsed";
+				  })
+				  .layout(LAYOUT_INTERATIONS);
+
+				disableUserInterractions(2 * TRANSITION_DURATION);
+				
+				update();
+			};
+			//#####################################################################//
+			startSankeyDiagram(data,graphID);
+			
+			},{"d3":1}]},{},[2]);
+		}
+		</script>
+    </body>
+</html>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/VISTOMS_TreeViewer_datarepl.html b/kadmos/vispack/VISTOMS/VISTOMS_TreeViewer.html
similarity index 98%
rename from kadmos/vispack/VISTOMS_TreeViewer/VISTOMS_TreeViewer_datarepl.html
rename to kadmos/vispack/VISTOMS/VISTOMS_TreeViewer.html
index 54132c068..1423197ca 100644
--- a/kadmos/vispack/VISTOMS_TreeViewer/VISTOMS_TreeViewer_datarepl.html
+++ b/kadmos/vispack/VISTOMS/VISTOMS_TreeViewer.html
@@ -1,20449 +1,20449 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
-<meta name="format-detection" content="telephone=no">
-<meta name="apple-mobile-web-app-capable" content="yes">
-<meta name="apple-mobile-web-app-status-bar-style" content="default">
-<style>
-*!
- * Bootstrap v3.3.7 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
-/*# sourceMappingURL=bootstrap.min.css.map */
-
-a:link {
-	color:#555;
-	text-decoration: underline;
-}
-a:visited {color:#999;}
-
-.wordWrap {
-    word-wrap: break-word;      /* IE 5.5-7 */
-    white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */
-    white-space: pre-wrap;      /* current browsers */
-	width: 800px;
-    margin-top: 16px;
-	color:#555555;
-	margin:20px 10px;
-	font-family:Arial;
-	font-size:12pt;
-}
-
-
-/*
-* XDSMjs
-* Copyright 2016 Rémi Lafage
-*/
-
-/* Component types */
-.xdsm .user {
-visibility: hidden;
-}
-
-.xdsm .coordinator {
-fill: #FFFFFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .optimization {
-fill: #CCCCFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .converger {
-fill: #FFE5CC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .doe {
-fill: #FFFCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .rcganalysis {
-fill: #E5DEB3;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .precouplinganalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .preiteratoranalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .postiteratoranalysis {
-fill: #BCE4FA;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .coupledanalysis {
-fill: #CCFFCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .postcouplinganalysis {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .consistencyconstraintfunction {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .lp_optimization {
-fill: #CCCCFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .analysis {
-fill: #CCFFCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .mdo {
-fill: #FFCCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .function {
-fill: #F2CCD9;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .mda {
-fill: #FFE5CC;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .metamodel {
-fill: #FFFCCC;
-stroke: black;
-stroke-width: 1px;
-}
-
-/* Title */
-.xdsm g.title text {
-display: block;
-font-size: 2em;
-margin-top: 0.67em;
-margin-bottom: 0.67em;
-margin-left: 0;
-margin-right: 0;
-font-family:Arial;
-}
-.xdsm g.title rect {
-fill: none;
-}
-
-
-/* Text Default */
-.xdsm text {
-fill: black;
-stroke: none;
-font-size: 16pt;
-font-family:Arial;
-}
-.xdsm tspan.sub {
-font-size: small;
-font-family:Arial;
-}
-.xdsm tspan.sup {
-font-size: small;
-font-family:Arial;
-}
-
-/* Data */
-.xdsm .dataInter polygon {
-fill: #E5E5E5;
-stroke: black;
-stroke-width: 1px;
-}
-
-.xdsm .dataIO polygon {
-fill: #FFFFFF;
-stroke: black;
-stroke-width: 1px;
-}
-
-/* Dataflow */
-.xdsm g.dataflow {
-fill: none;
-stroke: grey;
-stroke-width: 8px;
-}
-
-/* Workflow */
-.xdsm g.workflow {
-fill: none;
-stroke: black;
-stroke-width: 2px;
-}
-
-/* Tooltip */
-div.tooltip {
-position: absolute;
-text-align: center;
-font-size: 16pt;
-padding: 10px;
-background: lightsteelblue;
-border: 0px;
-border-radius: 8px;
-pointer-events: none;
-}
-
-div.treeDiv {
-position: absolute;
-}
-
-div.contextDiv {
-position: absolute;
-}
-
-sub, sup {
-/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
-font-size: 75%;
-/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
-line-height: 0;
-/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
-position: relative;
-/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
-vertical-align: baseline;
-}
-
-sup {
-/* Move the superscripted text up */
-top: -0.5em;
-}
-
-sub {
-/* Move the subscripted text down, but only half as far down as the superscript moved up */
-bottom: -0.5em;
-}
-
-
-/*Edge Bundles Styles*/
-/*##############################################################*/
-.edgeBundlesNode {
-  fill: #aaa;
-}
-
-.edgeBundlesNode:hover {
-  fill: #555555;
-}
-
-.edgeBundlesLink {
-  stroke: #3399FF;
-  stroke-opacity: 0.4;
-  stroke-width: 2px;
-  fill: none;
-  
-}
-
-.invisibleLink {
-  stroke: #000;
-  stroke-opacity: 0;
-  stroke-width: 15px;
-  fill: none;
-}
-.invisibleLink:hover {
-  stroke: #3399FF;
-  stroke-opacity: 1.0;
-  stroke-width: 5px;
-  fill: none;
-}
-
-.edgeBundlesNode:hover,
-.edgeBundlesNode--source,
-.edgeBundlesNode--target {
-  font-weight: 700;
-}
-
-.edgeBundlesNode--source {
-  fill: #99CC00;
-}
-
-.edgeBundlesNode--target {
-  fill: #CC0000;
-}
-
-.edgeBundlesLink--target,
-.edgeBundlesLink--source{
-  stroke-width: 5px;
-}
-
-.edgeBundlesLink--source {
-  stroke: #CC0000;
-  stroke-opacity: .5;
-}
-
-.edgeBundlesLink--target {
-  stroke: #99CC00;
-  stroke-opacity: .5;
-}
-
-.sankeyNode rect {
-  cursor: grab;
-  shape-rendering: crispEdges;
-}
-
-.sankeyNode text {
-  pointer-events: none;
-  text-shadow: 1px 1px 2px #fff;
-  font-size: 0.8em;
-  font-family: sans-serif;
-}
-
-#tooltip {
-  position: absolute;
-  pointer-events: none;
-  font-size: 0.7em;
-  font-family: sans-serif;
-  padding: 3px;
-  width: auto;
-  height: auto;
-  background-color: #F2F2F2;
-  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4);
-  -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4);
-  box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4);
-  pointer-events: none;
-}
-
-.value {
-  white-space: pre-line;
-  margin: 0;
-}
-
-/* Aigner: New styles for tree layout */
-.treeNode {
-cursor: pointer;
-}
-
-.overlay{
-background-color:#FFF;
-}
-
-.treeNode circle {
-fill: #fff;
-stroke: #3399FF;
-stroke-width: 1.5px;
-}
-
-.treeNode text {
-font-size:16pt; 
-font-family:Arial;
-}
-
-.treeLink {
-fill: none;
-stroke: #ccc;
-stroke-width: 1.5px;
-}
-
-.d3-context-menu {
-	position: absolute;
-	display: none;
-	background-color: #f2f2f2;
-	border-radius: 4px;
-	font-family: Arial;
-	font-size: 16pt;
-	width: 300px;
-	border: 1px solid #d4d4d4;
-	z-index:1200;
-}
-.d3-context-menu ul {
-	list-style-type: none;
-	margin: 4px 0px;
-	padding: 0px;
-	cursor: default;
-}
-.d3-context-menu ul li {
-	padding: 4px 16px;
-}
-.d3-context-menu ul li:hover {
-	background-color: #3399FF;
-}
-.d3-context-menu ul li > ul {
-    position: absolute; 
-    background-color: #f2f2f2; 
-    top: 0;
-	min-width: 350px;
-    left: 290px; 
-    z-index: -1; 
-} 
-
-.d3-context-menu ul li > ul li:hover 
-{ 
-    background-color: #3399FF;
-	color: #fefefe;
-}
-
-.button {
-fill: #555555;
-stroke: white;
-stroke-width: 1.5;
-}
-
-.copyRightText {
-font-family: Arial;
-font-size: 12pt;
-fill: #555555;
-}
-
-.newDiv {
-	position:relative;
-	top: -100px;
-	left: 220px;
-	background-color: none;
-}
-.newDiv a {
-    text-decoration: none;
-    color: white;
-    font-family: Arial;
-    font-size: 20pt;
-    padding-top: 12px;
-    padding-right: 12px;
-    padding-bottom: 12px;
-    padding-left: 6px;
-    display:inline-block;
-}
-.newDiv ul {
-  display:  inline-block;;
-  margin: 0;
-  padding: 0;
-  background-color: #555555;
-}
-.newDiv ul li {display: inline-block;}
-.newDiv ul li:hover {background: #888;}
-.newDiv ul li:hover ul {display: block;}
-.newDiv ul li ul {
-  position: absolute;
-  min-width: 200px;
-  display: none;
-}
-.newDiv ul li ul li { 
-  background: #555; 
-  display: block;
-}
-.newDiv ul li ul li a {
-	display:block !important
-} 
-.newDiv ul li ul li:hover {background: #3399FF;}
-
-
-.dataModelDiv {
-	position:relative;
-	top: 0px;
-	left: 10px;
-	background-color: none;
-}
-.dataModelDiv a {
-    text-decoration: none;
-    color: white;
-    font-family: Arial;
-    font-size: 16pt;
-    padding-top: 5px;
-    padding-right: 12px;
-    padding-bottom: 5px;
-    padding-left: 16px;
-    display:inline-block;
-}
-.dataModelDiv ul {
-  display:  inline-block;
-  margin: 0;
-  padding: 0;
-  background-color: #555555;
-  border-radius: 5px;
-  border-style: solid; 
-  border-width: 2px;
-  border-color: #555555;
-}
-.dataModelDiv ul li {display: inline-block;}
-.dataModelDiv ul li:hover {
-	background: #888;
-}
-.dataModelDiv ul li:hover ul {display: block;}
-.dataModelDiv ul li ul {
-  position: absolute;
-  align: right;
-  left: 150px;
-  top: 0px;
-  min-width: 180px;
-  display: none;
-}
-.dataModelDiv ul li ul li { 
-  background: #555555; 
-  display: block;
-}
-.dataModelDiv ul li ul li a {
-	display:block !important
-} 
-.dataModelDiv ul li ul li:hover {background: #3399FF;}
-
-table {
-	width: 800px;
-	table-layout:fixed;
-}
-
-
-
-
-table, th, td {
-	font-family: Arial;
-    font-size: 16pt;
-	background-color: white;
-    border: 2pt solid darkgrey;
-    border-collapse: collapse;
-	text-align: left;
-	word-wrap:break-word;
-}
-}
-th, td {
-    padding-top: 6px;
-    padding-right: 20px;
-    padding-bottom: 6px;
-    padding-left: 20px;
-	min-width: 100px;
-	max-width: 400px;
-}
-
-.remCircle {
-	stroke: black;
-	stroke-width: 2;
-	fill: red;
-	fill-opacity: .6
-}
-.remMinus {
-	stroke: black;
-	stroke-width: 2;
-}
-
-</style>
-<head>
-    <meta charset="utf-8">
-    <title>VISTOMS (Visualization Tool for MDO Systems)</title>
-</head>
-<body>
-    <script>	
-			(function() {
-			/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
-			!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
-			a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d));
-			},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
-
-			function createShiftArr(step) {
-
-				var space = '    ';
-				
-				if ( isNaN(parseInt(step)) ) {  // argument is string
-					space = step;
-				} else { // argument is integer
-					switch(step) {
-						case 1: space = ' '; break;
-						case 2: space = '  '; break;
-						case 3: space = '   '; break;
-						case 4: space = '    '; break;
-						case 5: space = '     '; break;
-						case 6: space = '      '; break;
-						case 7: space = '       '; break;
-						case 8: space = '        '; break;
-						case 9: space = '         '; break;
-						case 10: space = '          '; break;
-						case 11: space = '           '; break;
-						case 12: space = '            '; break;
-					}
-				}
-
-				var shift = ['\n']; // array of shifts
-				for(ix=0;ix<100;ix++){
-					shift.push(shift[ix]+space); 
-				}
-				return shift;
-			}
-
-			function vkbeautify(){
-				this.step = '    '; // 4 spaces
-				this.shift = createShiftArr(this.step);
-			};
-
-			vkbeautify.prototype.xml = function(text,step) {
-
-				var ar = text.replace(/>\s{0,}</g,"><")
-							 .replace(/</g,"~::~<")
-							 .replace(/\s*xmlns\:/g,"~::~xmlns:")
-							 .replace(/\s*xmlns\=/g,"~::~xmlns=")
-							 .split('~::~'),
-					len = ar.length,
-					inComment = false,
-					deep = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;
-
-					for(ix=0;ix<len;ix++) {
-						// start comment or <![CDATA[...]]> or <!DOCTYPE //
-						if(ar[ix].search(/<!/) > -1) { 
-							str += shift[deep]+ar[ix];
-							inComment = true; 
-							// end comment  or <![CDATA[...]]> //
-							if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
-								inComment = false; 
-							}
-						} else 
-						// end comment  or <![CDATA[...]]> //
-						if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
-							str += ar[ix];
-							inComment = false; 
-						} else 
-						// <elm></elm> //
-						if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
-							/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
-							str += ar[ix];
-							if(!inComment) deep--;
-						} else
-						 // <elm> //
-						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
-							str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
-						} else 
-						 // <elm>...</elm> //
-						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
-							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
-						} else 
-						// </elm> //
-						if(ar[ix].search(/<\//) > -1) { 
-							str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
-						} else 
-						// <elm/> //
-						if(ar[ix].search(/\/>/) > -1 ) { 
-							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
-						} else 
-						// <? xml ... ?> //
-						if(ar[ix].search(/<\?/) > -1) { 
-							str += shift[deep]+ar[ix];
-						} else 
-						// xmlns //
-						if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
-							str += shift[deep]+ar[ix];
-						} 
-						
-						else {
-							str += ar[ix];
-						}
-					}
-					
-				return  (str[0] == '\n') ? str.slice(1) : str;
-			}
-
-			vkbeautify.prototype.json = function(text,step) {
-
-				var step = step ? step : this.step;
-				
-				if (typeof JSON === 'undefined' ) return text; 
-				
-				if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
-				if ( typeof text === "object" ) return JSON.stringify(text, null, step);
-					
-				return text; // text is not string nor object
-			}
-
-			vkbeautify.prototype.css = function(text, step) {
-
-				var ar = text.replace(/\s{1,}/g,' ')
-							.replace(/\{/g,"{~::~")
-							.replace(/\}/g,"~::~}~::~")
-							.replace(/\;/g,";~::~")
-							.replace(/\/\*/g,"~::~/*")
-							.replace(/\*\//g,"*/~::~")
-							.replace(/~::~\s{0,}~::~/g,"~::~")
-							.split('~::~'),
-					len = ar.length,
-					deep = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;
-					
-					for(ix=0;ix<len;ix++) {
-
-						if( /\{/.exec(ar[ix]))  { 
-							str += shift[deep++]+ar[ix];
-						} else 
-						if( /\}/.exec(ar[ix]))  { 
-							str += shift[--deep]+ar[ix];
-						} else
-						if( /\*\\/.exec(ar[ix]))  { 
-							str += shift[deep]+ar[ix];
-						}
-						else {
-							str += shift[deep]+ar[ix];
-						}
-					}
-					return str.replace(/^\n{1,}/,'');
-			}
-
-			//----------------------------------------------------------------------------
-
-			function isSubquery(str, parenthesisLevel) {
-				return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
-			}
-
-			function split_sql(str, tab) {
-
-				return str.replace(/\s{1,}/g," ")
-
-							.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
-							.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
-							.replace(/ CASE /ig,"~::~"+tab+"CASE ")
-							.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
-							.replace(/ END /ig,"~::~"+tab+"END ")
-							.replace(/ FROM /ig,"~::~FROM ")
-							.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
-							.replace(/ HAVING /ig,"~::~HAVING ")
-							//.replace(/ SET /ig," SET~::~")
-							.replace(/ IN /ig," IN ")
-							
-							.replace(/ JOIN /ig,"~::~JOIN ")
-							.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
-							.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
-							.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
-							.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
-							
-							.replace(/ ON /ig,"~::~"+tab+"ON ")
-							.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
-							.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
-							.replace(/ OVER /ig,"~::~"+tab+"OVER ")
-
-							.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
-							.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
-							
-							.replace(/ THEN /ig," THEN~::~"+tab+"")
-							.replace(/ UNION /ig,"~::~UNION~::~")
-							.replace(/ USING /ig,"~::~USING ")
-							.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
-							.replace(/ WHERE /ig,"~::~WHERE ")
-							.replace(/ WITH /ig,"~::~WITH ")
-							
-							//.replace(/\,\s{0,}\(/ig,",~::~( ")
-							//.replace(/\,/ig,",~::~"+tab+tab+"")
-
-							.replace(/ ALL /ig," ALL ")
-							.replace(/ AS /ig," AS ")
-							.replace(/ ASC /ig," ASC ")	
-							.replace(/ DESC /ig," DESC ")	
-							.replace(/ DISTINCT /ig," DISTINCT ")
-							.replace(/ EXISTS /ig," EXISTS ")
-							.replace(/ NOT /ig," NOT ")
-							.replace(/ NULL /ig," NULL ")
-							.replace(/ LIKE /ig," LIKE ")
-							.replace(/\s{0,}SELECT /ig,"SELECT ")
-							.replace(/\s{0,}UPDATE /ig,"UPDATE ")
-							.replace(/ SET /ig," SET ")
-										
-							.replace(/~::~{1,}/g,"~::~")
-							.split('~::~');
-			}
-
-			vkbeautify.prototype.sql = function(text,step) {
-
-				var ar_by_quote = text.replace(/\s{1,}/g," ")
-										.replace(/\'/ig,"~::~\'")
-										.split('~::~'),
-					len = ar_by_quote.length,
-					ar = [],
-					deep = 0,
-					tab = this.step,//+this.step,
-					inComment = true,
-					inQuote = false,
-					parenthesisLevel = 0,
-					str = '',
-					ix = 0,
-					shift = step ? createShiftArr(step) : this.shift;;
-
-					for(ix=0;ix<len;ix++) {
-						if(ix%2) {
-							ar = ar.concat(ar_by_quote[ix]);
-						} else {
-							ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
-						}
-					}
-					
-					len = ar.length;
-					for(ix=0;ix<len;ix++) {
-						
-						parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
-						
-						if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
-							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
-						} 
-						
-						if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
-							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
-						} 
-						
-						if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
-							deep++;
-							str += shift[deep]+ar[ix];
-						} else 
-						if( /\'/.exec(ar[ix]) )  { 
-							if(parenthesisLevel<1 && deep) {
-								deep--;
-							}
-							str += ar[ix];
-						}
-						else  { 
-							str += shift[deep]+ar[ix];
-							if(parenthesisLevel<1 && deep) {
-								deep--;
-							}
-						} 
-						var junk = 0;
-					}
-
-					str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
-					return str;
-			}
-
-
-			vkbeautify.prototype.xmlmin = function(text, preserveComments) {
-
-				var str = preserveComments ? text
-										   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
-												 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
-				return  str.replace(/>\s{0,}</g,"><"); 
-			}
-
-			vkbeautify.prototype.jsonmin = function(text) {
-
-				if (typeof JSON === 'undefined' ) return text; 
-				
-				return JSON.stringify(JSON.parse(text), null, 0); 
-							
-			}
-
-			vkbeautify.prototype.cssmin = function(text, preserveComments) {
-				
-				var str = preserveComments ? text
-										   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
-
-				return str.replace(/\s{1,}/g,' ')
-						  .replace(/\{\s{1,}/g,"{")
-						  .replace(/\}\s{1,}/g,"}")
-						  .replace(/\;\s{1,}/g,";")
-						  .replace(/\/\*\s{1,}/g,"/*")
-						  .replace(/\*\/\s{1,}/g,"*/");
-			}
-
-			vkbeautify.prototype.sqlmin = function(text) {
-				return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
-			}
-
-			window.vkbeautify = new vkbeautify();
-
-			})();
-
-
-			/*!
-			 * Bootstrap v3.3.7 (http://getbootstrap.com)
-			 * Copyright 2011-2016 Twitter, Inc.
-			 * Licensed under the MIT license
-			 */
-			if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
-			this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
-
-
-			/**
-			 * bootbox.js v4.4.0
-			 *
-			 * http://bootboxjs.com/license.txt
-			 */
-			!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d.call(c,a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",textarea:"<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",date:"<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",time:"<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",number:"<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",password:"<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"}},o={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback.call(this):!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,!1)},a.buttons.confirm.callback=function(){return a.callback.call(this,!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback.call(this,c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!b.isArray(k))throw new Error("Please pass an array of input options");if(!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),a.maxlength&&h.attr("maxlength",a.maxlength),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var d=b(n.dialog),f=d.find(".modal-dialog"),i=d.find(".modal-body"),j=a.buttons,k="",l={onEscape:a.onEscape};if(b.fn.modal===c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(g(j,function(a,b){k+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",l[a]=b.callback}),i.find(".bootbox-body").html(a.message),a.animate===!0&&d.addClass("fade"),a.className&&d.addClass(a.className),"large"===a.size?f.addClass("modal-lg"):"small"===a.size&&f.addClass("modal-sm"),a.title&&i.before(n.header),a.closeButton){var m=b(n.closeButton);a.title?d.find(".modal-header").prepend(m):m.css("margin-top","-10px").prependTo(i)}return a.title&&d.find(".modal-title").html(a.title),k.length&&(i.after(n.footer),d.find(".modal-footer").html(k)),d.on("hidden.bs.modal",function(a){a.target===this&&d.remove()}),d.on("shown.bs.modal",function(){d.find(".btn-primary:first").focus()}),"static"!==a.backdrop&&d.on("click.dismiss.bs.modal",function(a){d.children(".modal-backdrop").length&&(a.currentTarget=d.children(".modal-backdrop").get(0)),a.target===a.currentTarget&&d.trigger("escape.close.bb")}),d.on("escape.close.bb",function(a){l.onEscape&&e(a,d,l.onEscape)}),d.on("click",".modal-footer button",function(a){var c=b(this).data("bb-handler");e(a,d,l[c])}),d.on("click",".bootbox-close-button",function(a){e(a,d,l.onEscape)}),d.on("keyup",function(a){27===a.which&&d.trigger("escape.close.bb")}),b(a.container).append(d),d.modal({backdrop:a.backdrop?"static":!1,keyboard:!1,show:!1}),a.show&&d.modal("show"),d},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.addLocale=function(a,c){return b.each(["OK","CANCEL","CONFIRM"],function(a,b){if(!c[b])throw new Error("Please supply a translation for '"+b+"'")}),q[a]={OK:c.OK,CANCEL:c.CANCEL,CONFIRM:c.CONFIRM},p},p.removeLocale=function(a){return delete q[a],p},p.setLocale=function(a){return p.setDefaults("locale",a)},p.init=function(c){return a(c||b)},p});
-			
-			/*!
-			 * Bowser - a browser detector
-			 * https://github.com/ded/bowser
-			 * MIT License | (c) Dustin Diaz 2015
-			 */
-			//#################################################################################################
-			!function (root, name, definition) {
-			  if (typeof module != 'undefined' && module.exports) module.exports = definition()
-			  else if (typeof define == 'function' && define.amd) define(name, definition)
-			  else root[name] = definition()
-			}(this, 'bowser', function () {
-			  /**
-				* See useragents.js for examples of navigator.userAgent
-				*/
-
-			  var t = true
-
-			  function detect(ua) {
-
-				function getFirstMatch(regex) {
-				  var match = ua.match(regex);
-				  return (match && match.length > 1 && match[1]) || '';
-				}
-
-				function getSecondMatch(regex) {
-				  var match = ua.match(regex);
-				  return (match && match.length > 1 && match[2]) || '';
-				}
-
-				var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
-				  , likeAndroid = /like android/i.test(ua)
-				  , android = !likeAndroid && /android/i.test(ua)
-				  , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
-				  , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
-				  , chromeos = /CrOS/.test(ua)
-				  , silk = /silk/i.test(ua)
-				  , sailfish = /sailfish/i.test(ua)
-				  , tizen = /tizen/i.test(ua)
-				  , webos = /(web|hpw)os/i.test(ua)
-				  , windowsphone = /windows phone/i.test(ua)
-				  , samsungBrowser = /SamsungBrowser/i.test(ua)
-				  , windows = !windowsphone && /windows/i.test(ua)
-				  , mac = !iosdevice && !silk && /macintosh/i.test(ua)
-				  , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
-				  , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
-				  , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
-				  , tablet = /tablet/i.test(ua)
-				  , mobile = !tablet && /[^-]mobi/i.test(ua)
-				  , xbox = /xbox/i.test(ua)
-				  , result
-
-				if (/opera/i.test(ua)) {
-				  //  an old Opera
-				  result = {
-					name: 'Opera'
-				  , opera: t
-				  , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				} else if (/opr|opios/i.test(ua)) {
-				  // a new Opera
-				  result = {
-					name: 'Opera'
-					, opera: t
-					, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (/SamsungBrowser/i.test(ua)) {
-				  result = {
-					name: 'Samsung Internet for Android'
-					, samsungBrowser: t
-					, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/coast/i.test(ua)) {
-				  result = {
-					name: 'Opera Coast'
-					, coast: t
-					, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/yabrowser/i.test(ua)) {
-				  result = {
-					name: 'Yandex Browser'
-				  , yandexbrowser: t
-				  , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/ucbrowser/i.test(ua)) {
-				  result = {
-					  name: 'UC Browser'
-					, ucbrowser: t
-					, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/mxios/i.test(ua)) {
-				  result = {
-					name: 'Maxthon'
-					, maxthon: t
-					, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/epiphany/i.test(ua)) {
-				  result = {
-					name: 'Epiphany'
-					, epiphany: t
-					, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/puffin/i.test(ua)) {
-				  result = {
-					name: 'Puffin'
-					, puffin: t
-					, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
-				  }
-				}
-				else if (/sleipnir/i.test(ua)) {
-				  result = {
-					name: 'Sleipnir'
-					, sleipnir: t
-					, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (/k-meleon/i.test(ua)) {
-				  result = {
-					name: 'K-Meleon'
-					, kMeleon: t
-					, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
-				  }
-				}
-				else if (windowsphone) {
-				  result = {
-					name: 'Windows Phone'
-				  , windowsphone: t
-				  }
-				  if (edgeVersion) {
-					result.msedge = t
-					result.version = edgeVersion
-				  }
-				  else {
-					result.msie = t
-					result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/msie|trident/i.test(ua)) {
-				  result = {
-					name: 'Internet Explorer'
-				  , msie: t
-				  , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
-				  }
-				} else if (chromeos) {
-				  result = {
-					name: 'Chrome'
-				  , chromeos: t
-				  , chromeBook: t
-				  , chrome: t
-				  , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
-				  }
-				} else if (/chrome.+? edge/i.test(ua)) {
-				  result = {
-					name: 'Microsoft Edge'
-				  , msedge: t
-				  , version: edgeVersion
-				  }
-				}
-				else if (/vivaldi/i.test(ua)) {
-				  result = {
-					name: 'Vivaldi'
-					, vivaldi: t
-					, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (sailfish) {
-				  result = {
-					name: 'Sailfish'
-				  , sailfish: t
-				  , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/seamonkey\//i.test(ua)) {
-				  result = {
-					name: 'SeaMonkey'
-				  , seamonkey: t
-				  , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/firefox|iceweasel|fxios/i.test(ua)) {
-				  result = {
-					name: 'Firefox'
-				  , firefox: t
-				  , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
-				  }
-				  if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
-					result.firefoxos = t
-				  }
-				}
-				else if (silk) {
-				  result =  {
-					name: 'Amazon Silk'
-				  , silk: t
-				  , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/phantom/i.test(ua)) {
-				  result = {
-					name: 'PhantomJS'
-				  , phantom: t
-				  , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/slimerjs/i.test(ua)) {
-				  result = {
-					name: 'SlimerJS'
-					, slimer: t
-					, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
-				  result = {
-					name: 'BlackBerry'
-				  , blackberry: t
-				  , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (webos) {
-				  result = {
-					name: 'WebOS'
-				  , webos: t
-				  , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
-				  };
-				  /touchpad\//i.test(ua) && (result.touchpad = t)
-				}
-				else if (/bada/i.test(ua)) {
-				  result = {
-					name: 'Bada'
-				  , bada: t
-				  , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
-				  };
-				}
-				else if (tizen) {
-				  result = {
-					name: 'Tizen'
-				  , tizen: t
-				  , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
-				  };
-				}
-				else if (/qupzilla/i.test(ua)) {
-				  result = {
-					name: 'QupZilla'
-					, qupzilla: t
-					, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
-				  }
-				}
-				else if (/chromium/i.test(ua)) {
-				  result = {
-					name: 'Chromium'
-					, chromium: t
-					, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
-				  }
-				}
-				else if (/chrome|crios|crmo/i.test(ua)) {
-				  result = {
-					name: 'Chrome'
-					, chrome: t
-					, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
-				  }
-				}
-				else if (android) {
-				  result = {
-					name: 'Android'
-					, version: versionIdentifier
-				  }
-				}
-				else if (/safari|applewebkit/i.test(ua)) {
-				  result = {
-					name: 'Safari'
-				  , safari: t
-				  }
-				  if (versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				}
-				else if (iosdevice) {
-				  result = {
-					name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
-				  }
-				  // WTF: version is not part of user agent in web apps
-				  if (versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				}
-				else if(/googlebot/i.test(ua)) {
-				  result = {
-					name: 'Googlebot'
-				  , googlebot: t
-				  , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
-				  }
-				}
-				else {
-				  result = {
-					name: getFirstMatch(/^(.*)\/(.*) /),
-					version: getSecondMatch(/^(.*)\/(.*) /)
-				 };
-			   }
-
-				// set webkit or gecko flag for browsers based on these engines
-				if (!result.msedge && /(apple)?webkit/i.test(ua)) {
-				  if (/(apple)?webkit\/537\.36/i.test(ua)) {
-					result.name = result.name || "Blink"
-					result.blink = t
-				  } else {
-					result.name = result.name || "Webkit"
-					result.webkit = t
-				  }
-				  if (!result.version && versionIdentifier) {
-					result.version = versionIdentifier
-				  }
-				} else if (!result.opera && /gecko\//i.test(ua)) {
-				  result.name = result.name || "Gecko"
-				  result.gecko = t
-				  result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
-				}
-
-				// set OS flags for platforms that have multiple browsers
-				if (!result.windowsphone && !result.msedge && (android || result.silk)) {
-				  result.android = t
-				} else if (!result.windowsphone && !result.msedge && iosdevice) {
-				  result[iosdevice] = t
-				  result.ios = t
-				} else if (mac) {
-				  result.mac = t
-				} else if (xbox) {
-				  result.xbox = t
-				} else if (windows) {
-				  result.windows = t
-				} else if (linux) {
-				  result.linux = t
-				}
-
-				function getWindowsVersion (s) {
-				  switch (s) {
-					case 'NT': return 'NT'
-					case 'XP': return 'XP'
-					case 'NT 5.0': return '2000'
-					case 'NT 5.1': return 'XP'
-					case 'NT 5.2': return '2003'
-					case 'NT 6.0': return 'Vista'
-					case 'NT 6.1': return '7'
-					case 'NT 6.2': return '8'
-					case 'NT 6.3': return '8.1'
-					case 'NT 10.0': return '10'
-					default: return undefined
-				  }
-				}
-				
-				// OS version extraction
-				var osVersion = '';
-				if (result.windows) {
-				  osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
-				} else if (result.windowsphone) {
-				  osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
-				} else if (result.mac) {
-				  osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
-				  osVersion = osVersion.replace(/[_\s]/g, '.');
-				} else if (iosdevice) {
-				  osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
-				  osVersion = osVersion.replace(/[_\s]/g, '.');
-				} else if (android) {
-				  osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
-				} else if (result.webos) {
-				  osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
-				} else if (result.blackberry) {
-				  osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
-				} else if (result.bada) {
-				  osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
-				} else if (result.tizen) {
-				  osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
-				}
-				if (osVersion) {
-				  result.osversion = osVersion;
-				}
-
-				// device type extraction
-				var osMajorVersion = !result.windows && osVersion.split('.')[0];
-				if (
-					 tablet
-				  || nexusTablet
-				  || iosdevice == 'ipad'
-				  || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
-				  || result.silk
-				) {
-				  result.tablet = t
-				} else if (
-					 mobile
-				  || iosdevice == 'iphone'
-				  || iosdevice == 'ipod'
-				  || android
-				  || nexusMobile
-				  || result.blackberry
-				  || result.webos
-				  || result.bada
-				) {
-				  result.mobile = t
-				}
-
-				// Graded Browser Support
-				// http://developer.yahoo.com/yui/articles/gbs
-				if (result.msedge ||
-					(result.msie && result.version >= 10) ||
-					(result.yandexbrowser && result.version >= 15) ||
-						(result.vivaldi && result.version >= 1.0) ||
-					(result.chrome && result.version >= 20) ||
-					(result.samsungBrowser && result.version >= 4) ||
-					(result.firefox && result.version >= 20.0) ||
-					(result.safari && result.version >= 6) ||
-					(result.opera && result.version >= 10.0) ||
-					(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
-					(result.blackberry && result.version >= 10.1)
-					|| (result.chromium && result.version >= 20)
-					) {
-				  result.a = t;
-				}
-				else if ((result.msie && result.version < 10) ||
-					(result.chrome && result.version < 20) ||
-					(result.firefox && result.version < 20.0) ||
-					(result.safari && result.version < 6) ||
-					(result.opera && result.version < 10.0) ||
-					(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
-					|| (result.chromium && result.version < 20)
-					) {
-				  result.c = t
-				} else result.x = t
-
-				return result
-			  }
-
-			  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
-
-			  bowser.test = function (browserList) {
-				for (var i = 0; i < browserList.length; ++i) {
-				  var browserItem = browserList[i];
-				  if (typeof browserItem=== 'string') {
-					if (browserItem in bowser) {
-					  return true;
-					}
-				  }
-				}
-				return false;
-			  }
-
-			  /**
-			   * Get version precisions count
-			   *
-			   * @example
-			   *   getVersionPrecision("1.10.3") // 3
-			   *
-			   * @param  {string} version
-			   * @return {number}
-			   */
-			  function getVersionPrecision(version) {
-				return version.split(".").length;
-			  }
-
-			  /**
-			   * Array::map polyfill
-			   *
-			   * @param  {Array} arr
-			   * @param  {Function} iterator
-			   * @return {Array}
-			   */
-			  function map(arr, iterator) {
-				var result = [], i;
-				if (Array.prototype.map) {
-				  return Array.prototype.map.call(arr, iterator);
-				}
-				for (i = 0; i < arr.length; i++) {
-				  result.push(iterator(arr[i]));
-				}
-				return result;
-			  }
-
-			  /**
-			   * Calculate browser version weight
-			   *
-			   * @example
-			   *   compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
-			   *   compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
-			   *   compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
-			   *   compareVersions(['1.10.2.1',  '1.0800.2']);     // -1
-			   *
-			   * @param  {Array<String>} versions versions to compare
-			   * @return {Number} comparison result
-			   */
-			  function compareVersions(versions) {
-				// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
-				var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
-				var chunks = map(versions, function (version) {
-				  var delta = precision - getVersionPrecision(version);
-
-				  // 2) "9" -> "9.0" (for precision = 2)
-				  version = version + new Array(delta + 1).join(".0");
-
-				  // 3) "9.0" -> ["000000000"", "000000009"]
-				  return map(version.split("."), function (chunk) {
-					return new Array(20 - chunk.length).join("0") + chunk;
-				  }).reverse();
-				});
-
-				// iterate in reverse order by reversed chunks array
-				while (--precision >= 0) {
-				  // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
-				  if (chunks[0][precision] > chunks[1][precision]) {
-					return 1;
-				  }
-				  else if (chunks[0][precision] === chunks[1][precision]) {
-					if (precision === 0) {
-					  // all version chunks are same
-					  return 0;
-					}
-				  }
-				  else {
-					return -1;
-				  }
-				}
-			  }
-
-			  /**
-			   * Check if browser is unsupported
-			   *
-			   * @example
-			   *   bowser.isUnsupportedBrowser({
-			   *     msie: "10",
-			   *     firefox: "23",
-			   *     chrome: "29",
-			   *     safari: "5.1",
-			   *     opera: "16",
-			   *     phantom: "534"
-			   *   });
-			   *
-			   * @param  {Object}  minVersions map of minimal version to browser
-			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
-			   * @param  {String}  [ua] user agent string
-			   * @return {Boolean}
-			   */
-			  function isUnsupportedBrowser(minVersions, strictMode, ua) {
-				var _bowser = bowser;
-
-				// make strictMode param optional with ua param usage
-				if (typeof strictMode === 'string') {
-				  ua = strictMode;
-				  strictMode = void(0);
-				}
-
-				if (strictMode === void(0)) {
-				  strictMode = false;
-				}
-				if (ua) {
-				  _bowser = detect(ua);
-				}
-
-				var version = "" + _bowser.version;
-				for (var browser in minVersions) {
-				  if (minVersions.hasOwnProperty(browser)) {
-					if (_bowser[browser]) {
-					  if (typeof minVersions[browser] !== 'string') {
-						throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
-					  }
-
-					  // browser version and min supported version.
-					  return compareVersions([version, minVersions[browser]]) < 0;
-					}
-				  }
-				}
-
-				return strictMode; // not found
-			  }
-
-			  /**
-			   * Check if browser is supported
-			   *
-			   * @param  {Object} minVersions map of minimal version to browser
-			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
-			   * @param  {String}  [ua] user agent string
-			   * @return {Boolean}
-			   */
-			  function check(minVersions, strictMode, ua) {
-				return !isUnsupportedBrowser(minVersions, strictMode, ua);
-			  }
-
-			  bowser.isUnsupportedBrowser = isUnsupportedBrowser;
-			  bowser.compareVersions = compareVersions;
-			  bowser.check = check;
-
-			  /*
-			   * Set our detect method to the main bowser object so we can
-			   * reuse it to test other user agents.
-			   * This is needed to implement future tests.
-			   */
-			  bowser._detect = detect;
-
-			  return bowser
-			});
-			//#################################################################################################
-
-			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
-			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
-			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
-			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
-			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
-
-			if (bowser.name=="Internet Explorer")
-			{
-			alert("OOPS! VISTOMS unfortunately does not work properly on " + bowser.name + ". Please use a different browser to see its awesome visualization features!")
-			}
-
-			function makeKadmosMenu(data)
-			{
-				var imageWidth = 200;
-				var imageHeight = 150;
-				var padding = 10;
-				var rectHeight = 70;
-				var imgSize = 40;
-				var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
-				var visPackSvg = visPackDiv.append("svg")
-					.attr("class","visPackSvg")
-					.attr("width",imageWidth*5+40)
-					.attr("height",imageHeight+40)
-					.attr("transform", "translate("
-					  + String(10) + "," + String(10) + ")")			  
-				
-				var visPackFrame = visPackSvg.append("rect")
-					.attr("width",imageWidth*5+12)
-					.attr("height",imageHeight)
-					.attr("fill", "none")
-				
-				var imgs = visPackSvg.selectAll("image1").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("x",5)
-					.attr("xlink:href", fileReference.AGILE_Logo)
-					.attr("width", imageWidth)
-					.attr("height", imageHeight)
-					.attr("position", "relative")
-					
-				var imgs = visPackSvg.selectAll("image2").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("x",210)
-					.attr("y",-5)
-					.attr("xlink:href", fileReference.VISTOMS_Label)
-					.attr("width", "180pt")
-					.attr("height", "70pt")
-					
-					
-					
-				//Set general offset for Buttons, acknowledgements and so on
-				var offset_tmp = 645;	
-				
-				
-				//aigner: Make Acknowledgments, Help and Home buttons
-				//##########################################################
-				visPackSvg.append("rect")
-				.attr("transform", "translate("+ String(offset_tmp+17) + "," + String(0) + ")")
-				.attr("fill", "#555555")
-				.attr("width", 140)
-				.attr("height", 40)
-				
-				function makeButton(anId, aText,aPicFile, anOffset, aScale, picX, picY)
-				{
-					var buttonGroup = visPackSvg.append("a").classed("buttonGroup",true)
-					buttonGroup
-						.attr("class",anId)
-						.append("svg:title").text(aText)
-					var polygon = buttonGroup.append("polygon").classed("button",true)
-						.attr("points", "30,15 22.5,28.0 7.5,28 0,15 7.5,2 22.5,2")
-						.attr("transform", "translate("+ String(anOffset) + "," + String(2) + ") scale(1.2)")
-					buttonGroup.append("image")
-						.attr("xlink:href",aPicFile)
-						.attr("height",50)
-						.attr("width",50)
-						.attr("transform", "translate("+ String(anOffset+picX) + "," + String(picY) + ") scale("+aScale+")")
-					buttonGroup
-						.on("mouseover", function()
-						{
-							polygon.style("fill","#3399FF")
-							d3.select(this).style("cursor", "pointer")
-						})
-						.on("mouseleave", function()
-						{
-							polygon.style("fill","#555555")
-						})
-				}
-				///Home button
-				var distance = 45;
-				var currentOffset = offset_tmp+25;
-				makeButton("id_mainPage","Main Page",fileReference.Home, currentOffset, 0.45, 6.9,7.2);
-				d3.select(".id_mainPage").on("click",function()
-				{		
-					mainPage();
-                    dataModelScript();
-				})
-				//Contact button
-				currentOffset+=distance;
-				makeButton("id_contact","Contact the support team",fileReference.Contact, currentOffset, 0.45, 6.9, 9);
-				d3.select(".id_contact").on("click",function()
-				{				
-					sendMail("VISTOMS support");
-				})
-					
-				//Acknowledgements button
-				currentOffset+=distance;
-				makeButton("id_acknowledgements","Acknowledgements",fileReference.Acknowledgements, currentOffset, 0.45, 7, 8);
-				d3.select(".id_acknowledgements").on("click",function()
-				{
-					acknowledgements();
-                    dataModelScript();
-				})
-				
-				//##########################################################
-				
-				
-			
-			}
-			//#####################################################################//
-
-
-			function getTextWidth(text, font) 
-			{
-				// re-use canvas object for better performance
-				var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
-				var context = canvas.getContext("2d");
-				context.font = font;
-				var metrics = context.measureText(text);
-				return metrics.width;
-			}					
-
-
-			//#####################################################################//
-			function mainPage()
-			{	
-				clearView();
-				var introDiv = d3.select("body").append("div")
-					.attr("id","mainPage")
-					.classed("wordWrap",true)
-				
-				var theHeading = "Welcome to <b>VISTOMS</b>, the <b>VIS</b>ualization <b>TO</b>ol for <b>M</b>DO <b>S</b>ystems!\n";
-				introDiv.append("text")
-				.style("font-size","16pt")
-				.html(theHeading)
-				
-				
-				introDiv.append("text")
-					.style("font-size","8pt")
-					.html("\n\n\nCopyright 2016-2017 by Benedikt Aigner (RWTH Aachen) & Imco van Gent (TU Delft)")
-				
-				var introSvg = introDiv.append("svg")
-					.attr("width",500)
-					.attr("height",100)
-				var imgs = introSvg.selectAll("img").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("xlink:href", fileReference.RWTH_Logo)
-					.attr("width", "150")
-					.attr("height", "70")
-					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-					.on("click",function(){window.open("https://www.rwth-aachen.de/", '_blank');} )
-				var imgs = introSvg.selectAll("img").data([0]);
-					imgs.enter()
-					.append("svg:image")
-					.attr("xlink:href", fileReference.TUDelft_Logo)
-					.attr("x", 175)
-					.attr("y", 5)
-					.attr("width", "105")
-					.attr("height", "50")
-					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
-					.on("click",function(){window.open("https://www.tudelft.nl/en/", '_blank');} )
-
-			}
-			//#####################################################################//
-
-			//#####################################################################//
-			function acknowledgements()
-			{				
-				clearView();
-				var acknDiv = d3.select("body").append("div")
-					.attr("id","acknowledgements")
-					.classed("acknText", true)
-					.classed("wordWrap",true)
-				
-				var theHeading = "Acknowledgements";
-				acknDiv.append("text")
-				.style("font-size","16pt")
-				.html(theHeading)
-				
-				acknDiv.append("text")
-					.style("font-size","10pt")
-					.style("margin", "20px 10px")
-					.html("<br><br>Created by Benedikt Aigner and Imco van Gent for the "
-						+"<a href=\"http://www.agile-project.eu/\">AGILE Project</a> in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202."
-						+"<br>"
-						+"<br>"
-						+"<b>VISTOMS was created using the following open source packages:</b>"
-						+"<br>"
-						+"<a href=\"https://d3js.org/\">D3.js</a> package &copy 2015 by Mike Bostock released under the <a href=\"https://opensource.org/licenses/BSD-3-Clause\">BSD license</a>"
-						+"<br>"
-						+"<a href=\"https://github.com/OneraHub/XDSMjs\">XDSM.js </a> package &copy 2016 by R&eacutemi Lafage released under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>"
-						+"<br>"
-						+"<a href=\"https://github.com/Neilos/bihisankey\">BiHiSankey.js</a> package &copy 2015 by Neil Atkinson released under the <a href=\"https://opensource.org/licenses/MIT\">MIT License</a>"
-						+"<br>"
-						+"<br>"
-						+"<br>"
-						+"<font size=\"-2\">Rev. 07/31/2017</font>")
-			}
-			//#####################################################################//			
-			//aigner: Send mail function
-			//#####################################################################//
-			function sendMail(mailText) 
-			{
-				var link = "mailto:support@agile-project.eu"
-				window.location.href = link;
-			}
-			//#####################################################################//
-			
-			//aigner: Load entire MDO data
-			//###############################################################################################################################################################################################################//
-			//#####################################################################//
-			//#####################################################################//
-			//@Imco: here the references to all files are done
-			var fileReference = {
-				Acknowledgements : "REP__Acknowledgements__REP",
-				AGILE_Icon : "REP__AGILE_Icon__REP",
-				AGILE_Logo : "REP__AGILE_Logo__REP",
-				Contact : "REP__Contact__REP",
-				Home: "REP__Home__REP",
-				RWTH_Logo : "REP__RWTH_Logo__REP",
-				TUDelft_Logo : "REP__TUDelft_Logo__REP",
-				Tutorial : "REP__Tutorial__REP",
-				VISTOMS_Label : "REP__VISTOMS_Label__REP",
-			}
-			
-			//@Imco: Here is the sellar problem example data
-            //the "modelName" could for instance be the name of the CPACS XML file or the modelUID in the CPACS file
-            //the "schema" is just the variable categorization according to the CPACS schema that we always had. 
-			theData = REP__GRAPH_DATA__REP
-			function loadAllData(data)
-			{
-				makeKadmosMenu(data);
-				mainPage();
-                dataModelScript();
-			}
-			loadAllData(theData);
-			//#####################################################################//
-			//#####################################################################//
-			//###############################################################################################################################################################################################################//
-			
-			//aigner: Clear view function
-			//#####################################################################//
-			function clearView()
-			{
-				var visualizationScript = d3.select(".visualizationScript");
-				if (visualizationScript){visualizationScript.remove();}
-				var mainPage = document.getElementById("mainPage");
-                var xdsm = d3.select(".modelViewerDiv");							
-				if (xdsm){xdsm.remove();}
-				if (mainPage){mainPage.remove();}
-				var ackn = document.getElementById("acknowledgements");
-				if (ackn){ackn.remove();}
-			}
-			//#####################################################################//
-		
-            function dataModelScript()
-            {
-                (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-                // https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
-                (function (global, factory) {
-                  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
-                  typeof define === 'function' && define.amd ? define(['exports'], factory) :
-                  (factory((global.d3 = global.d3 || {})));
-                }(this, (function (exports) { 'use strict';
-
-                var version = "4.3.0";
-
-                var ascending = function(a, b) {
-                  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-                };
-
-                var bisector = function(compare) {
-                  if (compare.length === 1) compare = ascendingComparator(compare);
-                  return {
-                    left: function(a, x, lo, hi) {
-                      if (lo == null) lo = 0;
-                      if (hi == null) hi = a.length;
-                      while (lo < hi) {
-                        var mid = lo + hi >>> 1;
-                        if (compare(a[mid], x) < 0) lo = mid + 1;
-                        else hi = mid;
-                      }
-                      return lo;
-                    },
-                    right: function(a, x, lo, hi) {
-                      if (lo == null) lo = 0;
-                      if (hi == null) hi = a.length;
-                      while (lo < hi) {
-                        var mid = lo + hi >>> 1;
-                        if (compare(a[mid], x) > 0) hi = mid;
-                        else lo = mid + 1;
-                      }
-                      return lo;
-                    }
-                  };
-                };
-
-                function ascendingComparator(f) {
-                  return function(d, x) {
-                    return ascending(f(d), x);
-                  };
-                }
-
-                var ascendingBisect = bisector(ascending);
-                var bisectRight = ascendingBisect.right;
-                var bisectLeft = ascendingBisect.left;
-
-                var descending = function(a, b) {
-                  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-                };
-
-                var number = function(x) {
-                  return x === null ? NaN : +x;
-                };
-
-                var variance = function(array, f) {
-                  var n = array.length,
-                      m = 0,
-                      a,
-                      d,
-                      s = 0,
-                      i = -1,
-                      j = 0;
-
-                  if (f == null) {
-                    while (++i < n) {
-                      if (!isNaN(a = number(array[i]))) {
-                        d = a - m;
-                        m += d / ++j;
-                        s += d * (a - m);
-                      }
-                    }
-                  }
-
-                  else {
-                    while (++i < n) {
-                      if (!isNaN(a = number(f(array[i], i, array)))) {
-                        d = a - m;
-                        m += d / ++j;
-                        s += d * (a - m);
-                      }
-                    }
-                  }
-
-                  if (j > 1) return s / (j - 1);
-                };
-
-                var deviation = function(array, f) {
-                  var v = variance(array, f);
-                  return v ? Math.sqrt(v) : v;
-                };
-
-                var extent = function(array, f) {
-                  var i = -1,
-                      n = array.length,
-                      a,
-                      b,
-                      c;
-
-                  if (f == null) {
-                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
-                    while (++i < n) if ((b = array[i]) != null) {
-                      if (a > b) a = b;
-                      if (c < b) c = b;
-                    }
-                  }
-
-                  else {
-                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
-                    while (++i < n) if ((b = f(array[i], i, array)) != null) {
-                      if (a > b) a = b;
-                      if (c < b) c = b;
-                    }
-                  }
-
-                  return [a, c];
-                };
-
-                var array = Array.prototype;
-
-                var slice = array.slice;
-                var map = array.map;
-
-                var constant$1 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var identity = function(x) {
-                  return x;
-                };
-
-                var range = function(start, stop, step) {
-                  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
-
-                  var i = -1,
-                      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
-                      range = new Array(n);
-
-                  while (++i < n) {
-                    range[i] = start + i * step;
-                  }
-
-                  return range;
-                };
-
-                var e10 = Math.sqrt(50);
-                var e5 = Math.sqrt(10);
-                var e2 = Math.sqrt(2);
-
-                var ticks = function(start, stop, count) {
-                  var step = tickStep(start, stop, count);
-                  return range(
-                    Math.ceil(start / step) * step,
-                    Math.floor(stop / step) * step + step / 2, // inclusive
-                    step
-                  );
-                };
-
-                function tickStep(start, stop, count) {
-                  var step0 = Math.abs(stop - start) / Math.max(0, count),
-                      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
-                      error = step0 / step1;
-                  if (error >= e10) step1 *= 10;
-                  else if (error >= e5) step1 *= 5;
-                  else if (error >= e2) step1 *= 2;
-                  return stop < start ? -step1 : step1;
-                }
-
-                var sturges = function(values) {
-                  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
-                };
-
-                var histogram = function() {
-                  var value = identity,
-                      domain = extent,
-                      threshold = sturges;
-
-                  function histogram(data) {
-                    var i,
-                        n = data.length,
-                        x,
-                        values = new Array(n);
-
-                    for (i = 0; i < n; ++i) {
-                      values[i] = value(data[i], i, data);
-                    }
-
-                    var xz = domain(values),
-                        x0 = xz[0],
-                        x1 = xz[1],
-                        tz = threshold(values, x0, x1);
-
-                    // Convert number of thresholds into uniform thresholds.
-                    if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
-
-                    // Remove any thresholds outside the domain.
-                    var m = tz.length;
-                    while (tz[0] <= x0) tz.shift(), --m;
-                    while (tz[m - 1] >= x1) tz.pop(), --m;
-
-                    var bins = new Array(m + 1),
-                        bin;
-
-                    // Initialize bins.
-                    for (i = 0; i <= m; ++i) {
-                      bin = bins[i] = [];
-                      bin.x0 = i > 0 ? tz[i - 1] : x0;
-                      bin.x1 = i < m ? tz[i] : x1;
-                    }
-
-                    // Assign data to bins by value, ignoring any outside the domain.
-                    for (i = 0; i < n; ++i) {
-                      x = values[i];
-                      if (x0 <= x && x <= x1) {
-                        bins[bisectRight(tz, x, 0, m)].push(data[i]);
-                      }
-                    }
-
-                    return bins;
-                  }
-
-                  histogram.value = function(_) {
-                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value;
-                  };
-
-                  histogram.domain = function(_) {
-                    return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain;
-                  };
-
-                  histogram.thresholds = function(_) {
-                    return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold;
-                  };
-
-                  return histogram;
-                };
-
-                var threshold = function(array, p, f) {
-                  if (f == null) f = number;
-                  if (!(n = array.length)) return;
-                  if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
-                  if (p >= 1) return +f(array[n - 1], n - 1, array);
-                  var n,
-                      h = (n - 1) * p,
-                      i = Math.floor(h),
-                      a = +f(array[i], i, array),
-                      b = +f(array[i + 1], i + 1, array);
-                  return a + (b - a) * (h - i);
-                };
-
-                var freedmanDiaconis = function(values, min, max) {
-                  values = map.call(values, number).sort(ascending);
-                  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
-                };
-
-                var scott = function(values, min, max) {
-                  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
-                };
-
-                var max = function(array, f) {
-                  var i = -1,
-                      n = array.length,
-                      a,
-                      b;
-
-                  if (f == null) {
-                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
-                    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
-                  }
-
-                  else {
-                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
-                    while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
-                  }
-
-                  return a;
-                };
-
-                var mean = function(array, f) {
-                  var s = 0,
-                      n = array.length,
-                      a,
-                      i = -1,
-                      j = n;
-
-                  if (f == null) {
-                    while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
-                  }
-
-                  else {
-                    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
-                  }
-
-                  if (j) return s / j;
-                };
-
-                var median = function(array, f) {
-                  var numbers = [],
-                      n = array.length,
-                      a,
-                      i = -1;
-
-                  if (f == null) {
-                    while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
-                  }
-
-                  else {
-                    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
-                  }
-
-                  return threshold(numbers.sort(ascending), 0.5);
-                };
-
-                var merge = function(arrays) {
-                  var n = arrays.length,
-                      m,
-                      i = -1,
-                      j = 0,
-                      merged,
-                      array;
-
-                  while (++i < n) j += arrays[i].length;
-                  merged = new Array(j);
-
-                  while (--n >= 0) {
-                    array = arrays[n];
-                    m = array.length;
-                    while (--m >= 0) {
-                      merged[--j] = array[m];
-                    }
-                  }
-
-                  return merged;
-                };
-
-                var min = function(array, f) {
-                  var i = -1,
-                      n = array.length,
-                      a,
-                      b;
-
-                  if (f == null) {
-                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
-                    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
-                  }
-
-                  else {
-                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
-                    while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
-                  }
-
-                  return a;
-                };
-
-                var pairs = function(array) {
-                  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
-                  while (i < n) pairs[i] = [p, p = array[++i]];
-                  return pairs;
-                };
-
-                var permute = function(array, indexes) {
-                  var i = indexes.length, permutes = new Array(i);
-                  while (i--) permutes[i] = array[indexes[i]];
-                  return permutes;
-                };
-
-                var scan = function(array, compare) {
-                  if (!(n = array.length)) return;
-                  var i = 0,
-                      n,
-                      j = 0,
-                      xi,
-                      xj = array[j];
-
-                  if (!compare) compare = ascending;
-
-                  while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
-
-                  if (compare(xj, xj) === 0) return j;
-                };
-
-                var shuffle = function(array, i0, i1) {
-                  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
-                      t,
-                      i;
-
-                  while (m) {
-                    i = Math.random() * m-- | 0;
-                    t = array[m + i0];
-                    array[m + i0] = array[i + i0];
-                    array[i + i0] = t;
-                  }
-
-                  return array;
-                };
-
-                var sum = function(array, f) {
-                  var s = 0,
-                      n = array.length,
-                      a,
-                      i = -1;
-
-                  if (f == null) {
-                    while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
-                  }
-
-                  else {
-                    while (++i < n) if (a = +f(array[i], i, array)) s += a;
-                  }
-
-                  return s;
-                };
-
-                var transpose = function(matrix) {
-                  if (!(n = matrix.length)) return [];
-                  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
-                    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
-                      row[j] = matrix[j][i];
-                    }
-                  }
-                  return transpose;
-                };
-
-                function length(d) {
-                  return d.length;
-                }
-
-                var zip = function() {
-                  return transpose(arguments);
-                };
-
-                var prefix = "$";
-
-                function Map() {}
-
-                Map.prototype = map$1.prototype = {
-                  constructor: Map,
-                  has: function(key) {
-                    return (prefix + key) in this;
-                  },
-                  get: function(key) {
-                    return this[prefix + key];
-                  },
-                  set: function(key, value) {
-                    this[prefix + key] = value;
-                    return this;
-                  },
-                  remove: function(key) {
-                    var property = prefix + key;
-                    return property in this && delete this[property];
-                  },
-                  clear: function() {
-                    for (var property in this) if (property[0] === prefix) delete this[property];
-                  },
-                  keys: function() {
-                    var keys = [];
-                    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
-                    return keys;
-                  },
-                  values: function() {
-                    var values = [];
-                    for (var property in this) if (property[0] === prefix) values.push(this[property]);
-                    return values;
-                  },
-                  entries: function() {
-                    var entries = [];
-                    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
-                    return entries;
-                  },
-                  size: function() {
-                    var size = 0;
-                    for (var property in this) if (property[0] === prefix) ++size;
-                    return size;
-                  },
-                  empty: function() {
-                    for (var property in this) if (property[0] === prefix) return false;
-                    return true;
-                  },
-                  each: function(f) {
-                    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
-                  }
-                };
-
-                function map$1(object, f) {
-                  var map = new Map;
-
-                  // Copy constructor.
-                  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
-
-                  // Index array by numeric index or specified key function.
-                  else if (Array.isArray(object)) {
-                    var i = -1,
-                        n = object.length,
-                        o;
-
-                    if (f == null) while (++i < n) map.set(i, object[i]);
-                    else while (++i < n) map.set(f(o = object[i], i, object), o);
-                  }
-
-                  // Convert object to map.
-                  else if (object) for (var key in object) map.set(key, object[key]);
-
-                  return map;
-                }
-
-                var nest = function() {
-                  var keys = [],
-                      sortKeys = [],
-                      sortValues,
-                      rollup,
-                      nest;
-
-                  function apply(array, depth, createResult, setResult) {
-                    if (depth >= keys.length) return rollup != null
-                        ? rollup(array) : (sortValues != null
-                        ? array.sort(sortValues)
-                        : array);
-
-                    var i = -1,
-                        n = array.length,
-                        key = keys[depth++],
-                        keyValue,
-                        value,
-                        valuesByKey = map$1(),
-                        values,
-                        result = createResult();
-
-                    while (++i < n) {
-                      if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
-                        values.push(value);
-                      } else {
-                        valuesByKey.set(keyValue, [value]);
-                      }
-                    }
-
-                    valuesByKey.each(function(values, key) {
-                      setResult(result, key, apply(values, depth, createResult, setResult));
-                    });
-
-                    return result;
-                  }
-
-                  function entries(map, depth) {
-                    if (++depth > keys.length) return map;
-                    var array, sortKey = sortKeys[depth - 1];
-                    if (rollup != null && depth >= keys.length) array = map.entries();
-                    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
-                    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
-                  }
-
-                  return nest = {
-                    object: function(array) { return apply(array, 0, createObject, setObject); },
-                    map: function(array) { return apply(array, 0, createMap, setMap); },
-                    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
-                    key: function(d) { keys.push(d); return nest; },
-                    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
-                    sortValues: function(order) { sortValues = order; return nest; },
-                    rollup: function(f) { rollup = f; return nest; }
-                  };
-                };
-
-                function createObject() {
-                  return {};
-                }
-
-                function setObject(object, key, value) {
-                  object[key] = value;
-                }
-
-                function createMap() {
-                  return map$1();
-                }
-
-                function setMap(map, key, value) {
-                  map.set(key, value);
-                }
-
-                function Set() {}
-
-                var proto = map$1.prototype;
-
-                Set.prototype = set.prototype = {
-                  constructor: Set,
-                  has: proto.has,
-                  add: function(value) {
-                    value += "";
-                    this[prefix + value] = value;
-                    return this;
-                  },
-                  remove: proto.remove,
-                  clear: proto.clear,
-                  values: proto.keys,
-                  size: proto.size,
-                  empty: proto.empty,
-                  each: proto.each
-                };
-
-                function set(object, f) {
-                  var set = new Set;
-
-                  // Copy constructor.
-                  if (object instanceof Set) object.each(function(value) { set.add(value); });
-
-                  // Otherwise, assume it’s an array.
-                  else if (object) {
-                    var i = -1, n = object.length;
-                    if (f == null) while (++i < n) set.add(object[i]);
-                    else while (++i < n) set.add(f(object[i], i, object));
-                  }
-
-                  return set;
-                }
-
-                var keys = function(map) {
-                  var keys = [];
-                  for (var key in map) keys.push(key);
-                  return keys;
-                };
-
-                var values = function(map) {
-                  var values = [];
-                  for (var key in map) values.push(map[key]);
-                  return values;
-                };
-
-                var entries = function(map) {
-                  var entries = [];
-                  for (var key in map) entries.push({key: key, value: map[key]});
-                  return entries;
-                };
-
-                var uniform = function(min, max) {
-                  min = min == null ? 0 : +min;
-                  max = max == null ? 1 : +max;
-                  if (arguments.length === 1) max = min, min = 0;
-                  else max -= min;
-                  return function() {
-                    return Math.random() * max + min;
-                  };
-                };
-
-                var normal = function(mu, sigma) {
-                  var x, r;
-                  mu = mu == null ? 0 : +mu;
-                  sigma = sigma == null ? 1 : +sigma;
-                  return function() {
-                    var y;
-
-                    // If available, use the second previously-generated uniform random.
-                    if (x != null) y = x, x = null;
-
-                    // Otherwise, generate a new x and y.
-                    else do {
-                      x = Math.random() * 2 - 1;
-                      y = Math.random() * 2 - 1;
-                      r = x * x + y * y;
-                    } while (!r || r > 1);
-
-                    return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
-                  };
-                };
-
-                var logNormal = function() {
-                  var randomNormal = normal.apply(this, arguments);
-                  return function() {
-                    return Math.exp(randomNormal());
-                  };
-                };
-
-                var irwinHall = function(n) {
-                  return function() {
-                    for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
-                    return sum;
-                  };
-                };
-
-                var bates = function(n) {
-                  var randomIrwinHall = irwinHall(n);
-                  return function() {
-                    return randomIrwinHall() / n;
-                  };
-                };
-
-                var exponential = function(lambda) {
-                  return function() {
-                    return -Math.log(1 - Math.random()) / lambda;
-                  };
-                };
-
-                function linear(t) {
-                  return +t;
-                }
-
-                function quadIn(t) {
-                  return t * t;
-                }
-
-                function quadOut(t) {
-                  return t * (2 - t);
-                }
-
-                function quadInOut(t) {
-                  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
-                }
-
-                function cubicIn(t) {
-                  return t * t * t;
-                }
-
-                function cubicOut(t) {
-                  return --t * t * t + 1;
-                }
-
-                function cubicInOut(t) {
-                  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
-                }
-
-                var exponent = 3;
-
-                var polyIn = (function custom(e) {
-                  e = +e;
-
-                  function polyIn(t) {
-                    return Math.pow(t, e);
-                  }
-
-                  polyIn.exponent = custom;
-
-                  return polyIn;
-                })(exponent);
-
-                var polyOut = (function custom(e) {
-                  e = +e;
-
-                  function polyOut(t) {
-                    return 1 - Math.pow(1 - t, e);
-                  }
-
-                  polyOut.exponent = custom;
-
-                  return polyOut;
-                })(exponent);
-
-                var polyInOut = (function custom(e) {
-                  e = +e;
-
-                  function polyInOut(t) {
-                    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
-                  }
-
-                  polyInOut.exponent = custom;
-
-                  return polyInOut;
-                })(exponent);
-
-                var pi = Math.PI;
-                var halfPi = pi / 2;
-
-                function sinIn(t) {
-                  return 1 - Math.cos(t * halfPi);
-                }
-
-                function sinOut(t) {
-                  return Math.sin(t * halfPi);
-                }
-
-                function sinInOut(t) {
-                  return (1 - Math.cos(pi * t)) / 2;
-                }
-
-                function expIn(t) {
-                  return Math.pow(2, 10 * t - 10);
-                }
-
-                function expOut(t) {
-                  return 1 - Math.pow(2, -10 * t);
-                }
-
-                function expInOut(t) {
-                  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
-                }
-
-                function circleIn(t) {
-                  return 1 - Math.sqrt(1 - t * t);
-                }
-
-                function circleOut(t) {
-                  return Math.sqrt(1 - --t * t);
-                }
-
-                function circleInOut(t) {
-                  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
-                }
-
-                var b1 = 4 / 11;
-                var b2 = 6 / 11;
-                var b3 = 8 / 11;
-                var b4 = 3 / 4;
-                var b5 = 9 / 11;
-                var b6 = 10 / 11;
-                var b7 = 15 / 16;
-                var b8 = 21 / 22;
-                var b9 = 63 / 64;
-                var b0 = 1 / b1 / b1;
-
-                function bounceIn(t) {
-                  return 1 - bounceOut(1 - t);
-                }
-
-                function bounceOut(t) {
-                  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
-                }
-
-                function bounceInOut(t) {
-                  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
-                }
-
-                var overshoot = 1.70158;
-
-                var backIn = (function custom(s) {
-                  s = +s;
-
-                  function backIn(t) {
-                    return t * t * ((s + 1) * t - s);
-                  }
-
-                  backIn.overshoot = custom;
-
-                  return backIn;
-                })(overshoot);
-
-                var backOut = (function custom(s) {
-                  s = +s;
-
-                  function backOut(t) {
-                    return --t * t * ((s + 1) * t + s) + 1;
-                  }
-
-                  backOut.overshoot = custom;
-
-                  return backOut;
-                })(overshoot);
-
-                var backInOut = (function custom(s) {
-                  s = +s;
-
-                  function backInOut(t) {
-                    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
-                  }
-
-                  backInOut.overshoot = custom;
-
-                  return backInOut;
-                })(overshoot);
-
-                var tau = 2 * Math.PI;
-                var amplitude = 1;
-                var period = 0.3;
-
-                var elasticIn = (function custom(a, p) {
-                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-                  function elasticIn(t) {
-                    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
-                  }
-
-                  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
-                  elasticIn.period = function(p) { return custom(a, p); };
-
-                  return elasticIn;
-                })(amplitude, period);
-
-                var elasticOut = (function custom(a, p) {
-                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-                  function elasticOut(t) {
-                    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
-                  }
-
-                  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
-                  elasticOut.period = function(p) { return custom(a, p); };
-
-                  return elasticOut;
-                })(amplitude, period);
-
-                var elasticInOut = (function custom(a, p) {
-                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
-
-                  function elasticInOut(t) {
-                    return ((t = t * 2 - 1) < 0
-                        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
-                        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
-                  }
-
-                  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
-                  elasticInOut.period = function(p) { return custom(a, p); };
-
-                  return elasticInOut;
-                })(amplitude, period);
-
-                var area = function(polygon) {
-                  var i = -1,
-                      n = polygon.length,
-                      a,
-                      b = polygon[n - 1],
-                      area = 0;
-
-                  while (++i < n) {
-                    a = b;
-                    b = polygon[i];
-                    area += a[1] * b[0] - a[0] * b[1];
-                  }
-
-                  return area / 2;
-                };
-
-                var centroid = function(polygon) {
-                  var i = -1,
-                      n = polygon.length,
-                      x = 0,
-                      y = 0,
-                      a,
-                      b = polygon[n - 1],
-                      c,
-                      k = 0;
-
-                  while (++i < n) {
-                    a = b;
-                    b = polygon[i];
-                    k += c = a[0] * b[1] - b[0] * a[1];
-                    x += (a[0] + b[0]) * c;
-                    y += (a[1] + b[1]) * c;
-                  }
-
-                  return k *= 3, [x / k, y / k];
-                };
-
-                // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
-                // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
-                // right, +y is up). Returns a positive value if ABC is counter-clockwise,
-                // negative if clockwise, and zero if the points are collinear.
-                var cross = function(a, b, c) {
-                  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
-                };
-
-                function lexicographicOrder(a, b) {
-                  return a[0] - b[0] || a[1] - b[1];
-                }
-
-                // Computes the upper convex hull per the monotone chain algorithm.
-                // Assumes points.length >= 3, is sorted by x, unique in y.
-                // Returns an array of indices into points in left-to-right order.
-                function computeUpperHullIndexes(points) {
-                  var n = points.length,
-                      indexes = [0, 1],
-                      size = 2;
-
-                  for (var i = 2; i < n; ++i) {
-                    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
-                    indexes[size++] = i;
-                  }
-
-                  return indexes.slice(0, size); // remove popped points
-                }
-
-                var hull = function(points) {
-                  if ((n = points.length) < 3) return null;
-
-                  var i,
-                      n,
-                      sortedPoints = new Array(n),
-                      flippedPoints = new Array(n);
-
-                  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
-                  sortedPoints.sort(lexicographicOrder);
-                  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
-
-                  var upperIndexes = computeUpperHullIndexes(sortedPoints),
-                      lowerIndexes = computeUpperHullIndexes(flippedPoints);
-
-                  // Construct the hull polygon, removing possible duplicate endpoints.
-                  var skipLeft = lowerIndexes[0] === upperIndexes[0],
-                      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
-                      hull = [];
-
-                  // Add upper hull in right-to-l order.
-                  // Then add lower hull in left-to-right order.
-                  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
-                  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
-
-                  return hull;
-                };
-
-                var contains = function(polygon, point) {
-                  var n = polygon.length,
-                      p = polygon[n - 1],
-                      x = point[0], y = point[1],
-                      x0 = p[0], y0 = p[1],
-                      x1, y1,
-                      inside = false;
-
-                  for (var i = 0; i < n; ++i) {
-                    p = polygon[i], x1 = p[0], y1 = p[1];
-                    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
-                    x0 = x1, y0 = y1;
-                  }
-
-                  return inside;
-                };
-
-                var length$1 = function(polygon) {
-                  var i = -1,
-                      n = polygon.length,
-                      b = polygon[n - 1],
-                      xa,
-                      ya,
-                      xb = b[0],
-                      yb = b[1],
-                      perimeter = 0;
-
-                  while (++i < n) {
-                    xa = xb;
-                    ya = yb;
-                    b = polygon[i];
-                    xb = b[0];
-                    yb = b[1];
-                    xa -= xb;
-                    ya -= yb;
-                    perimeter += Math.sqrt(xa * xa + ya * ya);
-                  }
-
-                  return perimeter;
-                };
-
-                var pi$1 = Math.PI;
-                var tau$1 = 2 * pi$1;
-                var epsilon = 1e-6;
-                var tauEpsilon = tau$1 - epsilon;
-
-                function Path() {
-                  this._x0 = this._y0 = // start of current subpath
-                  this._x1 = this._y1 = null; // end of current subpath
-                  this._ = [];
-                }
-
-                function path() {
-                  return new Path;
-                }
-
-                Path.prototype = path.prototype = {
-                  constructor: Path,
-                  moveTo: function(x, y) {
-                    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
-                  },
-                  closePath: function() {
-                    if (this._x1 !== null) {
-                      this._x1 = this._x0, this._y1 = this._y0;
-                      this._.push("Z");
-                    }
-                  },
-                  lineTo: function(x, y) {
-                    this._.push("L", this._x1 = +x, ",", this._y1 = +y);
-                  },
-                  quadraticCurveTo: function(x1, y1, x, y) {
-                    this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
-                  },
-                  bezierCurveTo: function(x1, y1, x2, y2, x, y) {
-                    this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
-                  },
-                  arcTo: function(x1, y1, x2, y2, r) {
-                    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
-                    var x0 = this._x1,
-                        y0 = this._y1,
-                        x21 = x2 - x1,
-                        y21 = y2 - y1,
-                        x01 = x0 - x1,
-                        y01 = y0 - y1,
-                        l01_2 = x01 * x01 + y01 * y01;
-
-                    // Is the radius negative? Error.
-                    if (r < 0) throw new Error("negative radius: " + r);
-
-                    // Is this path empty? Move to (x1,y1).
-                    if (this._x1 === null) {
-                      this._.push(
-                        "M", this._x1 = x1, ",", this._y1 = y1
-                      );
-                    }
-
-                    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
-                    else if (!(l01_2 > epsilon)) {}
-
-                    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
-                    // Equivalently, is (x1,y1) coincident with (x2,y2)?
-                    // Or, is the radius zero? Line to (x1,y1).
-                    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
-                      this._.push(
-                        "L", this._x1 = x1, ",", this._y1 = y1
-                      );
-                    }
-
-                    // Otherwise, draw an arc!
-                    else {
-                      var x20 = x2 - x0,
-                          y20 = y2 - y0,
-                          l21_2 = x21 * x21 + y21 * y21,
-                          l20_2 = x20 * x20 + y20 * y20,
-                          l21 = Math.sqrt(l21_2),
-                          l01 = Math.sqrt(l01_2),
-                          l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
-                          t01 = l / l01,
-                          t21 = l / l21;
-
-                      // If the start tangent is not coincident with (x0,y0), line to.
-                      if (Math.abs(t01 - 1) > epsilon) {
-                        this._.push(
-                          "L", x1 + t01 * x01, ",", y1 + t01 * y01
-                        );
-                      }
-
-                      this._.push(
-                        "A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
-                      );
-                    }
-                  },
-                  arc: function(x, y, r, a0, a1, ccw) {
-                    x = +x, y = +y, r = +r;
-                    var dx = r * Math.cos(a0),
-                        dy = r * Math.sin(a0),
-                        x0 = x + dx,
-                        y0 = y + dy,
-                        cw = 1 ^ ccw,
-                        da = ccw ? a0 - a1 : a1 - a0;
-
-                    // Is the radius negative? Error.
-                    if (r < 0) throw new Error("negative radius: " + r);
-
-                    // Is this path empty? Move to (x0,y0).
-                    if (this._x1 === null) {
-                      this._.push(
-                        "M", x0, ",", y0
-                      );
-                    }
-
-                    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
-                    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
-                      this._.push(
-                        "L", x0, ",", y0
-                      );
-                    }
-
-                    // Is this arc empty? We’re done.
-                    if (!r) return;
-
-                    // Is this a complete circle? Draw two arcs to complete the circle.
-                    if (da > tauEpsilon) {
-                      this._.push(
-                        "A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
-                        "A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
-                      );
-                    }
-
-                    // Otherwise, draw an arc!
-                    else {
-                      if (da < 0) da = da % tau$1 + tau$1;
-                      this._.push(
-                        "A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
-                      );
-                    }
-                  },
-                  rect: function(x, y, w, h) {
-                    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
-                  },
-                  toString: function() {
-                    return this._.join("");
-                  }
-                };
-
-                var tree_add = function(d) {
-                  var x = +this._x.call(null, d),
-                      y = +this._y.call(null, d);
-                  return add(this.cover(x, y), x, y, d);
-                };
-
-                function add(tree, x, y, d) {
-                  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
-
-                  var parent,
-                      node = tree._root,
-                      leaf = {data: d},
-                      x0 = tree._x0,
-                      y0 = tree._y0,
-                      x1 = tree._x1,
-                      y1 = tree._y1,
-                      xm,
-                      ym,
-                      xp,
-                      yp,
-                      right,
-                      bottom,
-                      i,
-                      j;
-
-                  // If the tree is empty, initialize the root as a leaf.
-                  if (!node) return tree._root = leaf, tree;
-
-                  // Find the existing leaf for the new point, or add it.
-                  while (node.length) {
-                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-                    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
-                  }
-
-                  // Is the new point is exactly coincident with the existing point?
-                  xp = +tree._x.call(null, node.data);
-                  yp = +tree._y.call(null, node.data);
-                  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
-
-                  // Otherwise, split the leaf node until the old and new point are separated.
-                  do {
-                    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
-                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-                  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
-                  return parent[j] = node, parent[i] = leaf, tree;
-                }
-
-                function addAll(data) {
-                  var d, i, n = data.length,
-                      x,
-                      y,
-                      xz = new Array(n),
-                      yz = new Array(n),
-                      x0 = Infinity,
-                      y0 = Infinity,
-                      x1 = -Infinity,
-                      y1 = -Infinity;
-
-                  // Compute the points and their extent.
-                  for (i = 0; i < n; ++i) {
-                    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
-                    xz[i] = x;
-                    yz[i] = y;
-                    if (x < x0) x0 = x;
-                    if (x > x1) x1 = x;
-                    if (y < y0) y0 = y;
-                    if (y > y1) y1 = y;
-                  }
-
-                  // If there were no (valid) points, inherit the existing extent.
-                  if (x1 < x0) x0 = this._x0, x1 = this._x1;
-                  if (y1 < y0) y0 = this._y0, y1 = this._y1;
-
-                  // Expand the tree to cover the new points.
-                  this.cover(x0, y0).cover(x1, y1);
-
-                  // Add the new points.
-                  for (i = 0; i < n; ++i) {
-                    add(this, xz[i], yz[i], data[i]);
-                  }
-
-                  return this;
-                }
-
-                var tree_cover = function(x, y) {
-                  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
-
-                  var x0 = this._x0,
-                      y0 = this._y0,
-                      x1 = this._x1,
-                      y1 = this._y1;
-
-                  // If the quadtree has no extent, initialize them.
-                  // Integer extent are necessary so that if we later double the extent,
-                  // the existing quadrant boundaries don’t change due to floating point error!
-                  if (isNaN(x0)) {
-                    x1 = (x0 = Math.floor(x)) + 1;
-                    y1 = (y0 = Math.floor(y)) + 1;
-                  }
-
-                  // Otherwise, double repeatedly to cover.
-                  else if (x0 > x || x > x1 || y0 > y || y > y1) {
-                    var z = x1 - x0,
-                        node = this._root,
-                        parent,
-                        i;
-
-                    switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
-                      case 0: {
-                        do parent = new Array(4), parent[i] = node, node = parent;
-                        while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
-                        break;
-                      }
-                      case 1: {
-                        do parent = new Array(4), parent[i] = node, node = parent;
-                        while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
-                        break;
-                      }
-                      case 2: {
-                        do parent = new Array(4), parent[i] = node, node = parent;
-                        while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
-                        break;
-                      }
-                      case 3: {
-                        do parent = new Array(4), parent[i] = node, node = parent;
-                        while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
-                        break;
-                      }
-                    }
-
-                    if (this._root && this._root.length) this._root = node;
-                  }
-
-                  // If the quadtree covers the point already, just return.
-                  else return this;
-
-                  this._x0 = x0;
-                  this._y0 = y0;
-                  this._x1 = x1;
-                  this._y1 = y1;
-                  return this;
-                };
-
-                var tree_data = function() {
-                  var data = [];
-                  this.visit(function(node) {
-                    if (!node.length) do data.push(node.data); while (node = node.next)
-                  });
-                  return data;
-                };
-
-                var tree_extent = function(_) {
-                  return arguments.length
-                      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
-                      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
-                };
-
-                var Quad = function(node, x0, y0, x1, y1) {
-                  this.node = node;
-                  this.x0 = x0;
-                  this.y0 = y0;
-                  this.x1 = x1;
-                  this.y1 = y1;
-                };
-
-                var tree_find = function(x, y, radius) {
-                  var data,
-                      x0 = this._x0,
-                      y0 = this._y0,
-                      x1,
-                      y1,
-                      x2,
-                      y2,
-                      x3 = this._x1,
-                      y3 = this._y1,
-                      quads = [],
-                      node = this._root,
-                      q,
-                      i;
-
-                  if (node) quads.push(new Quad(node, x0, y0, x3, y3));
-                  if (radius == null) radius = Infinity;
-                  else {
-                    x0 = x - radius, y0 = y - radius;
-                    x3 = x + radius, y3 = y + radius;
-                    radius *= radius;
-                  }
-
-                  while (q = quads.pop()) {
-
-                    // Stop searching if this quadrant can’t contain a closer node.
-                    if (!(node = q.node)
-                        || (x1 = q.x0) > x3
-                        || (y1 = q.y0) > y3
-                        || (x2 = q.x1) < x0
-                        || (y2 = q.y1) < y0) continue;
-
-                    // Bisect the current quadrant.
-                    if (node.length) {
-                      var xm = (x1 + x2) / 2,
-                          ym = (y1 + y2) / 2;
-
-                      quads.push(
-                        new Quad(node[3], xm, ym, x2, y2),
-                        new Quad(node[2], x1, ym, xm, y2),
-                        new Quad(node[1], xm, y1, x2, ym),
-                        new Quad(node[0], x1, y1, xm, ym)
-                      );
-
-                      // Visit the closest quadrant first.
-                      if (i = (y >= ym) << 1 | (x >= xm)) {
-                        q = quads[quads.length - 1];
-                        quads[quads.length - 1] = quads[quads.length - 1 - i];
-                        quads[quads.length - 1 - i] = q;
-                      }
-                    }
-
-                    // Visit this point. (Visiting coincident points isn’t necessary!)
-                    else {
-                      var dx = x - +this._x.call(null, node.data),
-                          dy = y - +this._y.call(null, node.data),
-                          d2 = dx * dx + dy * dy;
-                      if (d2 < radius) {
-                        var d = Math.sqrt(radius = d2);
-                        x0 = x - d, y0 = y - d;
-                        x3 = x + d, y3 = y + d;
-                        data = node.data;
-                      }
-                    }
-                  }
-
-                  return data;
-                };
-
-                var tree_remove = function(d) {
-                  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
-
-                  var parent,
-                      node = this._root,
-                      retainer,
-                      previous,
-                      next,
-                      x0 = this._x0,
-                      y0 = this._y0,
-                      x1 = this._x1,
-                      y1 = this._y1,
-                      x,
-                      y,
-                      xm,
-                      ym,
-                      right,
-                      bottom,
-                      i,
-                      j;
-
-                  // If the tree is empty, initialize the root as a leaf.
-                  if (!node) return this;
-
-                  // Find the leaf node for the point.
-                  // While descending, also retain the deepest parent with a non-removed sibling.
-                  if (node.length) while (true) {
-                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
-                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
-                    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
-                    if (!node.length) break;
-                    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
-                  }
-
-                  // Find the point to remove.
-                  while (node.data !== d) if (!(previous = node, node = node.next)) return this;
-                  if (next = node.next) delete node.next;
-
-                  // If there are multiple coincident points, remove just the point.
-                  if (previous) return (next ? previous.next = next : delete previous.next), this;
-
-                  // If this is the root point, remove it.
-                  if (!parent) return this._root = next, this;
-
-                  // Remove this leaf.
-                  next ? parent[i] = next : delete parent[i];
-
-                  // If the parent now contains exactly one leaf, collapse superfluous parents.
-                  if ((node = parent[0] || parent[1] || parent[2] || parent[3])
-                      && node === (parent[3] || parent[2] || parent[1] || parent[0])
-                      && !node.length) {
-                    if (retainer) retainer[j] = node;
-                    else this._root = node;
-                  }
-
-                  return this;
-                };
-
-                function removeAll(data) {
-                  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
-                  return this;
-                }
-
-                var tree_root = function() {
-                  return this._root;
-                };
-
-                var tree_size = function() {
-                  var size = 0;
-                  this.visit(function(node) {
-                    if (!node.length) do ++size; while (node = node.next)
-                  });
-                  return size;
-                };
-
-                var tree_visit = function(callback) {
-                  var quads = [], q, node = this._root, child, x0, y0, x1, y1;
-                  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
-                  while (q = quads.pop()) {
-                    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
-                      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
-                      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
-                      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
-                      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
-                      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
-                    }
-                  }
-                  return this;
-                };
-
-                var tree_visitAfter = function(callback) {
-                  var quads = [], next = [], q;
-                  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
-                  while (q = quads.pop()) {
-                    var node = q.node;
-                    if (node.length) {
-                      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
-                      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
-                      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
-                      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
-                      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
-                    }
-                    next.push(q);
-                  }
-                  while (q = next.pop()) {
-                    callback(q.node, q.x0, q.y0, q.x1, q.y1);
-                  }
-                  return this;
-                };
-
-                function defaultX(d) {
-                  return d[0];
-                }
-
-                var tree_x = function(_) {
-                  return arguments.length ? (this._x = _, this) : this._x;
-                };
-
-                function defaultY(d) {
-                  return d[1];
-                }
-
-                var tree_y = function(_) {
-                  return arguments.length ? (this._y = _, this) : this._y;
-                };
-
-                function quadtree(nodes, x, y) {
-                  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
-                  return nodes == null ? tree : tree.addAll(nodes);
-                }
-
-                function Quadtree(x, y, x0, y0, x1, y1) {
-                  this._x = x;
-                  this._y = y;
-                  this._x0 = x0;
-                  this._y0 = y0;
-                  this._x1 = x1;
-                  this._y1 = y1;
-                  this._root = undefined;
-                }
-
-                function leaf_copy(leaf) {
-                  var copy = {data: leaf.data}, next = copy;
-                  while (leaf = leaf.next) next = next.next = {data: leaf.data};
-                  return copy;
-                }
-
-                var treeProto = quadtree.prototype = Quadtree.prototype;
-
-                treeProto.copy = function() {
-                  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
-                      node = this._root,
-                      nodes,
-                      child;
-
-                  if (!node) return copy;
-
-                  if (!node.length) return copy._root = leaf_copy(node), copy;
-
-                  nodes = [{source: node, target: copy._root = new Array(4)}];
-                  while (node = nodes.pop()) {
-                    for (var i = 0; i < 4; ++i) {
-                      if (child = node.source[i]) {
-                        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
-                        else node.target[i] = leaf_copy(child);
-                      }
-                    }
-                  }
-
-                  return copy;
-                };
-
-                treeProto.add = tree_add;
-                treeProto.addAll = addAll;
-                treeProto.cover = tree_cover;
-                treeProto.data = tree_data;
-                treeProto.extent = tree_extent;
-                treeProto.find = tree_find;
-                treeProto.remove = tree_remove;
-                treeProto.removeAll = removeAll;
-                treeProto.root = tree_root;
-                treeProto.size = tree_size;
-                treeProto.visit = tree_visit;
-                treeProto.visitAfter = tree_visitAfter;
-                treeProto.x = tree_x;
-                treeProto.y = tree_y;
-
-                var slice$1 = [].slice;
-
-                var noabort = {};
-
-                function Queue(size) {
-                  if (!(size >= 1)) throw new Error;
-                  this._size = size;
-                  this._call =
-                  this._error = null;
-                  this._tasks = [];
-                  this._data = [];
-                  this._waiting =
-                  this._active =
-                  this._ended =
-                  this._start = 0; // inside a synchronous task callback?
-                }
-
-                Queue.prototype = queue.prototype = {
-                  constructor: Queue,
-                  defer: function(callback) {
-                    if (typeof callback !== "function" || this._call) throw new Error;
-                    if (this._error != null) return this;
-                    var t = slice$1.call(arguments, 1);
-                    t.push(callback);
-                    ++this._waiting, this._tasks.push(t);
-                    poke(this);
-                    return this;
-                  },
-                  abort: function() {
-                    if (this._error == null) abort(this, new Error("abort"));
-                    return this;
-                  },
-                  await: function(callback) {
-                    if (typeof callback !== "function" || this._call) throw new Error;
-                    this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
-                    maybeNotify(this);
-                    return this;
-                  },
-                  awaitAll: function(callback) {
-                    if (typeof callback !== "function" || this._call) throw new Error;
-                    this._call = callback;
-                    maybeNotify(this);
-                    return this;
-                  }
-                };
-
-                function poke(q) {
-                  if (!q._start) {
-                    try { start(q); } // let the current task complete
-                    catch (e) {
-                      if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
-                      else if (!q._data) throw e; // await callback errored synchronously
-                    }
-                  }
-                }
-
-                function start(q) {
-                  while (q._start = q._waiting && q._active < q._size) {
-                    var i = q._ended + q._active,
-                        t = q._tasks[i],
-                        j = t.length - 1,
-                        c = t[j];
-                    t[j] = end(q, i);
-                    --q._waiting, ++q._active;
-                    t = c.apply(null, t);
-                    if (!q._tasks[i]) continue; // task finished synchronously
-                    q._tasks[i] = t || noabort;
-                  }
-                }
-
-                function end(q, i) {
-                  return function(e, r) {
-                    if (!q._tasks[i]) return; // ignore multiple callbacks
-                    --q._active, ++q._ended;
-                    q._tasks[i] = null;
-                    if (q._error != null) return; // ignore secondary errors
-                    if (e != null) {
-                      abort(q, e);
-                    } else {
-                      q._data[i] = r;
-                      if (q._waiting) poke(q);
-                      else maybeNotify(q);
-                    }
-                  };
-                }
-
-                function abort(q, e) {
-                  var i = q._tasks.length, t;
-                  q._error = e; // ignore active callbacks
-                  q._data = undefined; // allow gc
-                  q._waiting = NaN; // prevent starting
-
-                  while (--i >= 0) {
-                    if (t = q._tasks[i]) {
-                      q._tasks[i] = null;
-                      if (t.abort) {
-                        try { t.abort(); }
-                        catch (e) { /* ignore */ }
-                      }
-                    }
-                  }
-
-                  q._active = NaN; // allow notification
-                  maybeNotify(q);
-                }
-
-                function maybeNotify(q) {
-                  if (!q._active && q._call) {
-                    var d = q._data;
-                    q._data = undefined; // allow gc
-                    q._call(q._error, d);
-                  }
-                }
-
-                function queue(concurrency) {
-                  return new Queue(arguments.length ? +concurrency : Infinity);
-                }
-
-                var constant$2 = function(x) {
-                  return function constant() {
-                    return x;
-                  };
-                };
-
-                var epsilon$1 = 1e-12;
-                var pi$2 = Math.PI;
-                var halfPi$1 = pi$2 / 2;
-                var tau$2 = 2 * pi$2;
-
-                function arcInnerRadius(d) {
-                  return d.innerRadius;
-                }
-
-                function arcOuterRadius(d) {
-                  return d.outerRadius;
-                }
-
-                function arcStartAngle(d) {
-                  return d.startAngle;
-                }
-
-                function arcEndAngle(d) {
-                  return d.endAngle;
-                }
-
-                function arcPadAngle(d) {
-                  return d && d.padAngle; // Note: optional!
-                }
-
-                function asin(x) {
-                  return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);
-                }
-
-                function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
-                  var x10 = x1 - x0, y10 = y1 - y0,
-                      x32 = x3 - x2, y32 = y3 - y2,
-                      t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
-                  return [x0 + t * x10, y0 + t * y10];
-                }
-
-                // Compute perpendicular offset line of length rc.
-                // http://mathworld.wolfram.com/Circle-LineIntersection.html
-                function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
-                  var x01 = x0 - x1,
-                      y01 = y0 - y1,
-                      lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
-                      ox = lo * y01,
-                      oy = -lo * x01,
-                      x11 = x0 + ox,
-                      y11 = y0 + oy,
-                      x10 = x1 + ox,
-                      y10 = y1 + oy,
-                      x00 = (x11 + x10) / 2,
-                      y00 = (y11 + y10) / 2,
-                      dx = x10 - x11,
-                      dy = y10 - y11,
-                      d2 = dx * dx + dy * dy,
-                      r = r1 - rc,
-                      D = x11 * y10 - x10 * y11,
-                      d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
-                      cx0 = (D * dy - dx * d) / d2,
-                      cy0 = (-D * dx - dy * d) / d2,
-                      cx1 = (D * dy + dx * d) / d2,
-                      cy1 = (-D * dx + dy * d) / d2,
-                      dx0 = cx0 - x00,
-                      dy0 = cy0 - y00,
-                      dx1 = cx1 - x00,
-                      dy1 = cy1 - y00;
-
-                  // Pick the closer of the two intersection points.
-                  // TODO Is there a faster way to determine which intersection to use?
-                  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
-
-                  return {
-                    cx: cx0,
-                    cy: cy0,
-                    x01: -ox,
-                    y01: -oy,
-                    x11: cx0 * (r1 / r - 1),
-                    y11: cy0 * (r1 / r - 1)
-                  };
-                }
-
-                var arc = function() {
-                  var innerRadius = arcInnerRadius,
-                      outerRadius = arcOuterRadius,
-                      cornerRadius = constant$2(0),
-                      padRadius = null,
-                      startAngle = arcStartAngle,
-                      endAngle = arcEndAngle,
-                      padAngle = arcPadAngle,
-                      context = null;
-
-                  function arc() {
-                    var buffer,
-                        r,
-                        r0 = +innerRadius.apply(this, arguments),
-                        r1 = +outerRadius.apply(this, arguments),
-                        a0 = startAngle.apply(this, arguments) - halfPi$1,
-                        a1 = endAngle.apply(this, arguments) - halfPi$1,
-                        da = Math.abs(a1 - a0),
-                        cw = a1 > a0;
-
-                    if (!context) context = buffer = path();
-
-                    // Ensure that the outer radius is always larger than the inner radius.
-                    if (r1 < r0) r = r1, r1 = r0, r0 = r;
-
-                    // Is it a point?
-                    if (!(r1 > epsilon$1)) context.moveTo(0, 0);
-
-                    // Or is it a circle or annulus?
-                    else if (da > tau$2 - epsilon$1) {
-                      context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
-                      context.arc(0, 0, r1, a0, a1, !cw);
-                      if (r0 > epsilon$1) {
-                        context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
-                        context.arc(0, 0, r0, a1, a0, cw);
-                      }
-                    }
-
-                    // Or is it a circular or annular sector?
-                    else {
-                      var a01 = a0,
-                          a11 = a1,
-                          a00 = a0,
-                          a10 = a1,
-                          da0 = da,
-                          da1 = da,
-                          ap = padAngle.apply(this, arguments) / 2,
-                          rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
-                          rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
-                          rc0 = rc,
-                          rc1 = rc,
-                          t0,
-                          t1;
-
-                      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
-                      if (rp > epsilon$1) {
-                        var p0 = asin(rp / r0 * Math.sin(ap)),
-                            p1 = asin(rp / r1 * Math.sin(ap));
-                        if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
-                        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
-                        if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
-                        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
-                      }
-
-                      var x01 = r1 * Math.cos(a01),
-                          y01 = r1 * Math.sin(a01),
-                          x10 = r0 * Math.cos(a10),
-                          y10 = r0 * Math.sin(a10);
-
-                      // Apply rounded corners?
-                      if (rc > epsilon$1) {
-                        var x11 = r1 * Math.cos(a11),
-                            y11 = r1 * Math.sin(a11),
-                            x00 = r0 * Math.cos(a00),
-                            y00 = r0 * Math.sin(a00);
-
-                        // Restrict the corner radius according to the sector angle.
-                        if (da < pi$2) {
-                          var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
-                              ax = x01 - oc[0],
-                              ay = y01 - oc[1],
-                              bx = x11 - oc[0],
-                              by = y11 - oc[1],
-                              kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
-                              lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
-                          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
-                          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
-                        }
-                      }
-
-                      // Is the sector collapsed to a line?
-                      if (!(da1 > epsilon$1)) context.moveTo(x01, y01);
-
-                      // Does the sector’s outer ring have rounded corners?
-                      else if (rc1 > epsilon$1) {
-                        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
-                        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
-
-                        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-                        // Have the corners merged?
-                        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
-
-                        // Otherwise, draw the two corners and the ring.
-                        else {
-                          context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
-                          context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
-                          context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
-                        }
-                      }
-
-                      // Or is the outer ring just a circular arc?
-                      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
-
-                      // Is there no inner ring, and it’s a circular sector?
-                      // Or perhaps it’s an annular sector collapsed due to padding?
-                      if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);
-
-                      // Does the sector’s inner ring (or point) have rounded corners?
-                      else if (rc0 > epsilon$1) {
-                        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
-                        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
-
-                        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-                        // Have the corners merged?
-                        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
-
-                        // Otherwise, draw the two corners and the ring.
-                        else {
-                          context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
-                          context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
-                          context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
-                        }
-                      }
-
-                      // Or is the inner ring just a circular arc?
-                      else context.arc(0, 0, r0, a10, a00, cw);
-                    }
-
-                    context.closePath();
-
-                    if (buffer) return context = null, buffer + "" || null;
-                  }
-
-                  arc.centroid = function() {
-                    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
-                        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;
-                    return [Math.cos(a) * r, Math.sin(a) * r];
-                  };
-
-                  arc.innerRadius = function(_) {
-                    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius;
-                  };
-
-                  arc.outerRadius = function(_) {
-                    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius;
-                  };
-
-                  arc.cornerRadius = function(_) {
-                    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius;
-                  };
-
-                  arc.padRadius = function(_) {
-                    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius;
-                  };
-
-                  arc.startAngle = function(_) {
-                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle;
-                  };
-
-                  arc.endAngle = function(_) {
-                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle;
-                  };
-
-                  arc.padAngle = function(_) {
-                    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle;
-                  };
-
-                  arc.context = function(_) {
-                    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
-                  };
-
-                  return arc;
-                };
-
-                function Linear(context) {
-                  this._context = context;
-                }
-
-                Linear.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; // proceed
-                      default: this._context.lineTo(x, y); break;
-                    }
-                  }
-                };
-
-                var curveLinear = function(context) {
-                  return new Linear(context);
-                };
-
-                function x(p) {
-                  return p[0];
-                }
-
-                function y(p) {
-                  return p[1];
-                }
-
-                var line = function() {
-                  var x$$1 = x,
-                      y$$1 = y,
-                      defined = constant$2(true),
-                      context = null,
-                      curve = curveLinear,
-                      output = null;
-
-                  function line(data) {
-                    var i,
-                        n = data.length,
-                        d,
-                        defined0 = false,
-                        buffer;
-
-                    if (context == null) output = curve(buffer = path());
-
-                    for (i = 0; i <= n; ++i) {
-                      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
-                        if (defined0 = !defined0) output.lineStart();
-                        else output.lineEnd();
-                      }
-                      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
-                    }
-
-                    if (buffer) return output = null, buffer + "" || null;
-                  }
-
-                  line.x = function(_) {
-                    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1;
-                  };
-
-                  line.y = function(_) {
-                    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1;
-                  };
-
-                  line.defined = function(_) {
-                    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined;
-                  };
-
-                  line.curve = function(_) {
-                    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
-                  };
-
-                  line.context = function(_) {
-                    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
-                  };
-
-                  return line;
-                };
-
-                var area$1 = function() {
-                  var x0 = x,
-                      x1 = null,
-                      y0 = constant$2(0),
-                      y1 = y,
-                      defined = constant$2(true),
-                      context = null,
-                      curve = curveLinear,
-                      output = null;
-
-                  function area(data) {
-                    var i,
-                        j,
-                        k,
-                        n = data.length,
-                        d,
-                        defined0 = false,
-                        buffer,
-                        x0z = new Array(n),
-                        y0z = new Array(n);
-
-                    if (context == null) output = curve(buffer = path());
-
-                    for (i = 0; i <= n; ++i) {
-                      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
-                        if (defined0 = !defined0) {
-                          j = i;
-                          output.areaStart();
-                          output.lineStart();
-                        } else {
-                          output.lineEnd();
-                          output.lineStart();
-                          for (k = i - 1; k >= j; --k) {
-                            output.point(x0z[k], y0z[k]);
-                          }
-                          output.lineEnd();
-                          output.areaEnd();
-                        }
-                      }
-                      if (defined0) {
-                        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
-                        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
-                      }
-                    }
-
-                    if (buffer) return output = null, buffer + "" || null;
-                  }
-
-                  function arealine() {
-                    return line().defined(defined).curve(curve).context(context);
-                  }
-
-                  area.x = function(_) {
-                    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0;
-                  };
-
-                  area.x0 = function(_) {
-                    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0;
-                  };
-
-                  area.x1 = function(_) {
-                    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1;
-                  };
-
-                  area.y = function(_) {
-                    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0;
-                  };
-
-                  area.y0 = function(_) {
-                    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0;
-                  };
-
-                  area.y1 = function(_) {
-                    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1;
-                  };
-
-                  area.lineX0 =
-                  area.lineY0 = function() {
-                    return arealine().x(x0).y(y0);
-                  };
-
-                  area.lineY1 = function() {
-                    return arealine().x(x0).y(y1);
-                  };
-
-                  area.lineX1 = function() {
-                    return arealine().x(x1).y(y0);
-                  };
-
-                  area.defined = function(_) {
-                    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined;
-                  };
-
-                  area.curve = function(_) {
-                    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
-                  };
-
-                  area.context = function(_) {
-                    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
-                  };
-
-                  return area;
-                };
-
-                var descending$1 = function(a, b) {
-                  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-                };
-
-                var identity$1 = function(d) {
-                  return d;
-                };
-
-                var pie = function() {
-                  var value = identity$1,
-                      sortValues = descending$1,
-                      sort = null,
-                      startAngle = constant$2(0),
-                      endAngle = constant$2(tau$2),
-                      padAngle = constant$2(0);
-
-                  function pie(data) {
-                    var i,
-                        n = data.length,
-                        j,
-                        k,
-                        sum = 0,
-                        index = new Array(n),
-                        arcs = new Array(n),
-                        a0 = +startAngle.apply(this, arguments),
-                        da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),
-                        a1,
-                        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
-                        pa = p * (da < 0 ? -1 : 1),
-                        v;
-
-                    for (i = 0; i < n; ++i) {
-                      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
-                        sum += v;
-                      }
-                    }
-
-                    // Optionally sort the arcs by previously-computed values or by data.
-                    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
-                    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
-
-                    // Compute the arcs! They are stored in the original data's order.
-                    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
-                      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
-                        data: data[j],
-                        index: i,
-                        value: v,
-                        startAngle: a0,
-                        endAngle: a1,
-                        padAngle: p
-                      };
-                    }
-
-                    return arcs;
-                  }
-
-                  pie.value = function(_) {
-                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value;
-                  };
-
-                  pie.sortValues = function(_) {
-                    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
-                  };
-
-                  pie.sort = function(_) {
-                    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
-                  };
-
-                  pie.startAngle = function(_) {
-                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle;
-                  };
-
-                  pie.endAngle = function(_) {
-                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle;
-                  };
-
-                  pie.padAngle = function(_) {
-                    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle;
-                  };
-
-                  return pie;
-                };
-
-                var curveRadialLinear = curveRadial(curveLinear);
-
-                function Radial(curve) {
-                  this._curve = curve;
-                }
-
-                Radial.prototype = {
-                  areaStart: function() {
-                    this._curve.areaStart();
-                  },
-                  areaEnd: function() {
-                    this._curve.areaEnd();
-                  },
-                  lineStart: function() {
-                    this._curve.lineStart();
-                  },
-                  lineEnd: function() {
-                    this._curve.lineEnd();
-                  },
-                  point: function(a, r) {
-                    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
-                  }
-                };
-
-                function curveRadial(curve) {
-
-                  function radial(context) {
-                    return new Radial(curve(context));
-                  }
-
-                  radial._curve = curve;
-
-                  return radial;
-                }
-
-                function radialLine(l) {
-                  var c = l.curve;
-
-                  l.angle = l.x, delete l.x;
-                  l.radius = l.y, delete l.y;
-
-                  l.curve = function(_) {
-                    return arguments.length ? c(curveRadial(_)) : c()._curve;
-                  };
-
-                  return l;
-                }
-
-                var radialLine$1 = function() {
-                  return radialLine(line().curve(curveRadialLinear));
-                };
-
-                var radialArea = function() {
-                  var a = area$1().curve(curveRadialLinear),
-                      c = a.curve,
-                      x0 = a.lineX0,
-                      x1 = a.lineX1,
-                      y0 = a.lineY0,
-                      y1 = a.lineY1;
-
-                  a.angle = a.x, delete a.x;
-                  a.startAngle = a.x0, delete a.x0;
-                  a.endAngle = a.x1, delete a.x1;
-                  a.radius = a.y, delete a.y;
-                  a.innerRadius = a.y0, delete a.y0;
-                  a.outerRadius = a.y1, delete a.y1;
-                  a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
-                  a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
-                  a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
-                  a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
-
-                  a.curve = function(_) {
-                    return arguments.length ? c(curveRadial(_)) : c()._curve;
-                  };
-
-                  return a;
-                };
-
-                var circle = {
-                  draw: function(context, size) {
-                    var r = Math.sqrt(size / pi$2);
-                    context.moveTo(r, 0);
-                    context.arc(0, 0, r, 0, tau$2);
-                  }
-                };
-
-                var cross$1 = {
-                  draw: function(context, size) {
-                    var r = Math.sqrt(size / 5) / 2;
-                    context.moveTo(-3 * r, -r);
-                    context.lineTo(-r, -r);
-                    context.lineTo(-r, -3 * r);
-                    context.lineTo(r, -3 * r);
-                    context.lineTo(r, -r);
-                    context.lineTo(3 * r, -r);
-                    context.lineTo(3 * r, r);
-                    context.lineTo(r, r);
-                    context.lineTo(r, 3 * r);
-                    context.lineTo(-r, 3 * r);
-                    context.lineTo(-r, r);
-                    context.lineTo(-3 * r, r);
-                    context.closePath();
-                  }
-                };
-
-                var tan30 = Math.sqrt(1 / 3);
-                var tan30_2 = tan30 * 2;
-
-                var diamond = {
-                  draw: function(context, size) {
-                    var y = Math.sqrt(size / tan30_2),
-                        x = y * tan30;
-                    context.moveTo(0, -y);
-                    context.lineTo(x, 0);
-                    context.lineTo(0, y);
-                    context.lineTo(-x, 0);
-                    context.closePath();
-                  }
-                };
-
-                var ka = 0.89081309152928522810;
-                var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);
-                var kx = Math.sin(tau$2 / 10) * kr;
-                var ky = -Math.cos(tau$2 / 10) * kr;
-
-                var star = {
-                  draw: function(context, size) {
-                    var r = Math.sqrt(size * ka),
-                        x = kx * r,
-                        y = ky * r;
-                    context.moveTo(0, -r);
-                    context.lineTo(x, y);
-                    for (var i = 1; i < 5; ++i) {
-                      var a = tau$2 * i / 5,
-                          c = Math.cos(a),
-                          s = Math.sin(a);
-                      context.lineTo(s * r, -c * r);
-                      context.lineTo(c * x - s * y, s * x + c * y);
-                    }
-                    context.closePath();
-                  }
-                };
-
-                var square = {
-                  draw: function(context, size) {
-                    var w = Math.sqrt(size),
-                        x = -w / 2;
-                    context.rect(x, x, w, w);
-                  }
-                };
-
-                var sqrt3 = Math.sqrt(3);
-
-                var triangle = {
-                  draw: function(context, size) {
-                    var y = -Math.sqrt(size / (sqrt3 * 3));
-                    context.moveTo(0, y * 2);
-                    context.lineTo(-sqrt3 * y, -y);
-                    context.lineTo(sqrt3 * y, -y);
-                    context.closePath();
-                  }
-                };
-
-                var c = -0.5;
-                var s = Math.sqrt(3) / 2;
-                var k = 1 / Math.sqrt(12);
-                var a = (k / 2 + 1) * 3;
-
-                var wye = {
-                  draw: function(context, size) {
-                    var r = Math.sqrt(size / a),
-                        x0 = r / 2,
-                        y0 = r * k,
-                        x1 = x0,
-                        y1 = r * k + r,
-                        x2 = -x1,
-                        y2 = y1;
-                    context.moveTo(x0, y0);
-                    context.lineTo(x1, y1);
-                    context.lineTo(x2, y2);
-                    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
-                    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
-                    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
-                    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
-                    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
-                    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
-                    context.closePath();
-                  }
-                };
-
-                var symbols = [
-                  circle,
-                  cross$1,
-                  diamond,
-                  square,
-                  star,
-                  triangle,
-                  wye
-                ];
-
-                var symbol = function() {
-                  var type = constant$2(circle),
-                      size = constant$2(64),
-                      context = null;
-
-                  function symbol() {
-                    var buffer;
-                    if (!context) context = buffer = path();
-                    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
-                    if (buffer) return context = null, buffer + "" || null;
-                  }
-
-                  symbol.type = function(_) {
-                    return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type;
-                  };
-
-                  symbol.size = function(_) {
-                    return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size;
-                  };
-
-                  symbol.context = function(_) {
-                    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
-                  };
-
-                  return symbol;
-                };
-
-                var noop = function() {};
-
-                function point(that, x, y) {
-                  that._context.bezierCurveTo(
-                    (2 * that._x0 + that._x1) / 3,
-                    (2 * that._y0 + that._y1) / 3,
-                    (that._x0 + 2 * that._x1) / 3,
-                    (that._y0 + 2 * that._y1) / 3,
-                    (that._x0 + 4 * that._x1 + x) / 6,
-                    (that._y0 + 4 * that._y1 + y) / 6
-                  );
-                }
-
-                function Basis(context) {
-                  this._context = context;
-                }
-
-                Basis.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 =
-                    this._y0 = this._y1 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 3: point(this, this._x1, this._y1); // proceed
-                      case 2: this._context.lineTo(this._x1, this._y1); break;
-                    }
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
-                      default: point(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = x;
-                    this._y0 = this._y1, this._y1 = y;
-                  }
-                };
-
-                var basis = function(context) {
-                  return new Basis(context);
-                };
-
-                function BasisClosed(context) {
-                  this._context = context;
-                }
-
-                BasisClosed.prototype = {
-                  areaStart: noop,
-                  areaEnd: noop,
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
-                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 1: {
-                        this._context.moveTo(this._x2, this._y2);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 2: {
-                        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
-                        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 3: {
-                        this.point(this._x2, this._y2);
-                        this.point(this._x3, this._y3);
-                        this.point(this._x4, this._y4);
-                        break;
-                      }
-                    }
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
-                      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
-                      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
-                      default: point(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = x;
-                    this._y0 = this._y1, this._y1 = y;
-                  }
-                };
-
-                var basisClosed = function(context) {
-                  return new BasisClosed(context);
-                };
-
-                function BasisOpen(context) {
-                  this._context = context;
-                }
-
-                BasisOpen.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 =
-                    this._y0 = this._y1 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
-                      case 3: this._point = 4; // proceed
-                      default: point(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = x;
-                    this._y0 = this._y1, this._y1 = y;
-                  }
-                };
-
-                var basisOpen = function(context) {
-                  return new BasisOpen(context);
-                };
-
-                function Bundle(context, beta) {
-                  this._basis = new Basis(context);
-                  this._beta = beta;
-                }
-
-                Bundle.prototype = {
-                  lineStart: function() {
-                    this._x = [];
-                    this._y = [];
-                    this._basis.lineStart();
-                  },
-                  lineEnd: function() {
-                    var x = this._x,
-                        y = this._y,
-                        j = x.length - 1;
-
-                    if (j > 0) {
-                      var x0 = x[0],
-                          y0 = y[0],
-                          dx = x[j] - x0,
-                          dy = y[j] - y0,
-                          i = -1,
-                          t;
-
-                      while (++i <= j) {
-                        t = i / j;
-                        this._basis.point(
-                          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
-                          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
-                        );
-                      }
-                    }
-
-                    this._x = this._y = null;
-                    this._basis.lineEnd();
-                  },
-                  point: function(x, y) {
-                    this._x.push(+x);
-                    this._y.push(+y);
-                  }
-                };
-
-                var bundle = (function custom(beta) {
-
-                  function bundle(context) {
-                    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
-                  }
-
-                  bundle.beta = function(beta) {
-                    return custom(+beta);
-                  };
-
-                  return bundle;
-                })(0.85);
-
-                function point$1(that, x, y) {
-                  that._context.bezierCurveTo(
-                    that._x1 + that._k * (that._x2 - that._x0),
-                    that._y1 + that._k * (that._y2 - that._y0),
-                    that._x2 + that._k * (that._x1 - x),
-                    that._y2 + that._k * (that._y1 - y),
-                    that._x2,
-                    that._y2
-                  );
-                }
-
-                function Cardinal(context, tension) {
-                  this._context = context;
-                  this._k = (1 - tension) / 6;
-                }
-
-                Cardinal.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 =
-                    this._y0 = this._y1 = this._y2 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 2: this._context.lineTo(this._x2, this._y2); break;
-                      case 3: point$1(this, this._x1, this._y1); break;
-                    }
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
-                      case 2: this._point = 3; // proceed
-                      default: point$1(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var cardinal = (function custom(tension) {
-
-                  function cardinal(context) {
-                    return new Cardinal(context, tension);
-                  }
-
-                  cardinal.tension = function(tension) {
-                    return custom(+tension);
-                  };
-
-                  return cardinal;
-                })(0);
-
-                function CardinalClosed(context, tension) {
-                  this._context = context;
-                  this._k = (1 - tension) / 6;
-                }
-
-                CardinalClosed.prototype = {
-                  areaStart: noop,
-                  areaEnd: noop,
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 1: {
-                        this._context.moveTo(this._x3, this._y3);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 2: {
-                        this._context.lineTo(this._x3, this._y3);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 3: {
-                        this.point(this._x3, this._y3);
-                        this.point(this._x4, this._y4);
-                        this.point(this._x5, this._y5);
-                        break;
-                      }
-                    }
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-                      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-                      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-                      default: point$1(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var cardinalClosed = (function custom(tension) {
-
-                  function cardinal(context) {
-                    return new CardinalClosed(context, tension);
-                  }
-
-                  cardinal.tension = function(tension) {
-                    return custom(+tension);
-                  };
-
-                  return cardinal;
-                })(0);
-
-                function CardinalOpen(context, tension) {
-                  this._context = context;
-                  this._k = (1 - tension) / 6;
-                }
-
-                CardinalOpen.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 =
-                    this._y0 = this._y1 = this._y2 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-                      case 3: this._point = 4; // proceed
-                      default: point$1(this, x, y); break;
-                    }
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var cardinalOpen = (function custom(tension) {
-
-                  function cardinal(context) {
-                    return new CardinalOpen(context, tension);
-                  }
-
-                  cardinal.tension = function(tension) {
-                    return custom(+tension);
-                  };
-
-                  return cardinal;
-                })(0);
-
-                function point$2(that, x, y) {
-                  var x1 = that._x1,
-                      y1 = that._y1,
-                      x2 = that._x2,
-                      y2 = that._y2;
-
-                  if (that._l01_a > epsilon$1) {
-                    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
-                        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
-                    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
-                    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
-                  }
-
-                  if (that._l23_a > epsilon$1) {
-                    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
-                        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
-                    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
-                    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
-                  }
-
-                  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
-                }
-
-                function CatmullRom(context, alpha) {
-                  this._context = context;
-                  this._alpha = alpha;
-                }
-
-                CatmullRom.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 =
-                    this._y0 = this._y1 = this._y2 = NaN;
-                    this._l01_a = this._l12_a = this._l23_a =
-                    this._l01_2a = this._l12_2a = this._l23_2a =
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 2: this._context.lineTo(this._x2, this._y2); break;
-                      case 3: this.point(this._x2, this._y2); break;
-                    }
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-
-                    if (this._point) {
-                      var x23 = this._x2 - x,
-                          y23 = this._y2 - y;
-                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-                    }
-
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; // proceed
-                      default: point$2(this, x, y); break;
-                    }
-
-                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var catmullRom = (function custom(alpha) {
-
-                  function catmullRom(context) {
-                    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
-                  }
-
-                  catmullRom.alpha = function(alpha) {
-                    return custom(+alpha);
-                  };
-
-                  return catmullRom;
-                })(0.5);
-
-                function CatmullRomClosed(context, alpha) {
-                  this._context = context;
-                  this._alpha = alpha;
-                }
-
-                CatmullRomClosed.prototype = {
-                  areaStart: noop,
-                  areaEnd: noop,
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-                    this._l01_a = this._l12_a = this._l23_a =
-                    this._l01_2a = this._l12_2a = this._l23_2a =
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 1: {
-                        this._context.moveTo(this._x3, this._y3);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 2: {
-                        this._context.lineTo(this._x3, this._y3);
-                        this._context.closePath();
-                        break;
-                      }
-                      case 3: {
-                        this.point(this._x3, this._y3);
-                        this.point(this._x4, this._y4);
-                        this.point(this._x5, this._y5);
-                        break;
-                      }
-                    }
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-
-                    if (this._point) {
-                      var x23 = this._x2 - x,
-                          y23 = this._y2 - y;
-                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-                    }
-
-                    switch (this._point) {
-                      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-                      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-                      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-                      default: point$2(this, x, y); break;
-                    }
-
-                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var catmullRomClosed = (function custom(alpha) {
-
-                  function catmullRom(context) {
-                    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
-                  }
-
-                  catmullRom.alpha = function(alpha) {
-                    return custom(+alpha);
-                  };
-
-                  return catmullRom;
-                })(0.5);
-
-                function CatmullRomOpen(context, alpha) {
-                  this._context = context;
-                  this._alpha = alpha;
-                }
-
-                CatmullRomOpen.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 = this._x2 =
-                    this._y0 = this._y1 = this._y2 = NaN;
-                    this._l01_a = this._l12_a = this._l23_a =
-                    this._l01_2a = this._l12_2a = this._l23_2a =
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-
-                    if (this._point) {
-                      var x23 = this._x2 - x,
-                          y23 = this._y2 - y;
-                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-                    }
-
-                    switch (this._point) {
-                      case 0: this._point = 1; break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-                      case 3: this._point = 4; // proceed
-                      default: point$2(this, x, y); break;
-                    }
-
-                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-                  }
-                };
-
-                var catmullRomOpen = (function custom(alpha) {
-
-                  function catmullRom(context) {
-                    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
-                  }
-
-                  catmullRom.alpha = function(alpha) {
-                    return custom(+alpha);
-                  };
-
-                  return catmullRom;
-                })(0.5);
-
-                function LinearClosed(context) {
-                  this._context = context;
-                }
-
-                LinearClosed.prototype = {
-                  areaStart: noop,
-                  areaEnd: noop,
-                  lineStart: function() {
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._point) this._context.closePath();
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    if (this._point) this._context.lineTo(x, y);
-                    else this._point = 1, this._context.moveTo(x, y);
-                  }
-                };
-
-                var linearClosed = function(context) {
-                  return new LinearClosed(context);
-                };
-
-                function sign(x) {
-                  return x < 0 ? -1 : 1;
-                }
-
-                // Calculate the slopes of the tangents (Hermite-type interpolation) based on
-                // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
-                // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
-                // NOV(II), P. 443, 1990.
-                function slope3(that, x2, y2) {
-                  var h0 = that._x1 - that._x0,
-                      h1 = x2 - that._x1,
-                      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
-                      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
-                      p = (s0 * h1 + s1 * h0) / (h0 + h1);
-                  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
-                }
-
-                // Calculate a one-sided slope.
-                function slope2(that, t) {
-                  var h = that._x1 - that._x0;
-                  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
-                }
-
-                // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
-                // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
-                // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
-                function point$3(that, t0, t1) {
-                  var x0 = that._x0,
-                      y0 = that._y0,
-                      x1 = that._x1,
-                      y1 = that._y1,
-                      dx = (x1 - x0) / 3;
-                  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
-                }
-
-                function MonotoneX(context) {
-                  this._context = context;
-                }
-
-                MonotoneX.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x0 = this._x1 =
-                    this._y0 = this._y1 =
-                    this._t0 = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    switch (this._point) {
-                      case 2: this._context.lineTo(this._x1, this._y1); break;
-                      case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
-                    }
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    var t1 = NaN;
-
-                    x = +x, y = +y;
-                    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; break;
-                      case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
-                      default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
-                    }
-
-                    this._x0 = this._x1, this._x1 = x;
-                    this._y0 = this._y1, this._y1 = y;
-                    this._t0 = t1;
-                  }
-                };
-
-                function MonotoneY(context) {
-                  this._context = new ReflectContext(context);
-                }
-
-                (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
-                  MonotoneX.prototype.point.call(this, y, x);
-                };
-
-                function ReflectContext(context) {
-                  this._context = context;
-                }
-
-                ReflectContext.prototype = {
-                  moveTo: function(x, y) { this._context.moveTo(y, x); },
-                  closePath: function() { this._context.closePath(); },
-                  lineTo: function(x, y) { this._context.lineTo(y, x); },
-                  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
-                };
-
-                function monotoneX(context) {
-                  return new MonotoneX(context);
-                }
-
-                function monotoneY(context) {
-                  return new MonotoneY(context);
-                }
-
-                function Natural(context) {
-                  this._context = context;
-                }
-
-                Natural.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x = [];
-                    this._y = [];
-                  },
-                  lineEnd: function() {
-                    var x = this._x,
-                        y = this._y,
-                        n = x.length;
-
-                    if (n) {
-                      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
-                      if (n === 2) {
-                        this._context.lineTo(x[1], y[1]);
-                      } else {
-                        var px = controlPoints(x),
-                            py = controlPoints(y);
-                        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
-                          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
-                        }
-                      }
-                    }
-
-                    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
-                    this._line = 1 - this._line;
-                    this._x = this._y = null;
-                  },
-                  point: function(x, y) {
-                    this._x.push(+x);
-                    this._y.push(+y);
-                  }
-                };
-
-                // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
-                function controlPoints(x) {
-                  var i,
-                      n = x.length - 1,
-                      m,
-                      a = new Array(n),
-                      b = new Array(n),
-                      r = new Array(n);
-                  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
-                  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
-                  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
-                  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
-                  a[n - 1] = r[n - 1] / b[n - 1];
-                  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
-                  b[n - 1] = (x[n] + a[n - 1]) / 2;
-                  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
-                  return [a, b];
-                }
-
-                var natural = function(context) {
-                  return new Natural(context);
-                };
-
-                function Step(context, t) {
-                  this._context = context;
-                  this._t = t;
-                }
-
-                Step.prototype = {
-                  areaStart: function() {
-                    this._line = 0;
-                  },
-                  areaEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._x = this._y = NaN;
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
-                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-                    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
-                  },
-                  point: function(x, y) {
-                    x = +x, y = +y;
-                    switch (this._point) {
-                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-                      case 1: this._point = 2; // proceed
-                      default: {
-                        if (this._t <= 0) {
-                          this._context.lineTo(this._x, y);
-                          this._context.lineTo(x, y);
-                        } else {
-                          var x1 = this._x * (1 - this._t) + x * this._t;
-                          this._context.lineTo(x1, this._y);
-                          this._context.lineTo(x1, y);
-                        }
-                        break;
-                      }
-                    }
-                    this._x = x, this._y = y;
-                  }
-                };
-
-                var step = function(context) {
-                  return new Step(context, 0.5);
-                };
-
-                function stepBefore(context) {
-                  return new Step(context, 0);
-                }
-
-                function stepAfter(context) {
-                  return new Step(context, 1);
-                }
-
-                var slice$2 = Array.prototype.slice;
-
-                var none = function(series, order) {
-                  if (!((n = series.length) > 1)) return;
-                  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
-                    s0 = s1, s1 = series[order[i]];
-                    for (var j = 0; j < m; ++j) {
-                      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
-                    }
-                  }
-                };
-
-                var none$1 = function(series) {
-                  var n = series.length, o = new Array(n);
-                  while (--n >= 0) o[n] = n;
-                  return o;
-                };
-
-                function stackValue(d, key) {
-                  return d[key];
-                }
-
-                var stack = function() {
-                  var keys = constant$2([]),
-                      order = none$1,
-                      offset = none,
-                      value = stackValue;
-
-                  function stack(data) {
-                    var kz = keys.apply(this, arguments),
-                        i,
-                        m = data.length,
-                        n = kz.length,
-                        sz = new Array(n),
-                        oz;
-
-                    for (i = 0; i < n; ++i) {
-                      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
-                        si[j] = sij = [0, +value(data[j], ki, j, data)];
-                        sij.data = data[j];
-                      }
-                      si.key = ki;
-                    }
-
-                    for (i = 0, oz = order(sz); i < n; ++i) {
-                      sz[oz[i]].index = i;
-                    }
-
-                    offset(sz, oz);
-                    return sz;
-                  }
-
-                  stack.keys = function(_) {
-                    return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys;
-                  };
-
-                  stack.value = function(_) {
-                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value;
-                  };
-
-                  stack.order = function(_) {
-                    return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order;
-                  };
-
-                  stack.offset = function(_) {
-                    return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
-                  };
-
-                  return stack;
-                };
-
-                var expand = function(series, order) {
-                  if (!((n = series.length) > 0)) return;
-                  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
-                    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
-                    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
-                  }
-                  none(series, order);
-                };
-
-                var silhouette = function(series, order) {
-                  if (!((n = series.length) > 0)) return;
-                  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
-                    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
-                    s0[j][1] += s0[j][0] = -y / 2;
-                  }
-                  none(series, order);
-                };
-
-                var wiggle = function(series, order) {
-                  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
-                  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
-                    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
-                      var si = series[order[i]],
-                          sij0 = si[j][1] || 0,
-                          sij1 = si[j - 1][1] || 0,
-                          s3 = (sij0 - sij1) / 2;
-                      for (var k = 0; k < i; ++k) {
-                        var sk = series[order[k]],
-                            skj0 = sk[j][1] || 0,
-                            skj1 = sk[j - 1][1] || 0;
-                        s3 += skj0 - skj1;
-                      }
-                      s1 += sij0, s2 += s3 * sij0;
-                    }
-                    s0[j - 1][1] += s0[j - 1][0] = y;
-                    if (s1) y -= s2 / s1;
-                  }
-                  s0[j - 1][1] += s0[j - 1][0] = y;
-                  none(series, order);
-                };
-
-                var ascending$1 = function(series) {
-                  var sums = series.map(sum$1);
-                  return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
-                };
-
-                function sum$1(series) {
-                  var s = 0, i = -1, n = series.length, v;
-                  while (++i < n) if (v = +series[i][1]) s += v;
-                  return s;
-                }
-
-                var descending$2 = function(series) {
-                  return ascending$1(series).reverse();
-                };
-
-                var insideOut = function(series) {
-                  var n = series.length,
-                      i,
-                      j,
-                      sums = series.map(sum$1),
-                      order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
-                      top = 0,
-                      bottom = 0,
-                      tops = [],
-                      bottoms = [];
-
-                  for (i = 0; i < n; ++i) {
-                    j = order[i];
-                    if (top < bottom) {
-                      top += sums[j];
-                      tops.push(j);
-                    } else {
-                      bottom += sums[j];
-                      bottoms.push(j);
-                    }
-                  }
-
-                  return bottoms.reverse().concat(tops);
-                };
-
-                var reverse = function(series) {
-                  return none$1(series).reverse();
-                };
-
-                var define = function(constructor, factory, prototype) {
-                  constructor.prototype = factory.prototype = prototype;
-                  prototype.constructor = constructor;
-                };
-
-                function extend(parent, definition) {
-                  var prototype = Object.create(parent.prototype);
-                  for (var key in definition) prototype[key] = definition[key];
-                  return prototype;
-                }
-
-                function Color() {}
-
-                var darker = 0.7;
-                var brighter = 1 / darker;
-
-                var reHex3 = /^#([0-9a-f]{3})$/;
-                var reHex6 = /^#([0-9a-f]{6})$/;
-                var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
-                var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
-                var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-                var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-                var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
-                var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
-
-                var named = {
-                  aliceblue: 0xf0f8ff,
-                  antiquewhite: 0xfaebd7,
-                  aqua: 0x00ffff,
-                  aquamarine: 0x7fffd4,
-                  azure: 0xf0ffff,
-                  beige: 0xf5f5dc,
-                  bisque: 0xffe4c4,
-                  black: 0x000000,
-                  blanchedalmond: 0xffebcd,
-                  blue: 0x0000ff,
-                  blueviolet: 0x8a2be2,
-                  brown: 0xa52a2a,
-                  burlywood: 0xdeb887,
-                  cadetblue: 0x5f9ea0,
-                  chartreuse: 0x7fff00,
-                  chocolate: 0xd2691e,
-                  coral: 0xff7f50,
-                  cornflowerblue: 0x6495ed,
-                  cornsilk: 0xfff8dc,
-                  crimson: 0xdc143c,
-                  cyan: 0x00ffff,
-                  darkblue: 0x00008b,
-                  darkcyan: 0x008b8b,
-                  darkgoldenrod: 0xb8860b,
-                  darkgray: 0xa9a9a9,
-                  darkgreen: 0x006400,
-                  darkgrey: 0xa9a9a9,
-                  darkkhaki: 0xbdb76b,
-                  darkmagenta: 0x8b008b,
-                  darkolivegreen: 0x556b2f,
-                  darkorange: 0xff8c00,
-                  darkorchid: 0x9932cc,
-                  darkred: 0x8b0000,
-                  darksalmon: 0xe9967a,
-                  darkseagreen: 0x8fbc8f,
-                  darkslateblue: 0x483d8b,
-                  darkslategray: 0x2f4f4f,
-                  darkslategrey: 0x2f4f4f,
-                  darkturquoise: 0x00ced1,
-                  darkviolet: 0x9400d3,
-                  deeppink: 0xff1493,
-                  deepskyblue: 0x00bfff,
-                  dimgray: 0x696969,
-                  dimgrey: 0x696969,
-                  dodgerblue: 0x1e90ff,
-                  firebrick: 0xb22222,
-                  floralwhite: 0xfffaf0,
-                  forestgreen: 0x228b22,
-                  fuchsia: 0xff00ff,
-                  gainsboro: 0xdcdcdc,
-                  ghostwhite: 0xf8f8ff,
-                  gold: 0xffd700,
-                  goldenrod: 0xdaa520,
-                  gray: 0x808080,
-                  green: 0x008000,
-                  greenyellow: 0xadff2f,
-                  grey: 0x808080,
-                  honeydew: 0xf0fff0,
-                  hotpink: 0xff69b4,
-                  indianred: 0xcd5c5c,
-                  indigo: 0x4b0082,
-                  ivory: 0xfffff0,
-                  khaki: 0xf0e68c,
-                  lavender: 0xe6e6fa,
-                  lavenderblush: 0xfff0f5,
-                  lawngreen: 0x7cfc00,
-                  lemonchiffon: 0xfffacd,
-                  lightblue: 0xadd8e6,
-                  lightcoral: 0xf08080,
-                  lightcyan: 0xe0ffff,
-                  lightgoldenrodyellow: 0xfafad2,
-                  lightgray: 0xd3d3d3,
-                  lightgreen: 0x90ee90,
-                  lightgrey: 0xd3d3d3,
-                  lightpink: 0xffb6c1,
-                  lightsalmon: 0xffa07a,
-                  lightseagreen: 0x20b2aa,
-                  lightskyblue: 0x87cefa,
-                  lightslategray: 0x778899,
-                  lightslategrey: 0x778899,
-                  lightsteelblue: 0xb0c4de,
-                  lightyellow: 0xffffe0,
-                  lime: 0x00ff00,
-                  limegreen: 0x32cd32,
-                  linen: 0xfaf0e6,
-                  magenta: 0xff00ff,
-                  maroon: 0x800000,
-                  mediumaquamarine: 0x66cdaa,
-                  mediumblue: 0x0000cd,
-                  mediumorchid: 0xba55d3,
-                  mediumpurple: 0x9370db,
-                  mediumseagreen: 0x3cb371,
-                  mediumslateblue: 0x7b68ee,
-                  mediumspringgreen: 0x00fa9a,
-                  mediumturquoise: 0x48d1cc,
-                  mediumvioletred: 0xc71585,
-                  midnightblue: 0x191970,
-                  mintcream: 0xf5fffa,
-                  mistyrose: 0xffe4e1,
-                  moccasin: 0xffe4b5,
-                  navajowhite: 0xffdead,
-                  navy: 0x000080,
-                  oldlace: 0xfdf5e6,
-                  olive: 0x808000,
-                  olivedrab: 0x6b8e23,
-                  orange: 0xffa500,
-                  orangered: 0xff4500,
-                  orchid: 0xda70d6,
-                  palegoldenrod: 0xeee8aa,
-                  palegreen: 0x98fb98,
-                  paleturquoise: 0xafeeee,
-                  palevioletred: 0xdb7093,
-                  papayawhip: 0xffefd5,
-                  peachpuff: 0xffdab9,
-                  peru: 0xcd853f,
-                  pink: 0xffc0cb,
-                  plum: 0xdda0dd,
-                  powderblue: 0xb0e0e6,
-                  purple: 0x800080,
-                  rebeccapurple: 0x663399,
-                  red: 0xff0000,
-                  rosybrown: 0xbc8f8f,
-                  royalblue: 0x4169e1,
-                  saddlebrown: 0x8b4513,
-                  salmon: 0xfa8072,
-                  sandybrown: 0xf4a460,
-                  seagreen: 0x2e8b57,
-                  seashell: 0xfff5ee,
-                  sienna: 0xa0522d,
-                  silver: 0xc0c0c0,
-                  skyblue: 0x87ceeb,
-                  slateblue: 0x6a5acd,
-                  slategray: 0x708090,
-                  slategrey: 0x708090,
-                  snow: 0xfffafa,
-                  springgreen: 0x00ff7f,
-                  steelblue: 0x4682b4,
-                  tan: 0xd2b48c,
-                  teal: 0x008080,
-                  thistle: 0xd8bfd8,
-                  tomato: 0xff6347,
-                  turquoise: 0x40e0d0,
-                  violet: 0xee82ee,
-                  wheat: 0xf5deb3,
-                  white: 0xffffff,
-                  whitesmoke: 0xf5f5f5,
-                  yellow: 0xffff00,
-                  yellowgreen: 0x9acd32
-                };
-
-                define(Color, color, {
-                  displayable: function() {
-                    return this.rgb().displayable();
-                  },
-                  toString: function() {
-                    return this.rgb() + "";
-                  }
-                });
-
-                function color(format) {
-                  var m;
-                  format = (format + "").trim().toLowerCase();
-                  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
-                      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
-                      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
-                      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
-                      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
-                      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
-                      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
-                      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
-                      : named.hasOwnProperty(format) ? rgbn(named[format])
-                      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
-                      : null;
-                }
-
-                function rgbn(n) {
-                  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
-                }
-
-                function rgba(r, g, b, a) {
-                  if (a <= 0) r = g = b = NaN;
-                  return new Rgb(r, g, b, a);
-                }
-
-                function rgbConvert(o) {
-                  if (!(o instanceof Color)) o = color(o);
-                  if (!o) return new Rgb;
-                  o = o.rgb();
-                  return new Rgb(o.r, o.g, o.b, o.opacity);
-                }
-
-                function rgb(r, g, b, opacity) {
-                  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
-                }
-
-                function Rgb(r, g, b, opacity) {
-                  this.r = +r;
-                  this.g = +g;
-                  this.b = +b;
-                  this.opacity = +opacity;
-                }
-
-                define(Rgb, rgb, extend(Color, {
-                  brighter: function(k) {
-                    k = k == null ? brighter : Math.pow(brighter, k);
-                    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-                  },
-                  darker: function(k) {
-                    k = k == null ? darker : Math.pow(darker, k);
-                    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-                  },
-                  rgb: function() {
-                    return this;
-                  },
-                  displayable: function() {
-                    return (0 <= this.r && this.r <= 255)
-                        && (0 <= this.g && this.g <= 255)
-                        && (0 <= this.b && this.b <= 255)
-                        && (0 <= this.opacity && this.opacity <= 1);
-                  },
-                  toString: function() {
-                    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
-                    return (a === 1 ? "rgb(" : "rgba(")
-                        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
-                        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
-                        + Math.max(0, Math.min(255, Math.round(this.b) || 0))
-                        + (a === 1 ? ")" : ", " + a + ")");
-                  }
-                }));
-
-                function hsla(h, s, l, a) {
-                  if (a <= 0) h = s = l = NaN;
-                  else if (l <= 0 || l >= 1) h = s = NaN;
-                  else if (s <= 0) h = NaN;
-                  return new Hsl(h, s, l, a);
-                }
-
-                function hslConvert(o) {
-                  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
-                  if (!(o instanceof Color)) o = color(o);
-                  if (!o) return new Hsl;
-                  if (o instanceof Hsl) return o;
-                  o = o.rgb();
-                  var r = o.r / 255,
-                      g = o.g / 255,
-                      b = o.b / 255,
-                      min = Math.min(r, g, b),
-                      max = Math.max(r, g, b),
-                      h = NaN,
-                      s = max - min,
-                      l = (max + min) / 2;
-                  if (s) {
-                    if (r === max) h = (g - b) / s + (g < b) * 6;
-                    else if (g === max) h = (b - r) / s + 2;
-                    else h = (r - g) / s + 4;
-                    s /= l < 0.5 ? max + min : 2 - max - min;
-                    h *= 60;
-                  } else {
-                    s = l > 0 && l < 1 ? 0 : h;
-                  }
-                  return new Hsl(h, s, l, o.opacity);
-                }
-
-                function hsl(h, s, l, opacity) {
-                  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
-                }
-
-                function Hsl(h, s, l, opacity) {
-                  this.h = +h;
-                  this.s = +s;
-                  this.l = +l;
-                  this.opacity = +opacity;
-                }
-
-                define(Hsl, hsl, extend(Color, {
-                  brighter: function(k) {
-                    k = k == null ? brighter : Math.pow(brighter, k);
-                    return new Hsl(this.h, this.s, this.l * k, this.opacity);
-                  },
-                  darker: function(k) {
-                    k = k == null ? darker : Math.pow(darker, k);
-                    return new Hsl(this.h, this.s, this.l * k, this.opacity);
-                  },
-                  rgb: function() {
-                    var h = this.h % 360 + (this.h < 0) * 360,
-                        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
-                        l = this.l,
-                        m2 = l + (l < 0.5 ? l : 1 - l) * s,
-                        m1 = 2 * l - m2;
-                    return new Rgb(
-                      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
-                      hsl2rgb(h, m1, m2),
-                      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
-                      this.opacity
-                    );
-                  },
-                  displayable: function() {
-                    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
-                        && (0 <= this.l && this.l <= 1)
-                        && (0 <= this.opacity && this.opacity <= 1);
-                  }
-                }));
-
-                /* From FvD 13.37, CSS Color Module Level 3 */
-                function hsl2rgb(h, m1, m2) {
-                  return (h < 60 ? m1 + (m2 - m1) * h / 60
-                      : h < 180 ? m2
-                      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
-                      : m1) * 255;
-                }
-
-                var deg2rad = Math.PI / 180;
-                var rad2deg = 180 / Math.PI;
-
-                var Kn = 18;
-                var Xn = 0.950470;
-                var Yn = 1;
-                var Zn = 1.088830;
-                var t0 = 4 / 29;
-                var t1 = 6 / 29;
-                var t2 = 3 * t1 * t1;
-                var t3 = t1 * t1 * t1;
-
-                function labConvert(o) {
-                  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
-                  if (o instanceof Hcl) {
-                    var h = o.h * deg2rad;
-                    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
-                  }
-                  if (!(o instanceof Rgb)) o = rgbConvert(o);
-                  var b = rgb2xyz(o.r),
-                      a = rgb2xyz(o.g),
-                      l = rgb2xyz(o.b),
-                      x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
-                      y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
-                      z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
-                  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
-                }
-
-                function lab(l, a, b, opacity) {
-                  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
-                }
-
-                function Lab(l, a, b, opacity) {
-                  this.l = +l;
-                  this.a = +a;
-                  this.b = +b;
-                  this.opacity = +opacity;
-                }
-
-                define(Lab, lab, extend(Color, {
-                  brighter: function(k) {
-                    return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
-                  },
-                  darker: function(k) {
-                    return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
-                  },
-                  rgb: function() {
-                    var y = (this.l + 16) / 116,
-                        x = isNaN(this.a) ? y : y + this.a / 500,
-                        z = isNaN(this.b) ? y : y - this.b / 200;
-                    y = Yn * lab2xyz(y);
-                    x = Xn * lab2xyz(x);
-                    z = Zn * lab2xyz(z);
-                    return new Rgb(
-                      xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
-                      xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
-                      xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
-                      this.opacity
-                    );
-                  }
-                }));
-
-                function xyz2lab(t) {
-                  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
-                }
-
-                function lab2xyz(t) {
-                  return t > t1 ? t * t * t : t2 * (t - t0);
-                }
-
-                function xyz2rgb(x) {
-                  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
-                }
-
-                function rgb2xyz(x) {
-                  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
-                }
-
-                function hclConvert(o) {
-                  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
-                  if (!(o instanceof Lab)) o = labConvert(o);
-                  var h = Math.atan2(o.b, o.a) * rad2deg;
-                  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
-                }
-
-                function hcl(h, c, l, opacity) {
-                  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
-                }
-
-                function Hcl(h, c, l, opacity) {
-                  this.h = +h;
-                  this.c = +c;
-                  this.l = +l;
-                  this.opacity = +opacity;
-                }
-
-                define(Hcl, hcl, extend(Color, {
-                  brighter: function(k) {
-                    return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
-                  },
-                  darker: function(k) {
-                    return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
-                  },
-                  rgb: function() {
-                    return labConvert(this).rgb();
-                  }
-                }));
-
-                var A = -0.14861;
-                var B = +1.78277;
-                var C = -0.29227;
-                var D = -0.90649;
-                var E = +1.97294;
-                var ED = E * D;
-                var EB = E * B;
-                var BC_DA = B * C - D * A;
-
-                function cubehelixConvert(o) {
-                  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
-                  if (!(o instanceof Rgb)) o = rgbConvert(o);
-                  var r = o.r / 255,
-                      g = o.g / 255,
-                      b = o.b / 255,
-                      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
-                      bl = b - l,
-                      k = (E * (g - l) - C * bl) / D,
-                      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
-                      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
-                  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
-                }
-
-                function cubehelix(h, s, l, opacity) {
-                  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
-                }
-
-                function Cubehelix(h, s, l, opacity) {
-                  this.h = +h;
-                  this.s = +s;
-                  this.l = +l;
-                  this.opacity = +opacity;
-                }
-
-                define(Cubehelix, cubehelix, extend(Color, {
-                  brighter: function(k) {
-                    k = k == null ? brighter : Math.pow(brighter, k);
-                    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
-                  },
-                  darker: function(k) {
-                    k = k == null ? darker : Math.pow(darker, k);
-                    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
-                  },
-                  rgb: function() {
-                    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
-                        l = +this.l,
-                        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
-                        cosh = Math.cos(h),
-                        sinh = Math.sin(h);
-                    return new Rgb(
-                      255 * (l + a * (A * cosh + B * sinh)),
-                      255 * (l + a * (C * cosh + D * sinh)),
-                      255 * (l + a * (E * cosh)),
-                      this.opacity
-                    );
-                  }
-                }));
-
-                function basis$1(t1, v0, v1, v2, v3) {
-                  var t2 = t1 * t1, t3 = t2 * t1;
-                  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
-                      + (4 - 6 * t2 + 3 * t3) * v1
-                      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
-                      + t3 * v3) / 6;
-                }
-
-                var basis$2 = function(values) {
-                  var n = values.length - 1;
-                  return function(t) {
-                    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
-                        v1 = values[i],
-                        v2 = values[i + 1],
-                        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
-                        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
-                    return basis$1((t - i / n) * n, v0, v1, v2, v3);
-                  };
-                };
-
-                var basisClosed$1 = function(values) {
-                  var n = values.length;
-                  return function(t) {
-                    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
-                        v0 = values[(i + n - 1) % n],
-                        v1 = values[i % n],
-                        v2 = values[(i + 1) % n],
-                        v3 = values[(i + 2) % n];
-                    return basis$1((t - i / n) * n, v0, v1, v2, v3);
-                  };
-                };
-
-                var constant$3 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function linear$1(a, d) {
-                  return function(t) {
-                    return a + t * d;
-                  };
-                }
-
-                function exponential$1(a, b, y) {
-                  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
-                    return Math.pow(a + t * b, y);
-                  };
-                }
-
-                function hue(a, b) {
-                  var d = b - a;
-                  return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
-                }
-
-                function gamma(y) {
-                  return (y = +y) === 1 ? nogamma : function(a, b) {
-                    return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a);
-                  };
-                }
-
-                function nogamma(a, b) {
-                  var d = b - a;
-                  return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a);
-                }
-
-                var interpolateRgb = (function rgbGamma(y) {
-                  var color$$1 = gamma(y);
-
-                  function rgb$$1(start, end) {
-                    var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
-                        g = color$$1(start.g, end.g),
-                        b = color$$1(start.b, end.b),
-                        opacity = color$$1(start.opacity, end.opacity);
-                    return function(t) {
-                      start.r = r(t);
-                      start.g = g(t);
-                      start.b = b(t);
-                      start.opacity = opacity(t);
-                      return start + "";
-                    };
-                  }
-
-                  rgb$$1.gamma = rgbGamma;
-
-                  return rgb$$1;
-                })(1);
-
-                function rgbSpline(spline) {
-                  return function(colors) {
-                    var n = colors.length,
-                        r = new Array(n),
-                        g = new Array(n),
-                        b = new Array(n),
-                        i, color$$1;
-                    for (i = 0; i < n; ++i) {
-                      color$$1 = rgb(colors[i]);
-                      r[i] = color$$1.r || 0;
-                      g[i] = color$$1.g || 0;
-                      b[i] = color$$1.b || 0;
-                    }
-                    r = spline(r);
-                    g = spline(g);
-                    b = spline(b);
-                    color$$1.opacity = 1;
-                    return function(t) {
-                      color$$1.r = r(t);
-                      color$$1.g = g(t);
-                      color$$1.b = b(t);
-                      return color$$1 + "";
-                    };
-                  };
-                }
-
-                var rgbBasis = rgbSpline(basis$2);
-                var rgbBasisClosed = rgbSpline(basisClosed$1);
-
-                var array$1 = function(a, b) {
-                  var nb = b ? b.length : 0,
-                      na = a ? Math.min(nb, a.length) : 0,
-                      x = new Array(nb),
-                      c = new Array(nb),
-                      i;
-
-                  for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
-                  for (; i < nb; ++i) c[i] = b[i];
-
-                  return function(t) {
-                    for (i = 0; i < na; ++i) c[i] = x[i](t);
-                    return c;
-                  };
-                };
-
-                var date = function(a, b) {
-                  var d = new Date;
-                  return a = +a, b -= a, function(t) {
-                    return d.setTime(a + b * t), d;
-                  };
-                };
-
-                var interpolateNumber = function(a, b) {
-                  return a = +a, b -= a, function(t) {
-                    return a + b * t;
-                  };
-                };
-
-                var object = function(a, b) {
-                  var i = {},
-                      c = {},
-                      k;
-
-                  if (a === null || typeof a !== "object") a = {};
-                  if (b === null || typeof b !== "object") b = {};
-
-                  for (k in b) {
-                    if (k in a) {
-                      i[k] = interpolate(a[k], b[k]);
-                    } else {
-                      c[k] = b[k];
-                    }
-                  }
-
-                  return function(t) {
-                    for (k in i) c[k] = i[k](t);
-                    return c;
-                  };
-                };
-
-                var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
-                var reB = new RegExp(reA.source, "g");
-
-                function zero(b) {
-                  return function() {
-                    return b;
-                  };
-                }
-
-                function one(b) {
-                  return function(t) {
-                    return b(t) + "";
-                  };
-                }
-
-                var interpolateString = function(a, b) {
-                  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
-                      am, // current match in a
-                      bm, // current match in b
-                      bs, // string preceding current number in b, if any
-                      i = -1, // index in s
-                      s = [], // string constants and placeholders
-                      q = []; // number interpolators
-
-                  // Coerce inputs to strings.
-                  a = a + "", b = b + "";
-
-                  // Interpolate pairs of numbers in a & b.
-                  while ((am = reA.exec(a))
-                      && (bm = reB.exec(b))) {
-                    if ((bs = bm.index) > bi) { // a string precedes the next number in b
-                      bs = b.slice(bi, bs);
-                      if (s[i]) s[i] += bs; // coalesce with previous string
-                      else s[++i] = bs;
-                    }
-                    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
-                      if (s[i]) s[i] += bm; // coalesce with previous string
-                      else s[++i] = bm;
-                    } else { // interpolate non-matching numbers
-                      s[++i] = null;
-                      q.push({i: i, x: interpolateNumber(am, bm)});
-                    }
-                    bi = reB.lastIndex;
-                  }
-
-                  // Add remains of b.
-                  if (bi < b.length) {
-                    bs = b.slice(bi);
-                    if (s[i]) s[i] += bs; // coalesce with previous string
-                    else s[++i] = bs;
-                  }
-
-                  // Special optimization for only a single match.
-                  // Otherwise, interpolate each of the numbers and rejoin the string.
-                  return s.length < 2 ? (q[0]
-                      ? one(q[0].x)
-                      : zero(b))
-                      : (b = q.length, function(t) {
-                          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
-                          return s.join("");
-                        });
-                };
-
-                var interpolate = function(a, b) {
-                  var t = typeof b, c;
-                  return b == null || t === "boolean" ? constant$3(b)
-                      : (t === "number" ? interpolateNumber
-                      : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
-                      : b instanceof color ? interpolateRgb
-                      : b instanceof Date ? date
-                      : Array.isArray(b) ? array$1
-                      : isNaN(b) ? object
-                      : interpolateNumber)(a, b);
-                };
-
-                var interpolateRound = function(a, b) {
-                  return a = +a, b -= a, function(t) {
-                    return Math.round(a + b * t);
-                  };
-                };
-
-                var degrees = 180 / Math.PI;
-
-                var identity$2 = {
-                  translateX: 0,
-                  translateY: 0,
-                  rotate: 0,
-                  skewX: 0,
-                  scaleX: 1,
-                  scaleY: 1
-                };
-
-                var decompose = function(a, b, c, d, e, f) {
-                  var scaleX, scaleY, skewX;
-                  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
-                  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
-                  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
-                  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
-                  return {
-                    translateX: e,
-                    translateY: f,
-                    rotate: Math.atan2(b, a) * degrees,
-                    skewX: Math.atan(skewX) * degrees,
-                    scaleX: scaleX,
-                    scaleY: scaleY
-                  };
-                };
-
-                var cssNode;
-                var cssRoot;
-                var cssView;
-                var svgNode;
-
-                function parseCss(value) {
-                  if (value === "none") return identity$2;
-                  if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
-                  cssNode.style.transform = value;
-                  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
-                  cssRoot.removeChild(cssNode);
-                  value = value.slice(7, -1).split(",");
-                  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
-                }
-
-                function parseSvg(value) {
-                  if (value == null) return identity$2;
-                  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
-                  svgNode.setAttribute("transform", value);
-                  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
-                  value = value.matrix;
-                  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
-                }
-
-                function interpolateTransform(parse, pxComma, pxParen, degParen) {
-
-                  function pop(s) {
-                    return s.length ? s.pop() + " " : "";
-                  }
-
-                  function translate(xa, ya, xb, yb, s, q) {
-                    if (xa !== xb || ya !== yb) {
-                      var i = s.push("translate(", null, pxComma, null, pxParen);
-                      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
-                    } else if (xb || yb) {
-                      s.push("translate(" + xb + pxComma + yb + pxParen);
-                    }
-                  }
-
-                  function rotate(a, b, s, q) {
-                    if (a !== b) {
-                      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
-                      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)});
-                    } else if (b) {
-                      s.push(pop(s) + "rotate(" + b + degParen);
-                    }
-                  }
-
-                  function skewX(a, b, s, q) {
-                    if (a !== b) {
-                      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)});
-                    } else if (b) {
-                      s.push(pop(s) + "skewX(" + b + degParen);
-                    }
-                  }
-
-                  function scale(xa, ya, xb, yb, s, q) {
-                    if (xa !== xb || ya !== yb) {
-                      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
-                      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
-                    } else if (xb !== 1 || yb !== 1) {
-                      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
-                    }
-                  }
-
-                  return function(a, b) {
-                    var s = [], // string constants and placeholders
-                        q = []; // number interpolators
-                    a = parse(a), b = parse(b);
-                    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
-                    rotate(a.rotate, b.rotate, s, q);
-                    skewX(a.skewX, b.skewX, s, q);
-                    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
-                    a = b = null; // gc
-                    return function(t) {
-                      var i = -1, n = q.length, o;
-                      while (++i < n) s[(o = q[i]).i] = o.x(t);
-                      return s.join("");
-                    };
-                  };
-                }
-
-                var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
-                var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
-
-                var rho = Math.SQRT2;
-                var rho2 = 2;
-                var rho4 = 4;
-                var epsilon2 = 1e-12;
-
-                function cosh(x) {
-                  return ((x = Math.exp(x)) + 1 / x) / 2;
-                }
-
-                function sinh(x) {
-                  return ((x = Math.exp(x)) - 1 / x) / 2;
-                }
-
-                function tanh(x) {
-                  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
-                }
-
-                // p0 = [ux0, uy0, w0]
-                // p1 = [ux1, uy1, w1]
-                var interpolateZoom = function(p0, p1) {
-                  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
-                      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
-                      dx = ux1 - ux0,
-                      dy = uy1 - uy0,
-                      d2 = dx * dx + dy * dy,
-                      i,
-                      S;
-
-                  // Special case for u0 ≅ u1.
-                  if (d2 < epsilon2) {
-                    S = Math.log(w1 / w0) / rho;
-                    i = function(t) {
-                      return [
-                        ux0 + t * dx,
-                        uy0 + t * dy,
-                        w0 * Math.exp(rho * t * S)
-                      ];
-                    };
-                  }
-
-                  // General case.
-                  else {
-                    var d1 = Math.sqrt(d2),
-                        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
-                        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
-                        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
-                        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
-                    S = (r1 - r0) / rho;
-                    i = function(t) {
-                      var s = t * S,
-                          coshr0 = cosh(r0),
-                          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
-                      return [
-                        ux0 + u * dx,
-                        uy0 + u * dy,
-                        w0 * coshr0 / cosh(rho * s + r0)
-                      ];
-                    };
-                  }
-
-                  i.duration = S * 1000;
-
-                  return i;
-                };
-
-                function hsl$1(hue$$1) {
-                  return function(start, end) {
-                    var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
-                        s = nogamma(start.s, end.s),
-                        l = nogamma(start.l, end.l),
-                        opacity = nogamma(start.opacity, end.opacity);
-                    return function(t) {
-                      start.h = h(t);
-                      start.s = s(t);
-                      start.l = l(t);
-                      start.opacity = opacity(t);
-                      return start + "";
-                    };
-                  }
-                }
-
-                var hsl$2 = hsl$1(hue);
-                var hslLong = hsl$1(nogamma);
-
-                function lab$1(start, end) {
-                  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
-                      a = nogamma(start.a, end.a),
-                      b = nogamma(start.b, end.b),
-                      opacity = nogamma(start.opacity, end.opacity);
-                  return function(t) {
-                    start.l = l(t);
-                    start.a = a(t);
-                    start.b = b(t);
-                    start.opacity = opacity(t);
-                    return start + "";
-                  };
-                }
-
-                function hcl$1(hue$$1) {
-                  return function(start, end) {
-                    var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
-                        c = nogamma(start.c, end.c),
-                        l = nogamma(start.l, end.l),
-                        opacity = nogamma(start.opacity, end.opacity);
-                    return function(t) {
-                      start.h = h(t);
-                      start.c = c(t);
-                      start.l = l(t);
-                      start.opacity = opacity(t);
-                      return start + "";
-                    };
-                  }
-                }
-
-                var hcl$2 = hcl$1(hue);
-                var hclLong = hcl$1(nogamma);
-
-                function cubehelix$1(hue$$1) {
-                  return (function cubehelixGamma(y) {
-                    y = +y;
-
-                    function cubehelix$$1(start, end) {
-                      var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
-                          s = nogamma(start.s, end.s),
-                          l = nogamma(start.l, end.l),
-                          opacity = nogamma(start.opacity, end.opacity);
-                      return function(t) {
-                        start.h = h(t);
-                        start.s = s(t);
-                        start.l = l(Math.pow(t, y));
-                        start.opacity = opacity(t);
-                        return start + "";
-                      };
-                    }
-
-                    cubehelix$$1.gamma = cubehelixGamma;
-
-                    return cubehelix$$1;
-                  })(1);
-                }
-
-                var cubehelix$2 = cubehelix$1(hue);
-                var cubehelixLong = cubehelix$1(nogamma);
-
-                var quantize = function(interpolator, n) {
-                  var samples = new Array(n);
-                  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
-                  return samples;
-                };
-
-                var noop$1 = {value: function() {}};
-
-                function dispatch() {
-                  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
-                    if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
-                    _[t] = [];
-                  }
-                  return new Dispatch(_);
-                }
-
-                function Dispatch(_) {
-                  this._ = _;
-                }
-
-                function parseTypenames(typenames, types) {
-                  return typenames.trim().split(/^|\s+/).map(function(t) {
-                    var name = "", i = t.indexOf(".");
-                    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-                    if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
-                    return {type: t, name: name};
-                  });
-                }
-
-                Dispatch.prototype = dispatch.prototype = {
-                  constructor: Dispatch,
-                  on: function(typename, callback) {
-                    var _ = this._,
-                        T = parseTypenames(typename + "", _),
-                        t,
-                        i = -1,
-                        n = T.length;
-
-                    // If no callback was specified, return the callback of the given type and name.
-                    if (arguments.length < 2) {
-                      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
-                      return;
-                    }
-
-                    // If a type was specified, set the callback for the given type and name.
-                    // Otherwise, if a null callback was specified, remove callbacks of the given name.
-                    if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
-                    while (++i < n) {
-                      if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);
-                      else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
-                    }
-
-                    return this;
-                  },
-                  copy: function() {
-                    var copy = {}, _ = this._;
-                    for (var t in _) copy[t] = _[t].slice();
-                    return new Dispatch(copy);
-                  },
-                  call: function(type, that) {
-                    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
-                    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-                    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-                  },
-                  apply: function(type, that, args) {
-                    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-                    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-                  }
-                };
-
-                function get(type, name) {
-                  for (var i = 0, n = type.length, c; i < n; ++i) {
-                    if ((c = type[i]).name === name) {
-                      return c.value;
-                    }
-                  }
-                }
-
-                function set$2(type, name, callback) {
-                  for (var i = 0, n = type.length; i < n; ++i) {
-                    if (type[i].name === name) {
-                      type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
-                      break;
-                    }
-                  }
-                  if (callback != null) type.push({name: name, value: callback});
-                  return type;
-                }
-
-                function objectConverter(columns) {
-                  return new Function("d", "return {" + columns.map(function(name, i) {
-                    return JSON.stringify(name) + ": d[" + i + "]";
-                  }).join(",") + "}");
-                }
-
-                function customConverter(columns, f) {
-                  var object = objectConverter(columns);
-                  return function(row, i) {
-                    return f(object(row), i, columns);
-                  };
-                }
-
-                // Compute unique columns in order of discovery.
-                function inferColumns(rows) {
-                  var columnSet = Object.create(null),
-                      columns = [];
-
-                  rows.forEach(function(row) {
-                    for (var column in row) {
-                      if (!(column in columnSet)) {
-                        columns.push(columnSet[column] = column);
-                      }
-                    }
-                  });
-
-                  return columns;
-                }
-
-                var dsv = function(delimiter) {
-                  var reFormat = new RegExp("[\"" + delimiter + "\n]"),
-                      delimiterCode = delimiter.charCodeAt(0);
-
-                  function parse(text, f) {
-                    var convert, columns, rows = parseRows(text, function(row, i) {
-                      if (convert) return convert(row, i - 1);
-                      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
-                    });
-                    rows.columns = columns;
-                    return rows;
-                  }
-
-                  function parseRows(text, f) {
-                    var EOL = {}, // sentinel value for end-of-line
-                        EOF = {}, // sentinel value for end-of-file
-                        rows = [], // output rows
-                        N = text.length,
-                        I = 0, // current character index
-                        n = 0, // the current line number
-                        t, // the current token
-                        eol; // is the current token followed by EOL?
-
-                    function token() {
-                      if (I >= N) return EOF; // special case: end of file
-                      if (eol) return eol = false, EOL; // special case: end of line
-
-                      // special case: quotes
-                      var j = I, c;
-                      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;
-                        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.slice(j + 1, i).replace(/""/g, "\"");
-                      }
-
-                      // common case: find next delimiter or newline
-                      while (I < N) {
-                        var k = 1;
-                        c = text.charCodeAt(I++);
-                        if (c === 10) eol = true; // \n
-                        else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
-                        else if (c !== delimiterCode) continue;
-                        return text.slice(j, I - k);
-                      }
-
-                      // special case: last token before EOF
-                      return text.slice(j);
-                    }
-
-                    while ((t = token()) !== EOF) {
-                      var a = [];
-                      while (t !== EOL && t !== EOF) {
-                        a.push(t);
-                        t = token();
-                      }
-                      if (f && (a = f(a, n++)) == null) continue;
-                      rows.push(a);
-                    }
-
-                    return rows;
-                  }
-
-                  function format(rows, columns) {
-                    if (columns == null) columns = inferColumns(rows);
-                    return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
-                      return columns.map(function(column) {
-                        return formatValue(row[column]);
-                      }).join(delimiter);
-                    })).join("\n");
-                  }
-
-                  function formatRows(rows) {
-                    return rows.map(formatRow).join("\n");
-                  }
-
-                  function formatRow(row) {
-                    return row.map(formatValue).join(delimiter);
-                  }
-
-                  function formatValue(text) {
-                    return text == null ? ""
-                        : reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
-                        : text;
-                  }
-
-                  return {
-                    parse: parse,
-                    parseRows: parseRows,
-                    format: format,
-                    formatRows: formatRows
-                  };
-                };
-
-                var csv = dsv(",");
-
-                var csvParse = csv.parse;
-                var csvParseRows = csv.parseRows;
-                var csvFormat = csv.format;
-                var csvFormatRows = csv.formatRows;
-
-                var tsv = dsv("\t");
-
-                var tsvParse = tsv.parse;
-                var tsvParseRows = tsv.parseRows;
-                var tsvFormat = tsv.format;
-                var tsvFormatRows = tsv.formatRows;
-
-                var request = function(url, callback) {
-                  var request,
-                      event = dispatch("beforesend", "progress", "load", "error"),
-                      mimeType,
-                      headers = map$1(),
-                      xhr = new XMLHttpRequest,
-                      user = null,
-                      password = null,
-                      response,
-                      responseType,
-                      timeout = 0;
-
-                  // If IE does not support CORS, use XDomainRequest.
-                  if (typeof XDomainRequest !== "undefined"
-                      && !("withCredentials" in xhr)
-                      && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
-
-                  "onload" in xhr
-                      ? xhr.onload = xhr.onerror = xhr.ontimeout = respond
-                      : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
-
-                  function respond(o) {
-                    var status = xhr.status, result;
-                    if (!status && hasResponse(xhr)
-                        || status >= 200 && status < 300
-                        || status === 304) {
-                      if (response) {
-                        try {
-                          result = response.call(request, xhr);
-                        } catch (e) {
-                          event.call("error", request, e);
-                          return;
-                        }
-                      } else {
-                        result = xhr;
-                      }
-                      event.call("load", request, result);
-                    } else {
-                      event.call("error", request, o);
-                    }
-                  }
-
-                  xhr.onprogress = function(e) {
-                    event.call("progress", request, e);
-                  };
-
-                  request = {
-                    header: function(name, value) {
-                      name = (name + "").toLowerCase();
-                      if (arguments.length < 2) return headers.get(name);
-                      if (value == null) headers.remove(name);
-                      else headers.set(name, value + "");
-                      return request;
-                    },
-
-                    // If mimeType is non-null and no Accept header is set, a default is used.
-                    mimeType: function(value) {
-                      if (!arguments.length) return mimeType;
-                      mimeType = value == null ? null : value + "";
-                      return request;
-                    },
-
-                    // Specifies what type the response value should take;
-                    // for instance, arraybuffer, blob, document, or text.
-                    responseType: function(value) {
-                      if (!arguments.length) return responseType;
-                      responseType = value;
-                      return request;
-                    },
-
-                    timeout: function(value) {
-                      if (!arguments.length) return timeout;
-                      timeout = +value;
-                      return request;
-                    },
-
-                    user: function(value) {
-                      return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
-                    },
-
-                    password: function(value) {
-                      return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
-                    },
-
-                    // Specify how to convert the response content to a specific type;
-                    // changes the callback value on "load" events.
-                    response: function(value) {
-                      response = value;
-                      return request;
-                    },
-
-                    // Alias for send("GET", …).
-                    get: function(data, callback) {
-                      return request.send("GET", data, callback);
-                    },
-
-                    // Alias for send("POST", …).
-                    post: function(data, callback) {
-                      return request.send("POST", data, callback);
-                    },
-
-                    // If callback is non-null, it will be used for error and load events.
-                    send: function(method, data, callback) {
-                      xhr.open(method, url, true, user, password);
-                      if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
-                      if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
-                      if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
-                      if (responseType != null) xhr.responseType = responseType;
-                      if (timeout > 0) xhr.timeout = timeout;
-                      if (callback == null && typeof data === "function") callback = data, data = null;
-                      if (callback != null && callback.length === 1) callback = fixCallback(callback);
-                      if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
-                      event.call("beforesend", request, xhr);
-                      xhr.send(data == null ? null : data);
-                      return request;
-                    },
-
-                    abort: function() {
-                      xhr.abort();
-                      return request;
-                    },
-
-                    on: function() {
-                      var value = event.on.apply(event, arguments);
-                      return value === event ? request : value;
-                    }
-                  };
-
-                  if (callback != null) {
-                    if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
-                    return request.get(callback);
-                  }
-
-                  return request;
-                };
-
-                function fixCallback(callback) {
-                  return function(error, xhr) {
-                    callback(error == null ? xhr : null);
-                  };
-                }
-
-                function hasResponse(xhr) {
-                  var type = xhr.responseType;
-                  return type && type !== "text"
-                      ? xhr.response // null on error
-                      : xhr.responseText; // "" on error
-                }
-
-                var type = function(defaultMimeType, response) {
-                  return function(url, callback) {
-                    var r = request(url).mimeType(defaultMimeType).response(response);
-                    if (callback != null) {
-                      if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
-                      return r.get(callback);
-                    }
-                    return r;
-                  };
-                };
-
-                var html = type("text/html", function(xhr) {
-                  return document.createRange().createContextualFragment(xhr.responseText);
-                });
-
-                var json = type("application/json", function(xhr) {
-                  return JSON.parse(xhr.responseText);
-                });
-
-                var text = type("text/plain", function(xhr) {
-                  return xhr.responseText;
-                });
-
-                var xml = type("application/xml", function(xhr) {
-                  var xml = xhr.responseXML;
-                  if (!xml) throw new Error("parse error");
-                  return xml;
-                });
-
-                var dsv$1 = function(defaultMimeType, parse) {
-                  return function(url, row, callback) {
-                    if (arguments.length < 3) callback = row, row = null;
-                    var r = request(url).mimeType(defaultMimeType);
-                    r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
-                    r.row(row);
-                    return callback ? r.get(callback) : r;
-                  };
-                };
-
-                function responseOf(parse, row) {
-                  return function(request$$1) {
-                    return parse(request$$1.responseText, row);
-                  };
-                }
-
-                var csv$1 = dsv$1("text/csv", csvParse);
-
-                var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
-
-                var frame = 0;
-                var timeout = 0;
-                var interval = 0;
-                var pokeDelay = 1000;
-                var taskHead;
-                var taskTail;
-                var clockLast = 0;
-                var clockNow = 0;
-                var clockSkew = 0;
-                var clock = typeof performance === "object" && performance.now ? performance : Date;
-                var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
-
-                function now() {
-                  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
-                }
-
-                function clearNow() {
-                  clockNow = 0;
-                }
-
-                function Timer() {
-                  this._call =
-                  this._time =
-                  this._next = null;
-                }
-
-                Timer.prototype = timer.prototype = {
-                  constructor: Timer,
-                  restart: function(callback, delay, time) {
-                    if (typeof callback !== "function") throw new TypeError("callback is not a function");
-                    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
-                    if (!this._next && taskTail !== this) {
-                      if (taskTail) taskTail._next = this;
-                      else taskHead = this;
-                      taskTail = this;
-                    }
-                    this._call = callback;
-                    this._time = time;
-                    sleep();
-                  },
-                  stop: function() {
-                    if (this._call) {
-                      this._call = null;
-                      this._time = Infinity;
-                      sleep();
-                    }
-                  }
-                };
-
-                function timer(callback, delay, time) {
-                  var t = new Timer;
-                  t.restart(callback, delay, time);
-                  return t;
-                }
-
-                function timerFlush() {
-                  now(); // Get the current time, if not already set.
-                  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
-                  var t = taskHead, e;
-                  while (t) {
-                    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
-                    t = t._next;
-                  }
-                  --frame;
-                }
-
-                function wake() {
-                  clockNow = (clockLast = clock.now()) + clockSkew;
-                  frame = timeout = 0;
-                  try {
-                    timerFlush();
-                  } finally {
-                    frame = 0;
-                    nap();
-                    clockNow = 0;
-                  }
-                }
-
-                function poke$1() {
-                  var now = clock.now(), delay = now - clockLast;
-                  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
-                }
-
-                function nap() {
-                  var t0, t1 = taskHead, t2, time = Infinity;
-                  while (t1) {
-                    if (t1._call) {
-                      if (time > t1._time) time = t1._time;
-                      t0 = t1, t1 = t1._next;
-                    } else {
-                      t2 = t1._next, t1._next = null;
-                      t1 = t0 ? t0._next = t2 : taskHead = t2;
-                    }
-                  }
-                  taskTail = t0;
-                  sleep(time);
-                }
-
-                function sleep(time) {
-                  if (frame) return; // Soonest alarm already set, or will be.
-                  if (timeout) timeout = clearTimeout(timeout);
-                  var delay = time - clockNow;
-                  if (delay > 24) {
-                    if (time < Infinity) timeout = setTimeout(wake, delay);
-                    if (interval) interval = clearInterval(interval);
-                  } else {
-                    if (!interval) interval = setInterval(poke$1, pokeDelay);
-                    frame = 1, setFrame(wake);
-                  }
-                }
-
-                var timeout$1 = function(callback, delay, time) {
-                  var t = new Timer;
-                  delay = delay == null ? 0 : +delay;
-                  t.restart(function(elapsed) {
-                    t.stop();
-                    callback(elapsed + delay);
-                  }, delay, time);
-                  return t;
-                };
-
-                var interval$1 = function(callback, delay, time) {
-                  var t = new Timer, total = delay;
-                  if (delay == null) return t.restart(callback, delay, time), t;
-                  delay = +delay, time = time == null ? now() : +time;
-                  t.restart(function tick(elapsed) {
-                    elapsed += total;
-                    t.restart(tick, total += delay, time);
-                    callback(elapsed);
-                  }, delay, time);
-                  return t;
-                };
-
-                var t0$1 = new Date;
-                var t1$1 = new Date;
-
-                function newInterval(floori, offseti, count, field) {
-
-                  function interval(date) {
-                    return floori(date = new Date(+date)), date;
-                  }
-
-                  interval.floor = interval;
-
-                  interval.ceil = function(date) {
-                    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
-                  };
-
-                  interval.round = function(date) {
-                    var d0 = interval(date),
-                        d1 = interval.ceil(date);
-                    return date - d0 < d1 - date ? d0 : d1;
-                  };
-
-                  interval.offset = function(date, step) {
-                    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
-                  };
-
-                  interval.range = function(start, stop, step) {
-                    var range = [];
-                    start = interval.ceil(start);
-                    step = step == null ? 1 : Math.floor(step);
-                    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
-                    do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
-                    return range;
-                  };
-
-                  interval.filter = function(test) {
-                    return newInterval(function(date) {
-                      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
-                    }, function(date, step) {
-                      if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
-                    });
-                  };
-
-                  if (count) {
-                    interval.count = function(start, end) {
-                      t0$1.setTime(+start), t1$1.setTime(+end);
-                      floori(t0$1), floori(t1$1);
-                      return Math.floor(count(t0$1, t1$1));
-                    };
-
-                    interval.every = function(step) {
-                      step = Math.floor(step);
-                      return !isFinite(step) || !(step > 0) ? null
-                          : !(step > 1) ? interval
-                          : interval.filter(field
-                              ? function(d) { return field(d) % step === 0; }
-                              : function(d) { return interval.count(0, d) % step === 0; });
-                    };
-                  }
-
-                  return interval;
-                }
-
-                var millisecond = newInterval(function() {
-                  // noop
-                }, function(date, step) {
-                  date.setTime(+date + step);
-                }, function(start, end) {
-                  return end - start;
-                });
-
-                // An optimized implementation for this simple case.
-                millisecond.every = function(k) {
-                  k = Math.floor(k);
-                  if (!isFinite(k) || !(k > 0)) return null;
-                  if (!(k > 1)) return millisecond;
-                  return newInterval(function(date) {
-                    date.setTime(Math.floor(date / k) * k);
-                  }, function(date, step) {
-                    date.setTime(+date + step * k);
-                  }, function(start, end) {
-                    return (end - start) / k;
-                  });
-                };
-
-                var milliseconds = millisecond.range;
-
-                var durationSecond = 1e3;
-                var durationMinute = 6e4;
-                var durationHour = 36e5;
-                var durationDay = 864e5;
-                var durationWeek = 6048e5;
-
-                var second = newInterval(function(date) {
-                  date.setTime(Math.floor(date / durationSecond) * durationSecond);
-                }, function(date, step) {
-                  date.setTime(+date + step * durationSecond);
-                }, function(start, end) {
-                  return (end - start) / durationSecond;
-                }, function(date) {
-                  return date.getUTCSeconds();
-                });
-
-                var seconds = second.range;
-
-                var minute = newInterval(function(date) {
-                  date.setTime(Math.floor(date / durationMinute) * durationMinute);
-                }, function(date, step) {
-                  date.setTime(+date + step * durationMinute);
-                }, function(start, end) {
-                  return (end - start) / durationMinute;
-                }, function(date) {
-                  return date.getMinutes();
-                });
-
-                var minutes = minute.range;
-
-                var hour = newInterval(function(date) {
-                  var offset = date.getTimezoneOffset() * durationMinute % durationHour;
-                  if (offset < 0) offset += durationHour;
-                  date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
-                }, function(date, step) {
-                  date.setTime(+date + step * durationHour);
-                }, function(start, end) {
-                  return (end - start) / durationHour;
-                }, function(date) {
-                  return date.getHours();
-                });
-
-                var hours = hour.range;
-
-                var day = newInterval(function(date) {
-                  date.setHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setDate(date.getDate() + step);
-                }, function(start, end) {
-                  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
-                }, function(date) {
-                  return date.getDate() - 1;
-                });
-
-                var days = day.range;
-
-                function weekday(i) {
-                  return newInterval(function(date) {
-                    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
-                    date.setHours(0, 0, 0, 0);
-                  }, function(date, step) {
-                    date.setDate(date.getDate() + step * 7);
-                  }, function(start, end) {
-                    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
-                  });
-                }
-
-                var sunday = weekday(0);
-                var monday = weekday(1);
-                var tuesday = weekday(2);
-                var wednesday = weekday(3);
-                var thursday = weekday(4);
-                var friday = weekday(5);
-                var saturday = weekday(6);
-
-                var sundays = sunday.range;
-                var mondays = monday.range;
-                var tuesdays = tuesday.range;
-                var wednesdays = wednesday.range;
-                var thursdays = thursday.range;
-                var fridays = friday.range;
-                var saturdays = saturday.range;
-
-                var month = newInterval(function(date) {
-                  date.setDate(1);
-                  date.setHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setMonth(date.getMonth() + step);
-                }, function(start, end) {
-                  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
-                }, function(date) {
-                  return date.getMonth();
-                });
-
-                var months = month.range;
-
-                var year = newInterval(function(date) {
-                  date.setMonth(0, 1);
-                  date.setHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setFullYear(date.getFullYear() + step);
-                }, function(start, end) {
-                  return end.getFullYear() - start.getFullYear();
-                }, function(date) {
-                  return date.getFullYear();
-                });
-
-                // An optimized implementation for this simple case.
-                year.every = function(k) {
-                  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
-                    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
-                    date.setMonth(0, 1);
-                    date.setHours(0, 0, 0, 0);
-                  }, function(date, step) {
-                    date.setFullYear(date.getFullYear() + step * k);
-                  });
-                };
-
-                var years = year.range;
-
-                var utcMinute = newInterval(function(date) {
-                  date.setUTCSeconds(0, 0);
-                }, function(date, step) {
-                  date.setTime(+date + step * durationMinute);
-                }, function(start, end) {
-                  return (end - start) / durationMinute;
-                }, function(date) {
-                  return date.getUTCMinutes();
-                });
-
-                var utcMinutes = utcMinute.range;
-
-                var utcHour = newInterval(function(date) {
-                  date.setUTCMinutes(0, 0, 0);
-                }, function(date, step) {
-                  date.setTime(+date + step * durationHour);
-                }, function(start, end) {
-                  return (end - start) / durationHour;
-                }, function(date) {
-                  return date.getUTCHours();
-                });
-
-                var utcHours = utcHour.range;
-
-                var utcDay = newInterval(function(date) {
-                  date.setUTCHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setUTCDate(date.getUTCDate() + step);
-                }, function(start, end) {
-                  return (end - start) / durationDay;
-                }, function(date) {
-                  return date.getUTCDate() - 1;
-                });
-
-                var utcDays = utcDay.range;
-
-                function utcWeekday(i) {
-                  return newInterval(function(date) {
-                    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
-                    date.setUTCHours(0, 0, 0, 0);
-                  }, function(date, step) {
-                    date.setUTCDate(date.getUTCDate() + step * 7);
-                  }, function(start, end) {
-                    return (end - start) / durationWeek;
-                  });
-                }
-
-                var utcSunday = utcWeekday(0);
-                var utcMonday = utcWeekday(1);
-                var utcTuesday = utcWeekday(2);
-                var utcWednesday = utcWeekday(3);
-                var utcThursday = utcWeekday(4);
-                var utcFriday = utcWeekday(5);
-                var utcSaturday = utcWeekday(6);
-
-                var utcSundays = utcSunday.range;
-                var utcMondays = utcMonday.range;
-                var utcTuesdays = utcTuesday.range;
-                var utcWednesdays = utcWednesday.range;
-                var utcThursdays = utcThursday.range;
-                var utcFridays = utcFriday.range;
-                var utcSaturdays = utcSaturday.range;
-
-                var utcMonth = newInterval(function(date) {
-                  date.setUTCDate(1);
-                  date.setUTCHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setUTCMonth(date.getUTCMonth() + step);
-                }, function(start, end) {
-                  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
-                }, function(date) {
-                  return date.getUTCMonth();
-                });
-
-                var utcMonths = utcMonth.range;
-
-                var utcYear = newInterval(function(date) {
-                  date.setUTCMonth(0, 1);
-                  date.setUTCHours(0, 0, 0, 0);
-                }, function(date, step) {
-                  date.setUTCFullYear(date.getUTCFullYear() + step);
-                }, function(start, end) {
-                  return end.getUTCFullYear() - start.getUTCFullYear();
-                }, function(date) {
-                  return date.getUTCFullYear();
-                });
-
-                // An optimized implementation for this simple case.
-                utcYear.every = function(k) {
-                  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
-                    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
-                    date.setUTCMonth(0, 1);
-                    date.setUTCHours(0, 0, 0, 0);
-                  }, function(date, step) {
-                    date.setUTCFullYear(date.getUTCFullYear() + step * k);
-                  });
-                };
-
-                var utcYears = utcYear.range;
-
-                // Computes the decimal coefficient and exponent of the specified number x with
-                // significant digits p, where x is positive and p is in [1, 21] or undefined.
-                // For example, formatDecimal(1.23) returns ["123", 0].
-                var formatDecimal = function(x, p) {
-                  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
-                  var i, coefficient = x.slice(0, i);
-
-                  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
-                  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
-                  return [
-                    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
-                    +x.slice(i + 1)
-                  ];
-                };
-
-                var exponent$1 = function(x) {
-                  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
-                };
-
-                var formatGroup = function(grouping, thousands) {
-                  return function(value, width) {
-                    var i = value.length,
-                        t = [],
-                        j = 0,
-                        g = grouping[0],
-                        length = 0;
-
-                    while (i > 0 && g > 0) {
-                      if (length + g + 1 > width) g = Math.max(1, width - length);
-                      t.push(value.substring(i -= g, i + g));
-                      if ((length += g + 1) > width) break;
-                      g = grouping[j = (j + 1) % grouping.length];
-                    }
-
-                    return t.reverse().join(thousands);
-                  };
-                };
-
-                var formatDefault = function(x, p) {
-                  x = x.toPrecision(p);
-
-                  out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
-                    switch (x[i]) {
-                      case ".": i0 = i1 = i; break;
-                      case "0": if (i0 === 0) i0 = i; i1 = i; break;
-                      case "e": break out;
-                      default: if (i0 > 0) i0 = 0; break;
-                    }
-                  }
-
-                  return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
-                };
-
-                var prefixExponent;
-
-                var formatPrefixAuto = function(x, p) {
-                  var d = formatDecimal(x, p);
-                  if (!d) return x + "";
-                  var coefficient = d[0],
-                      exponent = d[1],
-                      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
-                      n = coefficient.length;
-                  return i === n ? coefficient
-                      : i > n ? coefficient + new Array(i - n + 1).join("0")
-                      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
-                      : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
-                };
-
-                var formatRounded = function(x, p) {
-                  var d = formatDecimal(x, p);
-                  if (!d) return x + "";
-                  var coefficient = d[0],
-                      exponent = d[1];
-                  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
-                      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
-                      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
-                };
-
-                var formatTypes = {
-                  "": formatDefault,
-                  "%": function(x, p) { return (x * 100).toFixed(p); },
-                  "b": function(x) { return Math.round(x).toString(2); },
-                  "c": function(x) { return x + ""; },
-                  "d": function(x) { return Math.round(x).toString(10); },
-                  "e": function(x, p) { return x.toExponential(p); },
-                  "f": function(x, p) { return x.toFixed(p); },
-                  "g": function(x, p) { return x.toPrecision(p); },
-                  "o": function(x) { return Math.round(x).toString(8); },
-                  "p": function(x, p) { return formatRounded(x * 100, p); },
-                  "r": formatRounded,
-                  "s": formatPrefixAuto,
-                  "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
-                  "x": function(x) { return Math.round(x).toString(16); }
-                };
-
-                // [[fill]align][sign][symbol][0][width][,][.precision][type]
-                var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
-
-                var formatSpecifier = function(specifier) {
-                  return new FormatSpecifier(specifier);
-                };
-
-                function FormatSpecifier(specifier) {
-                  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
-
-                  var match,
-                      fill = match[1] || " ",
-                      align = match[2] || ">",
-                      sign = match[3] || "-",
-                      symbol = match[4] || "",
-                      zero = !!match[5],
-                      width = match[6] && +match[6],
-                      comma = !!match[7],
-                      precision = match[8] && +match[8].slice(1),
-                      type = match[9] || "";
-
-                  // The "n" type is an alias for ",g".
-                  if (type === "n") comma = true, type = "g";
-
-                  // Map invalid types to the default format.
-                  else if (!formatTypes[type]) type = "";
-
-                  // If zero fill is specified, padding goes after sign and before digits.
-                  if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
-
-                  this.fill = fill;
-                  this.align = align;
-                  this.sign = sign;
-                  this.symbol = symbol;
-                  this.zero = zero;
-                  this.width = width;
-                  this.comma = comma;
-                  this.precision = precision;
-                  this.type = type;
-                }
-
-                FormatSpecifier.prototype.toString = function() {
-                  return this.fill
-                      + this.align
-                      + this.sign
-                      + this.symbol
-                      + (this.zero ? "0" : "")
-                      + (this.width == null ? "" : Math.max(1, this.width | 0))
-                      + (this.comma ? "," : "")
-                      + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
-                      + this.type;
-                };
-
-                var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
-
-                function identity$3(x) {
-                  return x;
-                }
-
-                var formatLocale = function(locale) {
-                  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
-                      currency = locale.currency,
-                      decimal = locale.decimal;
-
-                  function newFormat(specifier) {
-                    specifier = formatSpecifier(specifier);
-
-                    var fill = specifier.fill,
-                        align = specifier.align,
-                        sign = specifier.sign,
-                        symbol = specifier.symbol,
-                        zero = specifier.zero,
-                        width = specifier.width,
-                        comma = specifier.comma,
-                        precision = specifier.precision,
-                        type = specifier.type;
-
-                    // Compute the prefix and suffix.
-                    // For SI-prefix, the suffix is lazily computed.
-                    var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
-                        suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
-
-                    // What format function should we use?
-                    // Is this an integer type?
-                    // Can this type generate exponential notation?
-                    var formatType = formatTypes[type],
-                        maybeSuffix = !type || /[defgprs%]/.test(type);
-
-                    // Set the default precision if not specified,
-                    // or clamp the specified precision to the supported range.
-                    // For significant precision, it must be in [1, 21].
-                    // For fixed precision, it must be in [0, 20].
-                    precision = precision == null ? (type ? 6 : 12)
-                        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
-                        : Math.max(0, Math.min(20, precision));
-
-                    function format(value) {
-                      var valuePrefix = prefix,
-                          valueSuffix = suffix,
-                          i, n, c;
-
-                      if (type === "c") {
-                        valueSuffix = formatType(value) + valueSuffix;
-                        value = "";
-                      } else {
-                        value = +value;
-
-                        // Convert negative to positive, and compute the prefix.
-                        // Note that -0 is not less than 0, but 1 / -0 is!
-                        var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
-
-                        // Perform the initial formatting.
-                        value = formatType(value, precision);
-
-                        // If the original value was negative, it may be rounded to zero during
-                        // formatting; treat this as (positive) zero.
-                        if (valueNegative) {
-                          i = -1, n = value.length;
-                          valueNegative = false;
-                          while (++i < n) {
-                            if (c = value.charCodeAt(i), (48 < c && c < 58)
-                                || (type === "x" && 96 < c && c < 103)
-                                || (type === "X" && 64 < c && c < 71)) {
-                              valueNegative = true;
-                              break;
-                            }
-                          }
-                        }
-
-                        // Compute the prefix and suffix.
-                        valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
-                        valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
-
-                        // Break the formatted value into the integer “value” part that can be
-                        // grouped, and fractional or exponential “suffix” part that is not.
-                        if (maybeSuffix) {
-                          i = -1, n = value.length;
-                          while (++i < n) {
-                            if (c = value.charCodeAt(i), 48 > c || c > 57) {
-                              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
-                              value = value.slice(0, i);
-                              break;
-                            }
-                          }
-                        }
-                      }
-
-                      // If the fill character is not "0", grouping is applied before padding.
-                      if (comma && !zero) value = group(value, Infinity);
-
-                      // Compute the padding.
-                      var length = valuePrefix.length + value.length + valueSuffix.length,
-                          padding = length < width ? new Array(width - length + 1).join(fill) : "";
-
-                      // If the fill character is "0", grouping is applied after padding.
-                      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
-
-                      // Reconstruct the final output based on the desired alignment.
-                      switch (align) {
-                        case "<": return valuePrefix + value + valueSuffix + padding;
-                        case "=": return valuePrefix + padding + value + valueSuffix;
-                        case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
-                      }
-                      return padding + valuePrefix + value + valueSuffix;
-                    }
-
-                    format.toString = function() {
-                      return specifier + "";
-                    };
-
-                    return format;
-                  }
-
-                  function formatPrefix(specifier, value) {
-                    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
-                        e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
-                        k = Math.pow(10, -e),
-                        prefix = prefixes[8 + e / 3];
-                    return function(value) {
-                      return f(k * value) + prefix;
-                    };
-                  }
-
-                  return {
-                    format: newFormat,
-                    formatPrefix: formatPrefix
-                  };
-                };
-
-                var locale$1;
-
-
-
-                defaultLocale({
-                  decimal: ".",
-                  thousands: ",",
-                  grouping: [3],
-                  currency: ["$", ""]
-                });
-
-                function defaultLocale(definition) {
-                  locale$1 = formatLocale(definition);
-                  exports.format = locale$1.format;
-                  exports.formatPrefix = locale$1.formatPrefix;
-                  return locale$1;
-                }
-
-                var precisionFixed = function(step) {
-                  return Math.max(0, -exponent$1(Math.abs(step)));
-                };
-
-                var precisionPrefix = function(step, value) {
-                  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
-                };
-
-                var precisionRound = function(step, max) {
-                  step = Math.abs(step), max = Math.abs(max) - step;
-                  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
-                };
-
-                function localDate(d) {
-                  if (0 <= d.y && d.y < 100) {
-                    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
-                    date.setFullYear(d.y);
-                    return date;
-                  }
-                  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
-                }
-
-                function utcDate(d) {
-                  if (0 <= d.y && d.y < 100) {
-                    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
-                    date.setUTCFullYear(d.y);
-                    return date;
-                  }
-                  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
-                }
-
-                function newYear(y) {
-                  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
-                }
-
-                function formatLocale$1(locale) {
-                  var locale_dateTime = locale.dateTime,
-                      locale_date = locale.date,
-                      locale_time = locale.time,
-                      locale_periods = locale.periods,
-                      locale_weekdays = locale.days,
-                      locale_shortWeekdays = locale.shortDays,
-                      locale_months = locale.months,
-                      locale_shortMonths = locale.shortMonths;
-
-                  var periodRe = formatRe(locale_periods),
-                      periodLookup = formatLookup(locale_periods),
-                      weekdayRe = formatRe(locale_weekdays),
-                      weekdayLookup = formatLookup(locale_weekdays),
-                      shortWeekdayRe = formatRe(locale_shortWeekdays),
-                      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
-                      monthRe = formatRe(locale_months),
-                      monthLookup = formatLookup(locale_months),
-                      shortMonthRe = formatRe(locale_shortMonths),
-                      shortMonthLookup = formatLookup(locale_shortMonths);
-
-                  var formats = {
-                    "a": formatShortWeekday,
-                    "A": formatWeekday,
-                    "b": formatShortMonth,
-                    "B": formatMonth,
-                    "c": null,
-                    "d": formatDayOfMonth,
-                    "e": formatDayOfMonth,
-                    "H": formatHour24,
-                    "I": formatHour12,
-                    "j": formatDayOfYear,
-                    "L": formatMilliseconds,
-                    "m": formatMonthNumber,
-                    "M": formatMinutes,
-                    "p": formatPeriod,
-                    "S": formatSeconds,
-                    "U": formatWeekNumberSunday,
-                    "w": formatWeekdayNumber,
-                    "W": formatWeekNumberMonday,
-                    "x": null,
-                    "X": null,
-                    "y": formatYear,
-                    "Y": formatFullYear,
-                    "Z": formatZone,
-                    "%": formatLiteralPercent
-                  };
-
-                  var utcFormats = {
-                    "a": formatUTCShortWeekday,
-                    "A": formatUTCWeekday,
-                    "b": formatUTCShortMonth,
-                    "B": formatUTCMonth,
-                    "c": null,
-                    "d": formatUTCDayOfMonth,
-                    "e": formatUTCDayOfMonth,
-                    "H": formatUTCHour24,
-                    "I": formatUTCHour12,
-                    "j": formatUTCDayOfYear,
-                    "L": formatUTCMilliseconds,
-                    "m": formatUTCMonthNumber,
-                    "M": formatUTCMinutes,
-                    "p": formatUTCPeriod,
-                    "S": formatUTCSeconds,
-                    "U": formatUTCWeekNumberSunday,
-                    "w": formatUTCWeekdayNumber,
-                    "W": formatUTCWeekNumberMonday,
-                    "x": null,
-                    "X": null,
-                    "y": formatUTCYear,
-                    "Y": formatUTCFullYear,
-                    "Z": formatUTCZone,
-                    "%": formatLiteralPercent
-                  };
-
-                  var parses = {
-                    "a": parseShortWeekday,
-                    "A": parseWeekday,
-                    "b": parseShortMonth,
-                    "B": parseMonth,
-                    "c": parseLocaleDateTime,
-                    "d": parseDayOfMonth,
-                    "e": parseDayOfMonth,
-                    "H": parseHour24,
-                    "I": parseHour24,
-                    "j": parseDayOfYear,
-                    "L": parseMilliseconds,
-                    "m": parseMonthNumber,
-                    "M": parseMinutes,
-                    "p": parsePeriod,
-                    "S": parseSeconds,
-                    "U": parseWeekNumberSunday,
-                    "w": parseWeekdayNumber,
-                    "W": parseWeekNumberMonday,
-                    "x": parseLocaleDate,
-                    "X": parseLocaleTime,
-                    "y": parseYear,
-                    "Y": parseFullYear,
-                    "Z": parseZone,
-                    "%": parseLiteralPercent
-                  };
-
-                  // These recursive directive definitions must be deferred.
-                  formats.x = newFormat(locale_date, formats);
-                  formats.X = newFormat(locale_time, formats);
-                  formats.c = newFormat(locale_dateTime, formats);
-                  utcFormats.x = newFormat(locale_date, utcFormats);
-                  utcFormats.X = newFormat(locale_time, utcFormats);
-                  utcFormats.c = newFormat(locale_dateTime, utcFormats);
-
-                  function newFormat(specifier, formats) {
-                    return function(date) {
-                      var string = [],
-                          i = -1,
-                          j = 0,
-                          n = specifier.length,
-                          c,
-                          pad,
-                          format;
-
-                      if (!(date instanceof Date)) date = new Date(+date);
-
-                      while (++i < n) {
-                        if (specifier.charCodeAt(i) === 37) {
-                          string.push(specifier.slice(j, i));
-                          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
-                          else pad = c === "e" ? " " : "0";
-                          if (format = formats[c]) c = format(date, pad);
-                          string.push(c);
-                          j = i + 1;
-                        }
-                      }
-
-                      string.push(specifier.slice(j, i));
-                      return string.join("");
-                    };
-                  }
-
-                  function newParse(specifier, newDate) {
-                    return function(string) {
-                      var d = newYear(1900),
-                          i = parseSpecifier(d, specifier, string += "", 0);
-                      if (i != string.length) return null;
-
-                      // The am-pm flag is 0 for AM, and 1 for PM.
-                      if ("p" in d) d.H = d.H % 12 + d.p * 12;
-
-                      // Convert day-of-week and week-of-year to day-of-year.
-                      if ("W" in d || "U" in d) {
-                        if (!("w" in d)) d.w = "W" in d ? 1 : 0;
-                        var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
-                        d.m = 0;
-                        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
-                      }
-
-                      // If a time zone is specified, all fields are interpreted as UTC and then
-                      // offset according to the specified time zone.
-                      if ("Z" in d) {
-                        d.H += d.Z / 100 | 0;
-                        d.M += d.Z % 100;
-                        return utcDate(d);
-                      }
-
-                      // Otherwise, all fields are in local time.
-                      return newDate(d);
-                    };
-                  }
-
-                  function parseSpecifier(d, specifier, string, j) {
-                    var i = 0,
-                        n = specifier.length,
-                        m = string.length,
-                        c,
-                        parse;
-
-                    while (i < n) {
-                      if (j >= m) return -1;
-                      c = specifier.charCodeAt(i++);
-                      if (c === 37) {
-                        c = specifier.charAt(i++);
-                        parse = parses[c in pads ? specifier.charAt(i++) : c];
-                        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
-                      } else if (c != string.charCodeAt(j++)) {
-                        return -1;
-                      }
-                    }
-
-                    return j;
-                  }
-
-                  function parsePeriod(d, string, i) {
-                    var n = periodRe.exec(string.slice(i));
-                    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-                  }
-
-                  function parseShortWeekday(d, string, i) {
-                    var n = shortWeekdayRe.exec(string.slice(i));
-                    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-                  }
-
-                  function parseWeekday(d, string, i) {
-                    var n = weekdayRe.exec(string.slice(i));
-                    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-                  }
-
-                  function parseShortMonth(d, string, i) {
-                    var n = shortMonthRe.exec(string.slice(i));
-                    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-                  }
-
-                  function parseMonth(d, string, i) {
-                    var n = monthRe.exec(string.slice(i));
-                    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
-                  }
-
-                  function parseLocaleDateTime(d, string, i) {
-                    return parseSpecifier(d, locale_dateTime, string, i);
-                  }
-
-                  function parseLocaleDate(d, string, i) {
-                    return parseSpecifier(d, locale_date, string, i);
-                  }
-
-                  function parseLocaleTime(d, string, i) {
-                    return parseSpecifier(d, locale_time, string, i);
-                  }
-
-                  function formatShortWeekday(d) {
-                    return locale_shortWeekdays[d.getDay()];
-                  }
-
-                  function formatWeekday(d) {
-                    return locale_weekdays[d.getDay()];
-                  }
-
-                  function formatShortMonth(d) {
-                    return locale_shortMonths[d.getMonth()];
-                  }
-
-                  function formatMonth(d) {
-                    return locale_months[d.getMonth()];
-                  }
-
-                  function formatPeriod(d) {
-                    return locale_periods[+(d.getHours() >= 12)];
-                  }
-
-                  function formatUTCShortWeekday(d) {
-                    return locale_shortWeekdays[d.getUTCDay()];
-                  }
-
-                  function formatUTCWeekday(d) {
-                    return locale_weekdays[d.getUTCDay()];
-                  }
-
-                  function formatUTCShortMonth(d) {
-                    return locale_shortMonths[d.getUTCMonth()];
-                  }
-
-                  function formatUTCMonth(d) {
-                    return locale_months[d.getUTCMonth()];
-                  }
-
-                  function formatUTCPeriod(d) {
-                    return locale_periods[+(d.getUTCHours() >= 12)];
-                  }
-
-                  return {
-                    format: function(specifier) {
-                      var f = newFormat(specifier += "", formats);
-                      f.toString = function() { return specifier; };
-                      return f;
-                    },
-                    parse: function(specifier) {
-                      var p = newParse(specifier += "", localDate);
-                      p.toString = function() { return specifier; };
-                      return p;
-                    },
-                    utcFormat: function(specifier) {
-                      var f = newFormat(specifier += "", utcFormats);
-                      f.toString = function() { return specifier; };
-                      return f;
-                    },
-                    utcParse: function(specifier) {
-                      var p = newParse(specifier, utcDate);
-                      p.toString = function() { return specifier; };
-                      return p;
-                    }
-                  };
-                }
-
-                var pads = {"-": "", "_": " ", "0": "0"};
-                var numberRe = /^\s*\d+/;
-                var percentRe = /^%/;
-                var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
-
-                function pad(value, fill, width) {
-                  var sign = value < 0 ? "-" : "",
-                      string = (sign ? -value : value) + "",
-                      length = string.length;
-                  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
-                }
-
-                function requote(s) {
-                  return s.replace(requoteRe, "\\$&");
-                }
-
-                function formatRe(names) {
-                  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
-                }
-
-                function formatLookup(names) {
-                  var map = {}, i = -1, n = names.length;
-                  while (++i < n) map[names[i].toLowerCase()] = i;
-                  return map;
-                }
-
-                function parseWeekdayNumber(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 1));
-                  return n ? (d.w = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseWeekNumberSunday(d, string, i) {
-                  var n = numberRe.exec(string.slice(i));
-                  return n ? (d.U = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseWeekNumberMonday(d, string, i) {
-                  var n = numberRe.exec(string.slice(i));
-                  return n ? (d.W = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseFullYear(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 4));
-                  return n ? (d.y = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseYear(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
-                }
-
-                function parseZone(d, string, i) {
-                  var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
-                  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
-                }
-
-                function parseMonthNumber(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
-                }
-
-                function parseDayOfMonth(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.d = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseDayOfYear(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 3));
-                  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseHour24(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.H = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseMinutes(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.M = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseSeconds(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 2));
-                  return n ? (d.S = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseMilliseconds(d, string, i) {
-                  var n = numberRe.exec(string.slice(i, i + 3));
-                  return n ? (d.L = +n[0], i + n[0].length) : -1;
-                }
-
-                function parseLiteralPercent(d, string, i) {
-                  var n = percentRe.exec(string.slice(i, i + 1));
-                  return n ? i + n[0].length : -1;
-                }
-
-                function formatDayOfMonth(d, p) {
-                  return pad(d.getDate(), p, 2);
-                }
-
-                function formatHour24(d, p) {
-                  return pad(d.getHours(), p, 2);
-                }
-
-                function formatHour12(d, p) {
-                  return pad(d.getHours() % 12 || 12, p, 2);
-                }
-
-                function formatDayOfYear(d, p) {
-                  return pad(1 + day.count(year(d), d), p, 3);
-                }
-
-                function formatMilliseconds(d, p) {
-                  return pad(d.getMilliseconds(), p, 3);
-                }
-
-                function formatMonthNumber(d, p) {
-                  return pad(d.getMonth() + 1, p, 2);
-                }
-
-                function formatMinutes(d, p) {
-                  return pad(d.getMinutes(), p, 2);
-                }
-
-                function formatSeconds(d, p) {
-                  return pad(d.getSeconds(), p, 2);
-                }
-
-                function formatWeekNumberSunday(d, p) {
-                  return pad(sunday.count(year(d), d), p, 2);
-                }
-
-                function formatWeekdayNumber(d) {
-                  return d.getDay();
-                }
-
-                function formatWeekNumberMonday(d, p) {
-                  return pad(monday.count(year(d), d), p, 2);
-                }
-
-                function formatYear(d, p) {
-                  return pad(d.getFullYear() % 100, p, 2);
-                }
-
-                function formatFullYear(d, p) {
-                  return pad(d.getFullYear() % 10000, p, 4);
-                }
-
-                function formatZone(d) {
-                  var z = d.getTimezoneOffset();
-                  return (z > 0 ? "-" : (z *= -1, "+"))
-                      + pad(z / 60 | 0, "0", 2)
-                      + pad(z % 60, "0", 2);
-                }
-
-                function formatUTCDayOfMonth(d, p) {
-                  return pad(d.getUTCDate(), p, 2);
-                }
-
-                function formatUTCHour24(d, p) {
-                  return pad(d.getUTCHours(), p, 2);
-                }
-
-                function formatUTCHour12(d, p) {
-                  return pad(d.getUTCHours() % 12 || 12, p, 2);
-                }
-
-                function formatUTCDayOfYear(d, p) {
-                  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
-                }
-
-                function formatUTCMilliseconds(d, p) {
-                  return pad(d.getUTCMilliseconds(), p, 3);
-                }
-
-                function formatUTCMonthNumber(d, p) {
-                  return pad(d.getUTCMonth() + 1, p, 2);
-                }
-
-                function formatUTCMinutes(d, p) {
-                  return pad(d.getUTCMinutes(), p, 2);
-                }
-
-                function formatUTCSeconds(d, p) {
-                  return pad(d.getUTCSeconds(), p, 2);
-                }
-
-                function formatUTCWeekNumberSunday(d, p) {
-                  return pad(utcSunday.count(utcYear(d), d), p, 2);
-                }
-
-                function formatUTCWeekdayNumber(d) {
-                  return d.getUTCDay();
-                }
-
-                function formatUTCWeekNumberMonday(d, p) {
-                  return pad(utcMonday.count(utcYear(d), d), p, 2);
-                }
-
-                function formatUTCYear(d, p) {
-                  return pad(d.getUTCFullYear() % 100, p, 2);
-                }
-
-                function formatUTCFullYear(d, p) {
-                  return pad(d.getUTCFullYear() % 10000, p, 4);
-                }
-
-                function formatUTCZone() {
-                  return "+0000";
-                }
-
-                function formatLiteralPercent() {
-                  return "%";
-                }
-
-                var locale$2;
-
-
-
-
-
-                defaultLocale$1({
-                  dateTime: "%x, %X",
-                  date: "%-m/%-d/%Y",
-                  time: "%-I:%M:%S %p",
-                  periods: ["AM", "PM"],
-                  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
-                  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
-                  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
-                  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
-                });
-
-                function defaultLocale$1(definition) {
-                  locale$2 = formatLocale$1(definition);
-                  exports.timeFormat = locale$2.format;
-                  exports.timeParse = locale$2.parse;
-                  exports.utcFormat = locale$2.utcFormat;
-                  exports.utcParse = locale$2.utcParse;
-                  return locale$2;
-                }
-
-                var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
-
-                function formatIsoNative(date) {
-                  return date.toISOString();
-                }
-
-                var formatIso = Date.prototype.toISOString
-                    ? formatIsoNative
-                    : exports.utcFormat(isoSpecifier);
-
-                function parseIsoNative(string) {
-                  var date = new Date(string);
-                  return isNaN(date) ? null : date;
-                }
-
-                var parseIso = +new Date("2000-01-01T00:00:00.000Z")
-                    ? parseIsoNative
-                    : exports.utcParse(isoSpecifier);
-
-                var array$2 = Array.prototype;
-
-                var map$3 = array$2.map;
-                var slice$3 = array$2.slice;
-
-                var implicit = {name: "implicit"};
-
-                function ordinal(range) {
-                  var index = map$1(),
-                      domain = [],
-                      unknown = implicit;
-
-                  range = range == null ? [] : slice$3.call(range);
-
-                  function scale(d) {
-                    var key = d + "", i = index.get(key);
-                    if (!i) {
-                      if (unknown !== implicit) return unknown;
-                      index.set(key, i = domain.push(d));
-                    }
-                    return range[(i - 1) % range.length];
-                  }
-
-                  scale.domain = function(_) {
-                    if (!arguments.length) return domain.slice();
-                    domain = [], index = map$1();
-                    var i = -1, n = _.length, d, key;
-                    while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
-                    return scale;
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (range = slice$3.call(_), scale) : range.slice();
-                  };
-
-                  scale.unknown = function(_) {
-                    return arguments.length ? (unknown = _, scale) : unknown;
-                  };
-
-                  scale.copy = function() {
-                    return ordinal()
-                        .domain(domain)
-                        .range(range)
-                        .unknown(unknown);
-                  };
-
-                  return scale;
-                }
-
-                function band() {
-                  var scale = ordinal().unknown(undefined),
-                      domain = scale.domain,
-                      ordinalRange = scale.range,
-                      range$$1 = [0, 1],
-                      step,
-                      bandwidth,
-                      round = false,
-                      paddingInner = 0,
-                      paddingOuter = 0,
-                      align = 0.5;
-
-                  delete scale.unknown;
-
-                  function rescale() {
-                    var n = domain().length,
-                        reverse = range$$1[1] < range$$1[0],
-                        start = range$$1[reverse - 0],
-                        stop = range$$1[1 - reverse];
-                    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
-                    if (round) step = Math.floor(step);
-                    start += (stop - start - step * (n - paddingInner)) * align;
-                    bandwidth = step * (1 - paddingInner);
-                    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
-                    var values = range(n).map(function(i) { return start + step * i; });
-                    return ordinalRange(reverse ? values.reverse() : values);
-                  }
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (domain(_), rescale()) : domain();
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
-                  };
-
-                  scale.rangeRound = function(_) {
-                    return range$$1 = [+_[0], +_[1]], round = true, rescale();
-                  };
-
-                  scale.bandwidth = function() {
-                    return bandwidth;
-                  };
-
-                  scale.step = function() {
-                    return step;
-                  };
-
-                  scale.round = function(_) {
-                    return arguments.length ? (round = !!_, rescale()) : round;
-                  };
-
-                  scale.padding = function(_) {
-                    return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
-                  };
-
-                  scale.paddingInner = function(_) {
-                    return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
-                  };
-
-                  scale.paddingOuter = function(_) {
-                    return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
-                  };
-
-                  scale.align = function(_) {
-                    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
-                  };
-
-                  scale.copy = function() {
-                    return band()
-                        .domain(domain())
-                        .range(range$$1)
-                        .round(round)
-                        .paddingInner(paddingInner)
-                        .paddingOuter(paddingOuter)
-                        .align(align);
-                  };
-
-                  return rescale();
-                }
-
-                function pointish(scale) {
-                  var copy = scale.copy;
-
-                  scale.padding = scale.paddingOuter;
-                  delete scale.paddingInner;
-                  delete scale.paddingOuter;
-
-                  scale.copy = function() {
-                    return pointish(copy());
-                  };
-
-                  return scale;
-                }
-
-                function point$4() {
-                  return pointish(band().paddingInner(1));
-                }
-
-                var constant$4 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var number$1 = function(x) {
-                  return +x;
-                };
-
-                var unit = [0, 1];
-
-                function deinterpolateLinear(a, b) {
-                  return (b -= (a = +a))
-                      ? function(x) { return (x - a) / b; }
-                      : constant$4(b);
-                }
-
-                function deinterpolateClamp(deinterpolate) {
-                  return function(a, b) {
-                    var d = deinterpolate(a = +a, b = +b);
-                    return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
-                  };
-                }
-
-                function reinterpolateClamp(reinterpolate) {
-                  return function(a, b) {
-                    var r = reinterpolate(a = +a, b = +b);
-                    return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
-                  };
-                }
-
-                function bimap(domain, range$$1, deinterpolate, reinterpolate) {
-                  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
-                  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
-                  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
-                  return function(x) { return r0(d0(x)); };
-                }
-
-                function polymap(domain, range$$1, deinterpolate, reinterpolate) {
-                  var j = Math.min(domain.length, range$$1.length) - 1,
-                      d = new Array(j),
-                      r = new Array(j),
-                      i = -1;
-
-                  // Reverse descending domains.
-                  if (domain[j] < domain[0]) {
-                    domain = domain.slice().reverse();
-                    range$$1 = range$$1.slice().reverse();
-                  }
-
-                  while (++i < j) {
-                    d[i] = deinterpolate(domain[i], domain[i + 1]);
-                    r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
-                  }
-
-                  return function(x) {
-                    var i = bisectRight(domain, x, 1, j) - 1;
-                    return r[i](d[i](x));
-                  };
-                }
-
-                function copy(source, target) {
-                  return target
-                      .domain(source.domain())
-                      .range(source.range())
-                      .interpolate(source.interpolate())
-                      .clamp(source.clamp());
-                }
-
-                // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
-                // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
-                function continuous(deinterpolate, reinterpolate) {
-                  var domain = unit,
-                      range$$1 = unit,
-                      interpolate$$1 = interpolate,
-                      clamp = false,
-                      piecewise,
-                      output,
-                      input;
-
-                  function rescale() {
-                    piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
-                    output = input = null;
-                    return scale;
-                  }
-
-                  function scale(x) {
-                    return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
-                  }
-
-                  scale.invert = function(y) {
-                    return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
-                  };
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
-                  };
-
-                  scale.rangeRound = function(_) {
-                    return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale();
-                  };
-
-                  scale.clamp = function(_) {
-                    return arguments.length ? (clamp = !!_, rescale()) : clamp;
-                  };
-
-                  scale.interpolate = function(_) {
-                    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
-                  };
-
-                  return rescale();
-                }
-
-                var tickFormat = function(domain, count, specifier) {
-                  var start = domain[0],
-                      stop = domain[domain.length - 1],
-                      step = tickStep(start, stop, count == null ? 10 : count),
-                      precision;
-                  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
-                  switch (specifier.type) {
-                    case "s": {
-                      var value = Math.max(Math.abs(start), Math.abs(stop));
-                      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
-                      return exports.formatPrefix(specifier, value);
-                    }
-                    case "":
-                    case "e":
-                    case "g":
-                    case "p":
-                    case "r": {
-                      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
-                      break;
-                    }
-                    case "f":
-                    case "%": {
-                      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
-                      break;
-                    }
-                  }
-                  return exports.format(specifier);
-                };
-
-                function linearish(scale) {
-                  var domain = scale.domain;
-
-                  scale.ticks = function(count) {
-                    var d = domain();
-                    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
-                  };
-
-                  scale.tickFormat = function(count, specifier) {
-                    return tickFormat(domain(), count, specifier);
-                  };
-
-                  scale.nice = function(count) {
-                    var d = domain(),
-                        i = d.length - 1,
-                        n = count == null ? 10 : count,
-                        start = d[0],
-                        stop = d[i],
-                        step = tickStep(start, stop, n);
-
-                    if (step) {
-                      step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
-                      d[0] = Math.floor(start / step) * step;
-                      d[i] = Math.ceil(stop / step) * step;
-                      domain(d);
-                    }
-
-                    return scale;
-                  };
-
-                  return scale;
-                }
-
-                function linear$2() {
-                  var scale = continuous(deinterpolateLinear, interpolateNumber);
-
-                  scale.copy = function() {
-                    return copy(scale, linear$2());
-                  };
-
-                  return linearish(scale);
-                }
-
-                function identity$4() {
-                  var domain = [0, 1];
-
-                  function scale(x) {
-                    return +x;
-                  }
-
-                  scale.invert = scale;
-
-                  scale.domain = scale.range = function(_) {
-                    return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
-                  };
-
-                  scale.copy = function() {
-                    return identity$4().domain(domain);
-                  };
-
-                  return linearish(scale);
-                }
-
-                var nice = function(domain, interval) {
-                  domain = domain.slice();
-
-                  var i0 = 0,
-                      i1 = domain.length - 1,
-                      x0 = domain[i0],
-                      x1 = domain[i1],
-                      t;
-
-                  if (x1 < x0) {
-                    t = i0, i0 = i1, i1 = t;
-                    t = x0, x0 = x1, x1 = t;
-                  }
-
-                  domain[i0] = interval.floor(x0);
-                  domain[i1] = interval.ceil(x1);
-                  return domain;
-                };
-
-                function deinterpolate(a, b) {
-                  return (b = Math.log(b / a))
-                      ? function(x) { return Math.log(x / a) / b; }
-                      : constant$4(b);
-                }
-
-                function reinterpolate(a, b) {
-                  return a < 0
-                      ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
-                      : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
-                }
-
-                function pow10(x) {
-                  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
-                }
-
-                function powp(base) {
-                  return base === 10 ? pow10
-                      : base === Math.E ? Math.exp
-                      : function(x) { return Math.pow(base, x); };
-                }
-
-                function logp(base) {
-                  return base === Math.E ? Math.log
-                      : base === 10 && Math.log10
-                      || base === 2 && Math.log2
-                      || (base = Math.log(base), function(x) { return Math.log(x) / base; });
-                }
-
-                function reflect(f) {
-                  return function(x) {
-                    return -f(-x);
-                  };
-                }
-
-                function log() {
-                  var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
-                      domain = scale.domain,
-                      base = 10,
-                      logs = logp(10),
-                      pows = powp(10);
-
-                  function rescale() {
-                    logs = logp(base), pows = powp(base);
-                    if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
-                    return scale;
-                  }
-
-                  scale.base = function(_) {
-                    return arguments.length ? (base = +_, rescale()) : base;
-                  };
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (domain(_), rescale()) : domain();
-                  };
-
-                  scale.ticks = function(count) {
-                    var d = domain(),
-                        u = d[0],
-                        v = d[d.length - 1],
-                        r;
-
-                    if (r = v < u) i = u, u = v, v = i;
-
-                    var i = logs(u),
-                        j = logs(v),
-                        p,
-                        k,
-                        t,
-                        n = count == null ? 10 : +count,
-                        z = [];
-
-                    if (!(base % 1) && j - i < n) {
-                      i = Math.round(i) - 1, j = Math.round(j) + 1;
-                      if (u > 0) for (; i < j; ++i) {
-                        for (k = 1, p = pows(i); k < base; ++k) {
-                          t = p * k;
-                          if (t < u) continue;
-                          if (t > v) break;
-                          z.push(t);
-                        }
-                      } else for (; i < j; ++i) {
-                        for (k = base - 1, p = pows(i); k >= 1; --k) {
-                          t = p * k;
-                          if (t < u) continue;
-                          if (t > v) break;
-                          z.push(t);
-                        }
-                      }
-                    } else {
-                      z = ticks(i, j, Math.min(j - i, n)).map(pows);
-                    }
-
-                    return r ? z.reverse() : z;
-                  };
-
-                  scale.tickFormat = function(count, specifier) {
-                    if (specifier == null) specifier = base === 10 ? ".0e" : ",";
-                    if (typeof specifier !== "function") specifier = exports.format(specifier);
-                    if (count === Infinity) return specifier;
-                    if (count == null) count = 10;
-                    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
-                    return function(d) {
-                      var i = d / pows(Math.round(logs(d)));
-                      if (i * base < base - 0.5) i *= base;
-                      return i <= k ? specifier(d) : "";
-                    };
-                  };
-
-                  scale.nice = function() {
-                    return domain(nice(domain(), {
-                      floor: function(x) { return pows(Math.floor(logs(x))); },
-                      ceil: function(x) { return pows(Math.ceil(logs(x))); }
-                    }));
-                  };
-
-                  scale.copy = function() {
-                    return copy(scale, log().base(base));
-                  };
-
-                  return scale;
-                }
-
-                function raise(x, exponent) {
-                  return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
-                }
-
-                function pow() {
-                  var exponent = 1,
-                      scale = continuous(deinterpolate, reinterpolate),
-                      domain = scale.domain;
-
-                  function deinterpolate(a, b) {
-                    return (b = raise(b, exponent) - (a = raise(a, exponent)))
-                        ? function(x) { return (raise(x, exponent) - a) / b; }
-                        : constant$4(b);
-                  }
-
-                  function reinterpolate(a, b) {
-                    b = raise(b, exponent) - (a = raise(a, exponent));
-                    return function(t) { return raise(a + b * t, 1 / exponent); };
-                  }
-
-                  scale.exponent = function(_) {
-                    return arguments.length ? (exponent = +_, domain(domain())) : exponent;
-                  };
-
-                  scale.copy = function() {
-                    return copy(scale, pow().exponent(exponent));
-                  };
-
-                  return linearish(scale);
-                }
-
-                function sqrt() {
-                  return pow().exponent(0.5);
-                }
-
-                function quantile$$1() {
-                  var domain = [],
-                      range$$1 = [],
-                      thresholds = [];
-
-                  function rescale() {
-                    var i = 0, n = Math.max(1, range$$1.length);
-                    thresholds = new Array(n - 1);
-                    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
-                    return scale;
-                  }
-
-                  function scale(x) {
-                    if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
-                  }
-
-                  scale.invertExtent = function(y) {
-                    var i = range$$1.indexOf(y);
-                    return i < 0 ? [NaN, NaN] : [
-                      i > 0 ? thresholds[i - 1] : domain[0],
-                      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
-                    ];
-                  };
-
-                  scale.domain = function(_) {
-                    if (!arguments.length) return domain.slice();
-                    domain = [];
-                    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
-                    domain.sort(ascending);
-                    return rescale();
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
-                  };
-
-                  scale.quantiles = function() {
-                    return thresholds.slice();
-                  };
-
-                  scale.copy = function() {
-                    return quantile$$1()
-                        .domain(domain)
-                        .range(range$$1);
-                  };
-
-                  return scale;
-                }
-
-                function quantize$1() {
-                  var x0 = 0,
-                      x1 = 1,
-                      n = 1,
-                      domain = [0.5],
-                      range$$1 = [0, 1];
-
-                  function scale(x) {
-                    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
-                  }
-
-                  function rescale() {
-                    var i = -1;
-                    domain = new Array(n);
-                    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
-                    return scale;
-                  }
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice();
-                  };
-
-                  scale.invertExtent = function(y) {
-                    var i = range$$1.indexOf(y);
-                    return i < 0 ? [NaN, NaN]
-                        : i < 1 ? [x0, domain[0]]
-                        : i >= n ? [domain[n - 1], x1]
-                        : [domain[i - 1], domain[i]];
-                  };
-
-                  scale.copy = function() {
-                    return quantize$1()
-                        .domain([x0, x1])
-                        .range(range$$1);
-                  };
-
-                  return linearish(scale);
-                }
-
-                function threshold$1() {
-                  var domain = [0.5],
-                      range$$1 = [0, 1],
-                      n = 1;
-
-                  function scale(x) {
-                    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
-                  }
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
-                  };
-
-                  scale.range = function(_) {
-                    return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
-                  };
-
-                  scale.invertExtent = function(y) {
-                    var i = range$$1.indexOf(y);
-                    return [domain[i - 1], domain[i]];
-                  };
-
-                  scale.copy = function() {
-                    return threshold$1()
-                        .domain(domain)
-                        .range(range$$1);
-                  };
-
-                  return scale;
-                }
-
-                var durationSecond$1 = 1000;
-                var durationMinute$1 = durationSecond$1 * 60;
-                var durationHour$1 = durationMinute$1 * 60;
-                var durationDay$1 = durationHour$1 * 24;
-                var durationWeek$1 = durationDay$1 * 7;
-                var durationMonth = durationDay$1 * 30;
-                var durationYear = durationDay$1 * 365;
-
-                function date$1(t) {
-                  return new Date(t);
-                }
-
-                function number$2(t) {
-                  return t instanceof Date ? +t : +new Date(+t);
-                }
-
-                function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
-                  var scale = continuous(deinterpolateLinear, interpolateNumber),
-                      invert = scale.invert,
-                      domain = scale.domain;
-
-                  var formatMillisecond = format(".%L"),
-                      formatSecond = format(":%S"),
-                      formatMinute = format("%I:%M"),
-                      formatHour = format("%I %p"),
-                      formatDay = format("%a %d"),
-                      formatWeek = format("%b %d"),
-                      formatMonth = format("%B"),
-                      formatYear = format("%Y");
-
-                  var tickIntervals = [
-                    [second$$1,  1,      durationSecond$1],
-                    [second$$1,  5,  5 * durationSecond$1],
-                    [second$$1, 15, 15 * durationSecond$1],
-                    [second$$1, 30, 30 * durationSecond$1],
-                    [minute$$1,  1,      durationMinute$1],
-                    [minute$$1,  5,  5 * durationMinute$1],
-                    [minute$$1, 15, 15 * durationMinute$1],
-                    [minute$$1, 30, 30 * durationMinute$1],
-                    [  hour$$1,  1,      durationHour$1  ],
-                    [  hour$$1,  3,  3 * durationHour$1  ],
-                    [  hour$$1,  6,  6 * durationHour$1  ],
-                    [  hour$$1, 12, 12 * durationHour$1  ],
-                    [   day$$1,  1,      durationDay$1   ],
-                    [   day$$1,  2,  2 * durationDay$1   ],
-                    [  week,  1,      durationWeek$1  ],
-                    [ month$$1,  1,      durationMonth ],
-                    [ month$$1,  3,  3 * durationMonth ],
-                    [  year$$1,  1,      durationYear  ]
-                  ];
-
-                  function tickFormat(date) {
-                    return (second$$1(date) < date ? formatMillisecond
-                        : minute$$1(date) < date ? formatSecond
-                        : hour$$1(date) < date ? formatMinute
-                        : day$$1(date) < date ? formatHour
-                        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
-                        : year$$1(date) < date ? formatMonth
-                        : formatYear)(date);
-                  }
-
-                  function tickInterval(interval, start, stop, step) {
-                    if (interval == null) interval = 10;
-
-                    // If a desired tick count is specified, pick a reasonable tick interval
-                    // based on the extent of the domain and a rough estimate of tick size.
-                    // Otherwise, assume interval is already a time interval and use it.
-                    if (typeof interval === "number") {
-                      var target = Math.abs(stop - start) / interval,
-                          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
-                      if (i === tickIntervals.length) {
-                        step = tickStep(start / durationYear, stop / durationYear, interval);
-                        interval = year$$1;
-                      } else if (i) {
-                        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
-                        step = i[1];
-                        interval = i[0];
-                      } else {
-                        step = tickStep(start, stop, interval);
-                        interval = millisecond$$1;
-                      }
-                    }
-
-                    return step == null ? interval : interval.every(step);
-                  }
-
-                  scale.invert = function(y) {
-                    return new Date(invert(y));
-                  };
-
-                  scale.domain = function(_) {
-                    return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
-                  };
-
-                  scale.ticks = function(interval, step) {
-                    var d = domain(),
-                        t0 = d[0],
-                        t1 = d[d.length - 1],
-                        r = t1 < t0,
-                        t;
-                    if (r) t = t0, t0 = t1, t1 = t;
-                    t = tickInterval(interval, t0, t1, step);
-                    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
-                    return r ? t.reverse() : t;
-                  };
-
-                  scale.tickFormat = function(count, specifier) {
-                    return specifier == null ? tickFormat : format(specifier);
-                  };
-
-                  scale.nice = function(interval, step) {
-                    var d = domain();
-                    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
-                        ? domain(nice(d, interval))
-                        : scale;
-                  };
-
-                  scale.copy = function() {
-                    return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
-                  };
-
-                  return scale;
-                }
-
-                var time = function() {
-                  return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
-                };
-
-                var utcTime = function() {
-                  return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
-                };
-
-                var colors = function(s) {
-                  return s.match(/.{6}/g).map(function(x) {
-                    return "#" + x;
-                  });
-                };
-
-                var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
-
-                var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
-
-                var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
-
-                var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
-
-                var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
-
-                var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
-
-                var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
-
-                var rainbow = cubehelix();
-
-                var rainbow$1 = function(t) {
-                  if (t < 0 || t > 1) t -= Math.floor(t);
-                  var ts = Math.abs(t - 0.5);
-                  rainbow.h = 360 * t - 100;
-                  rainbow.s = 1.5 - 1.5 * ts;
-                  rainbow.l = 0.8 - 0.9 * ts;
-                  return rainbow + "";
-                };
-
-                function ramp(range) {
-                  var n = range.length;
-                  return function(t) {
-                    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
-                  };
-                }
-
-                var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
-
-                var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
-
-                var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
-
-                var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
-
-                function sequential(interpolator) {
-                  var x0 = 0,
-                      x1 = 1,
-                      clamp = false;
-
-                  function scale(x) {
-                    var t = (x - x0) / (x1 - x0);
-                    return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
-                  }
-
-                  scale.domain = function(_) {
-                    return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
-                  };
-
-                  scale.clamp = function(_) {
-                    return arguments.length ? (clamp = !!_, scale) : clamp;
-                  };
-
-                  scale.interpolator = function(_) {
-                    return arguments.length ? (interpolator = _, scale) : interpolator;
-                  };
-
-                  scale.copy = function() {
-                    return sequential(interpolator).domain([x0, x1]).clamp(clamp);
-                  };
-
-                  return linearish(scale);
-                }
-
-                var xhtml = "http://www.w3.org/1999/xhtml";
-
-                var namespaces = {
-                  svg: "http://www.w3.org/2000/svg",
-                  xhtml: xhtml,
-                  xlink: "http://www.w3.org/1999/xlink",
-                  xml: "http://www.w3.org/XML/1998/namespace",
-                  xmlns: "http://www.w3.org/2000/xmlns/"
-                };
-
-                var namespace = function(name) {
-                  var prefix = name += "", i = prefix.indexOf(":");
-                  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
-                  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
-                };
-
-                function creatorInherit(name) {
-                  return function() {
-                    var document = this.ownerDocument,
-                        uri = this.namespaceURI;
-                    return uri === xhtml && document.documentElement.namespaceURI === xhtml
-                        ? document.createElement(name)
-                        : document.createElementNS(uri, name);
-                  };
-                }
-
-                function creatorFixed(fullname) {
-                  return function() {
-                    return this.ownerDocument.createElementNS(fullname.space, fullname.local);
-                  };
-                }
-
-                var creator = function(name) {
-                  var fullname = namespace(name);
-                  return (fullname.local
-                      ? creatorFixed
-                      : creatorInherit)(fullname);
-                };
-
-                var nextId = 0;
-
-                function local() {
-                  return new Local;
-                }
-
-                function Local() {
-                  this._ = "@" + (++nextId).toString(36);
-                }
-
-                Local.prototype = local.prototype = {
-                  constructor: Local,
-                  get: function(node) {
-                    var id = this._;
-                    while (!(id in node)) if (!(node = node.parentNode)) return;
-                    return node[id];
-                  },
-                  set: function(node, value) {
-                    return node[this._] = value;
-                  },
-                  remove: function(node) {
-                    return this._ in node && delete node[this._];
-                  },
-                  toString: function() {
-                    return this._;
-                  }
-                };
-
-                var matcher = function(selector) {
-                  return function() {
-                    return this.matches(selector);
-                  };
-                };
-
-                if (typeof document !== "undefined") {
-                  var element = document.documentElement;
-                  if (!element.matches) {
-                    var vendorMatches = element.webkitMatchesSelector
-                        || element.msMatchesSelector
-                        || element.mozMatchesSelector
-                        || element.oMatchesSelector;
-                    matcher = function(selector) {
-                      return function() {
-                        return vendorMatches.call(this, selector);
-                      };
-                    };
-                  }
-                }
-
-                var matcher$1 = matcher;
-
-                var filterEvents = {};
-
-                exports.event = null;
-
-                if (typeof document !== "undefined") {
-                  var element$1 = document.documentElement;
-                  if (!("onmouseenter" in element$1)) {
-                    filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
-                  }
-                }
-
-                function filterContextListener(listener, index, group) {
-                  listener = contextListener(listener, index, group);
-                  return function(event) {
-                    var related = event.relatedTarget;
-                    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
-                      listener.call(this, event);
-                    }
-                  };
-                }
-
-                function contextListener(listener, index, group) {
-                  return function(event1) {
-                    var event0 = exports.event; // Events can be reentrant (e.g., focus).
-                    exports.event = event1;
-                    try {
-                      listener.call(this, this.__data__, index, group);
-                    } finally {
-                      exports.event = event0;
-                    }
-                  };
-                }
-
-                function parseTypenames$1(typenames) {
-                  return typenames.trim().split(/^|\s+/).map(function(t) {
-                    var name = "", i = t.indexOf(".");
-                    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-                    return {type: t, name: name};
-                  });
-                }
-
-                function onRemove(typename) {
-                  return function() {
-                    var on = this.__on;
-                    if (!on) return;
-                    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
-                      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
-                        this.removeEventListener(o.type, o.listener, o.capture);
-                      } else {
-                        on[++i] = o;
-                      }
-                    }
-                    if (++i) on.length = i;
-                    else delete this.__on;
-                  };
-                }
-
-                function onAdd(typename, value, capture) {
-                  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
-                  return function(d, i, group) {
-                    var on = this.__on, o, listener = wrap(value, i, group);
-                    if (on) for (var j = 0, m = on.length; j < m; ++j) {
-                      if ((o = on[j]).type === typename.type && o.name === typename.name) {
-                        this.removeEventListener(o.type, o.listener, o.capture);
-                        this.addEventListener(o.type, o.listener = listener, o.capture = capture);
-                        o.value = value;
-                        return;
-                      }
-                    }
-                    this.addEventListener(typename.type, listener, capture);
-                    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
-                    if (!on) this.__on = [o];
-                    else on.push(o);
-                  };
-                }
-
-                var selection_on = function(typename, value, capture) {
-                  var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
-
-                  if (arguments.length < 2) {
-                    var on = this.node().__on;
-                    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
-                      for (i = 0, o = on[j]; i < n; ++i) {
-                        if ((t = typenames[i]).type === o.type && t.name === o.name) {
-                          return o.value;
-                        }
-                      }
-                    }
-                    return;
-                  }
-
-                  on = value ? onAdd : onRemove;
-                  if (capture == null) capture = false;
-                  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
-                  return this;
-                };
-
-                function customEvent(event1, listener, that, args) {
-                  var event0 = exports.event;
-                  event1.sourceEvent = exports.event;
-                  exports.event = event1;
-                  try {
-                    return listener.apply(that, args);
-                  } finally {
-                    exports.event = event0;
-                  }
-                }
-
-                var sourceEvent = function() {
-                  var current = exports.event, source;
-                  while (source = current.sourceEvent) current = source;
-                  return current;
-                };
-
-                var point$5 = function(node, event) {
-                  var svg = node.ownerSVGElement || node;
-
-                  if (svg.createSVGPoint) {
-                    var point = svg.createSVGPoint();
-                    point.x = event.clientX, point.y = event.clientY;
-                    point = point.matrixTransform(node.getScreenCTM().inverse());
-                    return [point.x, point.y];
-                  }
-
-                  var rect = node.getBoundingClientRect();
-                  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
-                };
-
-                var mouse = function(node) {
-                  var event = sourceEvent();
-                  if (event.changedTouches) event = event.changedTouches[0];
-                  return point$5(node, event);
-                };
-
-                function none$2() {}
-
-                var selector = function(selector) {
-                  return selector == null ? none$2 : function() {
-                    return this.querySelector(selector);
-                  };
-                };
-
-                var selection_select = function(select) {
-                  if (typeof select !== "function") select = selector(select);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-                      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
-                        if ("__data__" in node) subnode.__data__ = node.__data__;
-                        subgroup[i] = subnode;
-                      }
-                    }
-                  }
-
-                  return new Selection(subgroups, this._parents);
-                };
-
-                function empty() {
-                  return [];
-                }
-
-                var selectorAll = function(selector) {
-                  return selector == null ? empty : function() {
-                    return this.querySelectorAll(selector);
-                  };
-                };
-
-                var selection_selectAll = function(select) {
-                  if (typeof select !== "function") select = selectorAll(select);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-                      if (node = group[i]) {
-                        subgroups.push(select.call(node, node.__data__, i, group));
-                        parents.push(node);
-                      }
-                    }
-                  }
-
-                  return new Selection(subgroups, parents);
-                };
-
-                var selection_filter = function(match) {
-                  if (typeof match !== "function") match = matcher$1(match);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-                      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-                        subgroup.push(node);
-                      }
-                    }
-                  }
-
-                  return new Selection(subgroups, this._parents);
-                };
-
-                var sparse = function(update) {
-                  return new Array(update.length);
-                };
-
-                var selection_enter = function() {
-                  return new Selection(this._enter || this._groups.map(sparse), this._parents);
-                };
-
-                function EnterNode(parent, datum) {
-                  this.ownerDocument = parent.ownerDocument;
-                  this.namespaceURI = parent.namespaceURI;
-                  this._next = null;
-                  this._parent = parent;
-                  this.__data__ = datum;
-                }
-
-                EnterNode.prototype = {
-                  constructor: EnterNode,
-                  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
-                  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
-                  querySelector: function(selector) { return this._parent.querySelector(selector); },
-                  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
-                };
-
-                var constant$5 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var keyPrefix = "$"; // Protect against keys like “__proto__”.
-
-                function bindIndex(parent, group, enter, update, exit, data) {
-                  var i = 0,
-                      node,
-                      groupLength = group.length,
-                      dataLength = data.length;
-
-                  // Put any non-null nodes that fit into update.
-                  // Put any null nodes into enter.
-                  // Put any remaining data into enter.
-                  for (; i < dataLength; ++i) {
-                    if (node = group[i]) {
-                      node.__data__ = data[i];
-                      update[i] = node;
-                    } else {
-                      enter[i] = new EnterNode(parent, data[i]);
-                    }
-                  }
-
-                  // Put any non-null nodes that don’t fit into exit.
-                  for (; i < groupLength; ++i) {
-                    if (node = group[i]) {
-                      exit[i] = node;
-                    }
-                  }
-                }
-
-                function bindKey(parent, group, enter, update, exit, data, key) {
-                  var i,
-                      node,
-                      nodeByKeyValue = {},
-                      groupLength = group.length,
-                      dataLength = data.length,
-                      keyValues = new Array(groupLength),
-                      keyValue;
-
-                  // Compute the key for each node.
-                  // If multiple nodes have the same key, the duplicates are added to exit.
-                  for (i = 0; i < groupLength; ++i) {
-                    if (node = group[i]) {
-                      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
-                      if (keyValue in nodeByKeyValue) {
-                        exit[i] = node;
-                      } else {
-                        nodeByKeyValue[keyValue] = node;
-                      }
-                    }
-                  }
-
-                  // Compute the key for each datum.
-                  // If there a node associated with this key, join and add it to update.
-                  // If there is not (or the key is a duplicate), add it to enter.
-                  for (i = 0; i < dataLength; ++i) {
-                    keyValue = keyPrefix + key.call(parent, data[i], i, data);
-                    if (node = nodeByKeyValue[keyValue]) {
-                      update[i] = node;
-                      node.__data__ = data[i];
-                      nodeByKeyValue[keyValue] = null;
-                    } else {
-                      enter[i] = new EnterNode(parent, data[i]);
-                    }
-                  }
-
-                  // Add any remaining nodes that were not bound to data to exit.
-                  for (i = 0; i < groupLength; ++i) {
-                    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
-                      exit[i] = node;
-                    }
-                  }
-                }
-
-                var selection_data = function(value, key) {
-                  if (!value) {
-                    data = new Array(this.size()), j = -1;
-                    this.each(function(d) { data[++j] = d; });
-                    return data;
-                  }
-
-                  var bind = key ? bindKey : bindIndex,
-                      parents = this._parents,
-                      groups = this._groups;
-
-                  if (typeof value !== "function") value = constant$5(value);
-
-                  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
-                    var parent = parents[j],
-                        group = groups[j],
-                        groupLength = group.length,
-                        data = value.call(parent, parent && parent.__data__, j, parents),
-                        dataLength = data.length,
-                        enterGroup = enter[j] = new Array(dataLength),
-                        updateGroup = update[j] = new Array(dataLength),
-                        exitGroup = exit[j] = new Array(groupLength);
-
-                    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
-
-                    // Now connect the enter nodes to their following update node, such that
-                    // appendChild can insert the materialized enter node before this node,
-                    // rather than at the end of the parent node.
-                    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
-                      if (previous = enterGroup[i0]) {
-                        if (i0 >= i1) i1 = i0 + 1;
-                        while (!(next = updateGroup[i1]) && ++i1 < dataLength);
-                        previous._next = next || null;
-                      }
-                    }
-                  }
-
-                  update = new Selection(update, parents);
-                  update._enter = enter;
-                  update._exit = exit;
-                  return update;
-                };
-
-                var selection_exit = function() {
-                  return new Selection(this._exit || this._groups.map(sparse), this._parents);
-                };
-
-                var selection_merge = function(selection) {
-
-                  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-                    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-                      if (node = group0[i] || group1[i]) {
-                        merge[i] = node;
-                      }
-                    }
-                  }
-
-                  for (; j < m0; ++j) {
-                    merges[j] = groups0[j];
-                  }
-
-                  return new Selection(merges, this._parents);
-                };
-
-                var selection_order = function() {
-
-                  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
-                    for (var group = groups[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;
-                };
-
-                var selection_sort = function(compare) {
-                  if (!compare) compare = ascending$2;
-
-                  function compareNode(a, b) {
-                    return a && b ? compare(a.__data__, b.__data__) : !a - !b;
-                  }
-
-                  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
-                      if (node = group[i]) {
-                        sortgroup[i] = node;
-                      }
-                    }
-                    sortgroup.sort(compareNode);
-                  }
-
-                  return new Selection(sortgroups, this._parents).order();
-                };
-
-                function ascending$2(a, b) {
-                  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-                }
-
-                var selection_call = function() {
-                  var callback = arguments[0];
-                  arguments[0] = this;
-                  callback.apply(null, arguments);
-                  return this;
-                };
-
-                var selection_nodes = function() {
-                  var nodes = new Array(this.size()), i = -1;
-                  this.each(function() { nodes[++i] = this; });
-                  return nodes;
-                };
-
-                var selection_node = function() {
-
-                  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
-                    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
-                      var node = group[i];
-                      if (node) return node;
-                    }
-                  }
-
-                  return null;
-                };
-
-                var selection_size = function() {
-                  var size = 0;
-                  this.each(function() { ++size; });
-                  return size;
-                };
-
-                var selection_empty = function() {
-                  return !this.node();
-                };
-
-                var selection_each = function(callback) {
-
-                  for (var groups = this._groups, 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.call(node, node.__data__, i, group);
-                    }
-                  }
-
-                  return this;
-                };
-
-                function attrRemove(name) {
-                  return function() {
-                    this.removeAttribute(name);
-                  };
-                }
-
-                function attrRemoveNS(fullname) {
-                  return function() {
-                    this.removeAttributeNS(fullname.space, fullname.local);
-                  };
-                }
-
-                function attrConstant(name, value) {
-                  return function() {
-                    this.setAttribute(name, value);
-                  };
-                }
-
-                function attrConstantNS(fullname, value) {
-                  return function() {
-                    this.setAttributeNS(fullname.space, fullname.local, value);
-                  };
-                }
-
-                function attrFunction(name, value) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    if (v == null) this.removeAttribute(name);
-                    else this.setAttribute(name, v);
-                  };
-                }
-
-                function attrFunctionNS(fullname, value) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
-                    else this.setAttributeNS(fullname.space, fullname.local, v);
-                  };
-                }
-
-                var selection_attr = function(name, value) {
-                  var fullname = namespace(name);
-
-                  if (arguments.length < 2) {
-                    var node = this.node();
-                    return fullname.local
-                        ? node.getAttributeNS(fullname.space, fullname.local)
-                        : node.getAttribute(fullname);
-                  }
-
-                  return this.each((value == null
-                      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
-                      ? (fullname.local ? attrFunctionNS : attrFunction)
-                      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
-                };
-
-                var window = function(node) {
-                  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
-                      || (node.document && node) // node is a Window
-                      || node.defaultView; // node is a Document
-                };
-
-                function styleRemove(name) {
-                  return function() {
-                    this.style.removeProperty(name);
-                  };
-                }
-
-                function styleConstant(name, value, priority) {
-                  return function() {
-                    this.style.setProperty(name, value, priority);
-                  };
-                }
-
-                function styleFunction(name, value, priority) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    if (v == null) this.style.removeProperty(name);
-                    else this.style.setProperty(name, v, priority);
-                  };
-                }
-
-                var selection_style = function(name, value, priority) {
-                  var node;
-                  return arguments.length > 1
-                      ? this.each((value == null
-                            ? styleRemove : typeof value === "function"
-                            ? styleFunction
-                            : styleConstant)(name, value, priority == null ? "" : priority))
-                      : window(node = this.node())
-                          .getComputedStyle(node, null)
-                          .getPropertyValue(name);
-                };
-
-                function propertyRemove(name) {
-                  return function() {
-                    delete this[name];
-                  };
-                }
-
-                function propertyConstant(name, value) {
-                  return function() {
-                    this[name] = value;
-                  };
-                }
-
-                function propertyFunction(name, value) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    if (v == null) delete this[name];
-                    else this[name] = v;
-                  };
-                }
-
-                var selection_property = function(name, value) {
-                  return arguments.length > 1
-                      ? this.each((value == null
-                          ? propertyRemove : typeof value === "function"
-                          ? propertyFunction
-                          : propertyConstant)(name, value))
-                      : this.node()[name];
-                };
-
-                function classArray(string) {
-                  return string.trim().split(/^|\s+/);
-                }
-
-                function classList(node) {
-                  return node.classList || new ClassList(node);
-                }
-
-                function ClassList(node) {
-                  this._node = node;
-                  this._names = classArray(node.getAttribute("class") || "");
-                }
-
-                ClassList.prototype = {
-                  add: function(name) {
-                    var i = this._names.indexOf(name);
-                    if (i < 0) {
-                      this._names.push(name);
-                      this._node.setAttribute("class", this._names.join(" "));
-                    }
-                  },
-                  remove: function(name) {
-                    var i = this._names.indexOf(name);
-                    if (i >= 0) {
-                      this._names.splice(i, 1);
-                      this._node.setAttribute("class", this._names.join(" "));
-                    }
-                  },
-                  contains: function(name) {
-                    return this._names.indexOf(name) >= 0;
-                  }
-                };
-
-                function classedAdd(node, names) {
-                  var list = classList(node), i = -1, n = names.length;
-                  while (++i < n) list.add(names[i]);
-                }
-
-                function classedRemove(node, names) {
-                  var list = classList(node), i = -1, n = names.length;
-                  while (++i < n) list.remove(names[i]);
-                }
-
-                function classedTrue(names) {
-                  return function() {
-                    classedAdd(this, names);
-                  };
-                }
-
-                function classedFalse(names) {
-                  return function() {
-                    classedRemove(this, names);
-                  };
-                }
-
-                function classedFunction(names, value) {
-                  return function() {
-                    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
-                  };
-                }
-
-                var selection_classed = function(name, value) {
-                  var names = classArray(name + "");
-
-                  if (arguments.length < 2) {
-                    var list = classList(this.node()), i = -1, n = names.length;
-                    while (++i < n) if (!list.contains(names[i])) return false;
-                    return true;
-                  }
-
-                  return this.each((typeof value === "function"
-                      ? classedFunction : value
-                      ? classedTrue
-                      : classedFalse)(names, value));
-                };
-
-                function textRemove() {
-                  this.textContent = "";
-                }
-
-                function textConstant(value) {
-                  return function() {
-                    this.textContent = value;
-                  };
-                }
-
-                function textFunction(value) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    this.textContent = v == null ? "" : v;
-                  };
-                }
-
-                var selection_text = function(value) {
-                  return arguments.length
-                      ? this.each(value == null
-                          ? textRemove : (typeof value === "function"
-                          ? textFunction
-                          : textConstant)(value))
-                      : this.node().textContent;
-                };
-
-                function htmlRemove() {
-                  this.innerHTML = "";
-                }
-
-                function htmlConstant(value) {
-                  return function() {
-                    this.innerHTML = value;
-                  };
-                }
-
-                function htmlFunction(value) {
-                  return function() {
-                    var v = value.apply(this, arguments);
-                    this.innerHTML = v == null ? "" : v;
-                  };
-                }
-
-                var selection_html = function(value) {
-                  return arguments.length
-                      ? this.each(value == null
-                          ? htmlRemove : (typeof value === "function"
-                          ? htmlFunction
-                          : htmlConstant)(value))
-                      : this.node().innerHTML;
-                };
-
-                function raise$1() {
-                  if (this.nextSibling) this.parentNode.appendChild(this);
-                }
-
-                var selection_raise = function() {
-                  return this.each(raise$1);
-                };
-
-                function lower() {
-                  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
-                }
-
-                var selection_lower = function() {
-                  return this.each(lower);
-                };
-
-                var selection_append = function(name) {
-                  var create = typeof name === "function" ? name : creator(name);
-                  return this.select(function() {
-                    return this.appendChild(create.apply(this, arguments));
-                  });
-                };
-
-                function constantNull() {
-                  return null;
-                }
-
-                var selection_insert = function(name, before) {
-                  var create = typeof name === "function" ? name : creator(name),
-                      select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
-                  return this.select(function() {
-                    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
-                  });
-                };
-
-                function remove() {
-                  var parent = this.parentNode;
-                  if (parent) parent.removeChild(this);
-                }
-
-                var selection_remove = function() {
-                  return this.each(remove);
-                };
-
-                var selection_datum = function(value) {
-                  return arguments.length
-                      ? this.property("__data__", value)
-                      : this.node().__data__;
-                };
-
-                function dispatchEvent(node, type, params) {
-                  var window$$1 = window(node),
-                      event = window$$1.CustomEvent;
-
-                  if (event) {
-                    event = new event(type, params);
-                  } else {
-                    event = window$$1.document.createEvent("Event");
-                    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
-                    else event.initEvent(type, false, false);
-                  }
-
-                  node.dispatchEvent(event);
-                }
-
-                function dispatchConstant(type, params) {
-                  return function() {
-                    return dispatchEvent(this, type, params);
-                  };
-                }
-
-                function dispatchFunction(type, params) {
-                  return function() {
-                    return dispatchEvent(this, type, params.apply(this, arguments));
-                  };
-                }
-
-                var selection_dispatch = function(type, params) {
-                  return this.each((typeof params === "function"
-                      ? dispatchFunction
-                      : dispatchConstant)(type, params));
-                };
-
-                var root = [null];
-
-                function Selection(groups, parents) {
-                  this._groups = groups;
-                  this._parents = parents;
-                }
-
-                function selection() {
-                  return new Selection([[document.documentElement]], root);
-                }
-
-                Selection.prototype = selection.prototype = {
-                  constructor: Selection,
-                  select: selection_select,
-                  selectAll: selection_selectAll,
-                  filter: selection_filter,
-                  data: selection_data,
-                  enter: selection_enter,
-                  exit: selection_exit,
-                  merge: selection_merge,
-                  order: selection_order,
-                  sort: selection_sort,
-                  call: selection_call,
-                  nodes: selection_nodes,
-                  node: selection_node,
-                  size: selection_size,
-                  empty: selection_empty,
-                  each: selection_each,
-                  attr: selection_attr,
-                  style: selection_style,
-                  property: selection_property,
-                  classed: selection_classed,
-                  text: selection_text,
-                  html: selection_html,
-                  raise: selection_raise,
-                  lower: selection_lower,
-                  append: selection_append,
-                  insert: selection_insert,
-                  remove: selection_remove,
-                  datum: selection_datum,
-                  on: selection_on,
-                  dispatch: selection_dispatch
-                };
-
-                var select = function(selector) {
-                  return typeof selector === "string"
-                      ? new Selection([[document.querySelector(selector)]], [document.documentElement])
-                      : new Selection([[selector]], root);
-                };
-
-                var selectAll = function(selector) {
-                  return typeof selector === "string"
-                      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
-                      : new Selection([selector == null ? [] : selector], root);
-                };
-
-                var touch = function(node, touches, identifier) {
-                  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
-
-                  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
-                    if ((touch = touches[i]).identifier === identifier) {
-                      return point$5(node, touch);
-                    }
-                  }
-
-                  return null;
-                };
-
-                var touches = function(node, touches) {
-                  if (touches == null) touches = sourceEvent().touches;
-
-                  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
-                    points[i] = point$5(node, touches[i]);
-                  }
-
-                  return points;
-                };
-
-                var emptyOn = dispatch("start", "end", "interrupt");
-                var emptyTween = [];
-
-                var CREATED = 0;
-                var SCHEDULED = 1;
-                var STARTING = 2;
-                var STARTED = 3;
-                var RUNNING = 4;
-                var ENDING = 5;
-                var ENDED = 6;
-
-                var schedule = function(node, name, id, index, group, timing) {
-                  var schedules = node.__transition;
-                  if (!schedules) node.__transition = {};
-                  else if (id in schedules) return;
-                  create(node, id, {
-                    name: name,
-                    index: index, // For context during callback.
-                    group: group, // For context during callback.
-                    on: emptyOn,
-                    tween: emptyTween,
-                    time: timing.time,
-                    delay: timing.delay,
-                    duration: timing.duration,
-                    ease: timing.ease,
-                    timer: null,
-                    state: CREATED
-                  });
-                };
-
-                function init(node, id) {
-                  var schedule = node.__transition;
-                  if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
-                  return schedule;
-                }
-
-                function set$3(node, id) {
-                  var schedule = node.__transition;
-                  if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
-                  return schedule;
-                }
-
-                function get$1(node, id) {
-                  var schedule = node.__transition;
-                  if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
-                  return schedule;
-                }
-
-                function create(node, id, self) {
-                  var schedules = node.__transition,
-                      tween;
-
-                  // Initialize the self timer when the transition is created.
-                  // Note the actual delay is not known until the first callback!
-                  schedules[id] = self;
-                  self.timer = timer(schedule, 0, self.time);
-
-                  function schedule(elapsed) {
-                    self.state = SCHEDULED;
-                    self.timer.restart(start, self.delay, self.time);
-
-                    // If the elapsed delay is less than our first sleep, start immediately.
-                    if (self.delay <= elapsed) start(elapsed - self.delay);
-                  }
-
-                  function start(elapsed) {
-                    var i, j, n, o;
-
-                    // If the state is not SCHEDULED, then we previously errored on start.
-                    if (self.state !== SCHEDULED) return stop();
-
-                    for (i in schedules) {
-                      o = schedules[i];
-                      if (o.name !== self.name) continue;
-
-                      // While this element already has a starting transition during this frame,
-                      // defer starting an interrupting transition until that transition has a
-                      // chance to tick (and possibly end); see d3/d3-transition#54!
-                      if (o.state === STARTED) return timeout$1(start);
-
-                      // Interrupt the active transition, if any.
-                      // Dispatch the interrupt event.
-                      if (o.state === RUNNING) {
-                        o.state = ENDED;
-                        o.timer.stop();
-                        o.on.call("interrupt", node, node.__data__, o.index, o.group);
-                        delete schedules[i];
-                      }
-
-                      // Cancel any pre-empted transitions. No interrupt event is dispatched
-                      // because the cancelled transitions never started. Note that this also
-                      // removes this transition from the pending list!
-                      else if (+i < id) {
-                        o.state = ENDED;
-                        o.timer.stop();
-                        delete schedules[i];
-                      }
-                    }
-
-                    // Defer the first tick to end of the current frame; see d3/d3#1576.
-                    // Note the transition may be canceled after start and before the first tick!
-                    // Note this must be scheduled before the start event; see d3/d3-transition#16!
-                    // Assuming this is successful, subsequent callbacks go straight to tick.
-                    timeout$1(function() {
-                      if (self.state === STARTED) {
-                        self.state = RUNNING;
-                        self.timer.restart(tick, self.delay, self.time);
-                        tick(elapsed);
-                      }
-                    });
-
-                    // Dispatch the start event.
-                    // Note this must be done before the tween are initialized.
-                    self.state = STARTING;
-                    self.on.call("start", node, node.__data__, self.index, self.group);
-                    if (self.state !== STARTING) return; // interrupted
-                    self.state = STARTED;
-
-                    // Initialize the tween, deleting null tween.
-                    tween = new Array(n = self.tween.length);
-                    for (i = 0, j = -1; i < n; ++i) {
-                      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
-                        tween[++j] = o;
-                      }
-                    }
-                    tween.length = j + 1;
-                  }
-
-                  function tick(elapsed) {
-                    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
-                        i = -1,
-                        n = tween.length;
-
-                    while (++i < n) {
-                      tween[i].call(null, t);
-                    }
-
-                    // Dispatch the end event.
-                    if (self.state === ENDING) {
-                      self.on.call("end", node, node.__data__, self.index, self.group);
-                      stop();
-                    }
-                  }
-
-                  function stop() {
-                    self.state = ENDED;
-                    self.timer.stop();
-                    delete schedules[id];
-                    for (var i in schedules) return; // eslint-disable-line no-unused-vars
-                    delete node.__transition;
-                  }
-                }
-
-                var interrupt = function(node, name) {
-                  var schedules = node.__transition,
-                      schedule,
-                      active,
-                      empty = true,
-                      i;
-
-                  if (!schedules) return;
-
-                  name = name == null ? null : name + "";
-
-                  for (i in schedules) {
-                    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
-                    active = schedule.state > STARTING && schedule.state < ENDING;
-                    schedule.state = ENDED;
-                    schedule.timer.stop();
-                    if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
-                    delete schedules[i];
-                  }
-
-                  if (empty) delete node.__transition;
-                };
-
-                var selection_interrupt = function(name) {
-                  return this.each(function() {
-                    interrupt(this, name);
-                  });
-                };
-
-                function tweenRemove(id, name) {
-                  var tween0, tween1;
-                  return function() {
-                    var schedule = set$3(this, id),
-                        tween = schedule.tween;
-
-                    // If this node shared tween with the previous node,
-                    // just assign the updated shared tween and we’re done!
-                    // Otherwise, copy-on-write.
-                    if (tween !== tween0) {
-                      tween1 = tween0 = tween;
-                      for (var i = 0, n = tween1.length; i < n; ++i) {
-                        if (tween1[i].name === name) {
-                          tween1 = tween1.slice();
-                          tween1.splice(i, 1);
-                          break;
-                        }
-                      }
-                    }
-
-                    schedule.tween = tween1;
-                  };
-                }
-
-                function tweenFunction(id, name, value) {
-                  var tween0, tween1;
-                  if (typeof value !== "function") throw new Error;
-                  return function() {
-                    var schedule = set$3(this, id),
-                        tween = schedule.tween;
-
-                    // If this node shared tween with the previous node,
-                    // just assign the updated shared tween and we’re done!
-                    // Otherwise, copy-on-write.
-                    if (tween !== tween0) {
-                      tween1 = (tween0 = tween).slice();
-                      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
-                        if (tween1[i].name === name) {
-                          tween1[i] = t;
-                          break;
-                        }
-                      }
-                      if (i === n) tween1.push(t);
-                    }
-
-                    schedule.tween = tween1;
-                  };
-                }
-
-                var transition_tween = function(name, value) {
-                  var id = this._id;
-
-                  name += "";
-
-                  if (arguments.length < 2) {
-                    var tween = get$1(this.node(), id).tween;
-                    for (var i = 0, n = tween.length, t; i < n; ++i) {
-                      if ((t = tween[i]).name === name) {
-                        return t.value;
-                      }
-                    }
-                    return null;
-                  }
-
-                  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
-                };
-
-                function tweenValue(transition, name, value) {
-                  var id = transition._id;
-
-                  transition.each(function() {
-                    var schedule = set$3(this, id);
-                    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
-                  });
-
-                  return function(node) {
-                    return get$1(node, id).value[name];
-                  };
-                }
-
-                var interpolate$1 = function(a, b) {
-                  var c;
-                  return (typeof b === "number" ? interpolateNumber
-                      : b instanceof color ? interpolateRgb
-                      : (c = color(b)) ? (b = c, interpolateRgb)
-                      : interpolateString)(a, b);
-                };
-
-                function attrRemove$1(name) {
-                  return function() {
-                    this.removeAttribute(name);
-                  };
-                }
-
-                function attrRemoveNS$1(fullname) {
-                  return function() {
-                    this.removeAttributeNS(fullname.space, fullname.local);
-                  };
-                }
-
-                function attrConstant$1(name, interpolate$$1, value1) {
-                  var value00,
-                      interpolate0;
-                  return function() {
-                    var value0 = this.getAttribute(name);
-                    return value0 === value1 ? null
-                        : value0 === value00 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value1);
-                  };
-                }
-
-                function attrConstantNS$1(fullname, interpolate$$1, value1) {
-                  var value00,
-                      interpolate0;
-                  return function() {
-                    var value0 = this.getAttributeNS(fullname.space, fullname.local);
-                    return value0 === value1 ? null
-                        : value0 === value00 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value1);
-                  };
-                }
-
-                function attrFunction$1(name, interpolate$$1, value) {
-                  var value00,
-                      value10,
-                      interpolate0;
-                  return function() {
-                    var value0, value1 = value(this);
-                    if (value1 == null) return void this.removeAttribute(name);
-                    value0 = this.getAttribute(name);
-                    return value0 === value1 ? null
-                        : value0 === value00 && value1 === value10 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-                  };
-                }
-
-                function attrFunctionNS$1(fullname, interpolate$$1, value) {
-                  var value00,
-                      value10,
-                      interpolate0;
-                  return function() {
-                    var value0, value1 = value(this);
-                    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
-                    value0 = this.getAttributeNS(fullname.space, fullname.local);
-                    return value0 === value1 ? null
-                        : value0 === value00 && value1 === value10 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-                  };
-                }
-
-                var transition_attr = function(name, value) {
-                  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1;
-                  return this.attrTween(name, typeof value === "function"
-                      ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
-                      : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
-                      : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
-                };
-
-                function attrTweenNS(fullname, value) {
-                  function tween() {
-                    var node = this, i = value.apply(node, arguments);
-                    return i && function(t) {
-                      node.setAttributeNS(fullname.space, fullname.local, i(t));
-                    };
-                  }
-                  tween._value = value;
-                  return tween;
-                }
-
-                function attrTween(name, value) {
-                  function tween() {
-                    var node = this, i = value.apply(node, arguments);
-                    return i && function(t) {
-                      node.setAttribute(name, i(t));
-                    };
-                  }
-                  tween._value = value;
-                  return tween;
-                }
-
-                var transition_attrTween = function(name, value) {
-                  var key = "attr." + name;
-                  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-                  if (value == null) return this.tween(key, null);
-                  if (typeof value !== "function") throw new Error;
-                  var fullname = namespace(name);
-                  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
-                };
-
-                function delayFunction(id, value) {
-                  return function() {
-                    init(this, id).delay = +value.apply(this, arguments);
-                  };
-                }
-
-                function delayConstant(id, value) {
-                  return value = +value, function() {
-                    init(this, id).delay = value;
-                  };
-                }
-
-                var transition_delay = function(value) {
-                  var id = this._id;
-
-                  return arguments.length
-                      ? this.each((typeof value === "function"
-                          ? delayFunction
-                          : delayConstant)(id, value))
-                      : get$1(this.node(), id).delay;
-                };
-
-                function durationFunction(id, value) {
-                  return function() {
-                    set$3(this, id).duration = +value.apply(this, arguments);
-                  };
-                }
-
-                function durationConstant(id, value) {
-                  return value = +value, function() {
-                    set$3(this, id).duration = value;
-                  };
-                }
-
-                var transition_duration = function(value) {
-                  var id = this._id;
-
-                  return arguments.length
-                      ? this.each((typeof value === "function"
-                          ? durationFunction
-                          : durationConstant)(id, value))
-                      : get$1(this.node(), id).duration;
-                };
-
-                function easeConstant(id, value) {
-                  if (typeof value !== "function") throw new Error;
-                  return function() {
-                    set$3(this, id).ease = value;
-                  };
-                }
-
-                var transition_ease = function(value) {
-                  var id = this._id;
-
-                  return arguments.length
-                      ? this.each(easeConstant(id, value))
-                      : get$1(this.node(), id).ease;
-                };
-
-                var transition_filter = function(match) {
-                  if (typeof match !== "function") match = matcher$1(match);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-                      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-                        subgroup.push(node);
-                      }
-                    }
-                  }
-
-                  return new Transition(subgroups, this._parents, this._name, this._id);
-                };
-
-                var transition_merge = function(transition) {
-                  if (transition._id !== this._id) throw new Error;
-
-                  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-                    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-                      if (node = group0[i] || group1[i]) {
-                        merge[i] = node;
-                      }
-                    }
-                  }
-
-                  for (; j < m0; ++j) {
-                    merges[j] = groups0[j];
-                  }
-
-                  return new Transition(merges, this._parents, this._name, this._id);
-                };
-
-                function start$1(name) {
-                  return (name + "").trim().split(/^|\s+/).every(function(t) {
-                    var i = t.indexOf(".");
-                    if (i >= 0) t = t.slice(0, i);
-                    return !t || t === "start";
-                  });
-                }
-
-                function onFunction(id, name, listener) {
-                  var on0, on1, sit = start$1(name) ? init : set$3;
-                  return function() {
-                    var schedule = sit(this, id),
-                        on = schedule.on;
-
-                    // If this node shared a dispatch with the previous node,
-                    // just assign the updated shared dispatch and we’re done!
-                    // Otherwise, copy-on-write.
-                    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
-
-                    schedule.on = on1;
-                  };
-                }
-
-                var transition_on = function(name, listener) {
-                  var id = this._id;
-
-                  return arguments.length < 2
-                      ? get$1(this.node(), id).on.on(name)
-                      : this.each(onFunction(id, name, listener));
-                };
-
-                function removeFunction(id) {
-                  return function() {
-                    var parent = this.parentNode;
-                    for (var i in this.__transition) if (+i !== id) return;
-                    if (parent) parent.removeChild(this);
-                  };
-                }
-
-                var transition_remove = function() {
-                  return this.on("end.remove", removeFunction(this._id));
-                };
-
-                var transition_select = function(select$$1) {
-                  var name = this._name,
-                      id = this._id;
-
-                  if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-                      if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
-                        if ("__data__" in node) subnode.__data__ = node.__data__;
-                        subgroup[i] = subnode;
-                        schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
-                      }
-                    }
-                  }
-
-                  return new Transition(subgroups, this._parents, name, id);
-                };
-
-                var transition_selectAll = function(select$$1) {
-                  var name = this._name,
-                      id = this._id;
-
-                  if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
-
-                  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-                      if (node = group[i]) {
-                        for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
-                          if (child = children[k]) {
-                            schedule(child, name, id, k, children, inherit);
-                          }
-                        }
-                        subgroups.push(children);
-                        parents.push(node);
-                      }
-                    }
-                  }
-
-                  return new Transition(subgroups, parents, name, id);
-                };
-
-                var Selection$1 = selection.prototype.constructor;
-
-                var transition_selection = function() {
-                  return new Selection$1(this._groups, this._parents);
-                };
-
-                function styleRemove$1(name, interpolate$$1) {
-                  var value00,
-                      value10,
-                      interpolate0;
-                  return function() {
-                    var style = window(this).getComputedStyle(this, null),
-                        value0 = style.getPropertyValue(name),
-                        value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
-                    return value0 === value1 ? null
-                        : value0 === value00 && value1 === value10 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-                  };
-                }
-
-                function styleRemoveEnd(name) {
-                  return function() {
-                    this.style.removeProperty(name);
-                  };
-                }
-
-                function styleConstant$1(name, interpolate$$1, value1) {
-                  var value00,
-                      interpolate0;
-                  return function() {
-                    var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);
-                    return value0 === value1 ? null
-                        : value0 === value00 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value1);
-                  };
-                }
-
-                function styleFunction$1(name, interpolate$$1, value) {
-                  var value00,
-                      value10,
-                      interpolate0;
-                  return function() {
-                    var style = window(this).getComputedStyle(this, null),
-                        value0 = style.getPropertyValue(name),
-                        value1 = value(this);
-                    if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
-                    return value0 === value1 ? null
-                        : value0 === value00 && value1 === value10 ? interpolate0
-                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
-                  };
-                }
-
-                var transition_style = function(name, value, priority) {
-                  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1;
-                  return value == null ? this
-                          .styleTween(name, styleRemove$1(name, i))
-                          .on("end.style." + name, styleRemoveEnd(name))
-                      : this.styleTween(name, typeof value === "function"
-                          ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
-                          : styleConstant$1(name, i, value), priority);
-                };
-
-                function styleTween(name, value, priority) {
-                  function tween() {
-                    var node = this, i = value.apply(node, arguments);
-                    return i && function(t) {
-                      node.style.setProperty(name, i(t), priority);
-                    };
-                  }
-                  tween._value = value;
-                  return tween;
-                }
-
-                var transition_styleTween = function(name, value, priority) {
-                  var key = "style." + (name += "");
-                  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-                  if (value == null) return this.tween(key, null);
-                  if (typeof value !== "function") throw new Error;
-                  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
-                };
-
-                function textConstant$1(value) {
-                  return function() {
-                    this.textContent = value;
-                  };
-                }
-
-                function textFunction$1(value) {
-                  return function() {
-                    var value1 = value(this);
-                    this.textContent = value1 == null ? "" : value1;
-                  };
-                }
-
-                var transition_text = function(value) {
-                  return this.tween("text", typeof value === "function"
-                      ? textFunction$1(tweenValue(this, "text", value))
-                      : textConstant$1(value == null ? "" : value + ""));
-                };
-
-                var transition_transition = function() {
-                  var name = this._name,
-                      id0 = this._id,
-                      id1 = newId();
-
-                  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-                      if (node = group[i]) {
-                        var inherit = get$1(node, id0);
-                        schedule(node, name, id1, i, group, {
-                          time: inherit.time + inherit.delay + inherit.duration,
-                          delay: 0,
-                          duration: inherit.duration,
-                          ease: inherit.ease
-                        });
-                      }
-                    }
-                  }
-
-                  return new Transition(groups, this._parents, name, id1);
-                };
-
-                var id = 0;
-
-                function Transition(groups, parents, name, id) {
-                  this._groups = groups;
-                  this._parents = parents;
-                  this._name = name;
-                  this._id = id;
-                }
-
-                function transition(name) {
-                  return selection().transition(name);
-                }
-
-                function newId() {
-                  return ++id;
-                }
-
-                var selection_prototype = selection.prototype;
-
-                Transition.prototype = transition.prototype = {
-                  constructor: Transition,
-                  select: transition_select,
-                  selectAll: transition_selectAll,
-                  filter: transition_filter,
-                  merge: transition_merge,
-                  selection: transition_selection,
-                  transition: transition_transition,
-                  call: selection_prototype.call,
-                  nodes: selection_prototype.nodes,
-                  node: selection_prototype.node,
-                  size: selection_prototype.size,
-                  empty: selection_prototype.empty,
-                  each: selection_prototype.each,
-                  on: transition_on,
-                  attr: transition_attr,
-                  attrTween: transition_attrTween,
-                  style: transition_style,
-                  styleTween: transition_styleTween,
-                  text: transition_text,
-                  remove: transition_remove,
-                  tween: transition_tween,
-                  delay: transition_delay,
-                  duration: transition_duration,
-                  ease: transition_ease
-                };
-
-                var defaultTiming = {
-                  time: null, // Set on use.
-                  delay: 0,
-                  duration: 250,
-                  ease: cubicInOut
-                };
-
-                function inherit(node, id) {
-                  var timing;
-                  while (!(timing = node.__transition) || !(timing = timing[id])) {
-                    if (!(node = node.parentNode)) {
-                      return defaultTiming.time = now(), defaultTiming;
-                    }
-                  }
-                  return timing;
-                }
-
-                var selection_transition = function(name) {
-                  var id,
-                      timing;
-
-                  if (name instanceof Transition) {
-                    id = name._id, name = name._name;
-                  } else {
-                    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
-                  }
-
-                  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-                      if (node = group[i]) {
-                        schedule(node, name, id, i, group, timing || inherit(node, id));
-                      }
-                    }
-                  }
-
-                  return new Transition(groups, this._parents, name, id);
-                };
-
-                selection.prototype.interrupt = selection_interrupt;
-                selection.prototype.transition = selection_transition;
-
-                var root$1 = [null];
-
-                var active = function(node, name) {
-                  var schedules = node.__transition,
-                      schedule,
-                      i;
-
-                  if (schedules) {
-                    name = name == null ? null : name + "";
-                    for (i in schedules) {
-                      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
-                        return new Transition([[node]], root$1, name, +i);
-                      }
-                    }
-                  }
-
-                  return null;
-                };
-
-                var slice$4 = Array.prototype.slice;
-
-                var identity$5 = function(x) {
-                  return x;
-                };
-
-                var top = 1;
-                var right = 2;
-                var bottom = 3;
-                var left = 4;
-                var epsilon$2 = 1e-6;
-
-                function translateX(scale0, scale1, d) {
-                  var x = scale0(d);
-                  return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
-                }
-
-                function translateY(scale0, scale1, d) {
-                  var y = scale0(d);
-                  return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
-                }
-
-                function center(scale) {
-                  var offset = scale.bandwidth() / 2;
-                  if (scale.round()) offset = Math.round(offset);
-                  return function(d) {
-                    return scale(d) + offset;
-                  };
-                }
-
-                function entering() {
-                  return !this.__axis;
-                }
-
-                function axis(orient, scale) {
-                  var tickArguments = [],
-                      tickValues = null,
-                      tickFormat = null,
-                      tickSizeInner = 6,
-                      tickSizeOuter = 6,
-                      tickPadding = 3;
-
-                  function axis(context) {
-                    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
-                        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,
-                        spacing = Math.max(tickSizeInner, 0) + tickPadding,
-                        transform = orient === top || orient === bottom ? translateX : translateY,
-                        range = scale.range(),
-                        range0 = range[0] + 0.5,
-                        range1 = range[range.length - 1] + 0.5,
-                        position = (scale.bandwidth ? center : identity$5)(scale.copy()),
-                        selection = context.selection ? context.selection() : context,
-                        path = selection.selectAll(".domain").data([null]),
-                        tick = selection.selectAll(".tick").data(values, scale).order(),
-                        tickExit = tick.exit(),
-                        tickEnter = tick.enter().append("g").attr("class", "tick"),
-                        line = tick.select("line"),
-                        text = tick.select("text"),
-                        k = orient === top || orient === left ? -1 : 1,
-                        x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
-
-                    path = path.merge(path.enter().insert("path", ".tick")
-                        .attr("class", "domain")
-                        .attr("stroke", "#000"));
-
-                    tick = tick.merge(tickEnter);
-
-                    line = line.merge(tickEnter.append("line")
-                        .attr("stroke", "#000")
-                        .attr(x + "2", k * tickSizeInner)
-                        .attr(y + "1", 0.5)
-                        .attr(y + "2", 0.5));
-
-                    text = text.merge(tickEnter.append("text")
-                        .attr("fill", "#000")
-                        .attr(x, k * spacing)
-                        .attr(y, 0.5)
-                        .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
-
-                    if (context !== selection) {
-                      path = path.transition(context);
-                      tick = tick.transition(context);
-                      line = line.transition(context);
-                      text = text.transition(context);
-
-                      tickExit = tickExit.transition(context)
-                          .attr("opacity", epsilon$2)
-                          .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
-
-                      tickEnter
-                          .attr("opacity", epsilon$2)
-                          .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
-                    }
-
-                    tickExit.remove();
-
-                    path
-                        .attr("d", orient === left || orient == right
-                            ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
-                            : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
-
-                    tick
-                        .attr("opacity", 1)
-                        .attr("transform", function(d) { return transform(position, position, d); });
-
-                    line
-                        .attr(x + "2", k * tickSizeInner);
-
-                    text
-                        .attr(x, k * spacing)
-                        .text(format);
-
-                    selection.filter(entering)
-                        .attr("fill", "none")
-                        .attr("font-size", 10)
-                        .attr("font-family", "sans-serif")
-                        .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
-
-                    selection
-                        .each(function() { this.__axis = position; });
-                  }
-
-                  axis.scale = function(_) {
-                    return arguments.length ? (scale = _, axis) : scale;
-                  };
-
-                  axis.ticks = function() {
-                    return tickArguments = slice$4.call(arguments), axis;
-                  };
-
-                  axis.tickArguments = function(_) {
-                    return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();
-                  };
-
-                  axis.tickValues = function(_) {
-                    return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();
-                  };
-
-                  axis.tickFormat = function(_) {
-                    return arguments.length ? (tickFormat = _, axis) : tickFormat;
-                  };
-
-                  axis.tickSize = function(_) {
-                    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
-                  };
-
-                  axis.tickSizeInner = function(_) {
-                    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
-                  };
-
-                  axis.tickSizeOuter = function(_) {
-                    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
-                  };
-
-                  axis.tickPadding = function(_) {
-                    return arguments.length ? (tickPadding = +_, axis) : tickPadding;
-                  };
-
-                  return axis;
-                }
-
-                function axisTop(scale) {
-                  return axis(top, scale);
-                }
-
-                function axisRight(scale) {
-                  return axis(right, scale);
-                }
-
-                function axisBottom(scale) {
-                  return axis(bottom, scale);
-                }
-
-                function axisLeft(scale) {
-                  return axis(left, scale);
-                }
-
-                function defaultSeparation(a, b) {
-                  return a.parent === b.parent ? 1 : 2;
-                }
-
-                function meanX(children) {
-                  return children.reduce(meanXReduce, 0) / children.length;
-                }
-
-                function meanXReduce(x, c) {
-                  return x + c.x;
-                }
-
-                function maxY(children) {
-                  return 1 + children.reduce(maxYReduce, 0);
-                }
-
-                function maxYReduce(y, c) {
-                  return Math.max(y, c.y);
-                }
-
-                function leafLeft(node) {
-                  var children;
-                  while (children = node.children) node = children[0];
-                  return node;
-                }
-
-                function leafRight(node) {
-                  var children;
-                  while (children = node.children) node = children[children.length - 1];
-                  return node;
-                }
-
-                var cluster = function() {
-                  var separation = defaultSeparation,
-                      dx = 1,
-                      dy = 1,
-                      nodeSize = false;
-
-                  function cluster(root) {
-                    var previousNode,
-                        x = 0;
-
-                    // First walk, computing the initial x & y values.
-                    root.eachAfter(function(node) {
-                      var children = node.children;
-                      if (children) {
-                        node.x = meanX(children);
-                        node.y = maxY(children);
-                      } else {
-                        node.x = previousNode ? x += separation(node, previousNode) : 0;
-                        node.y = 0;
-                        previousNode = node;
-                      }
-                    });
-
-                    var left = leafLeft(root),
-                        right = leafRight(root),
-                        x0 = left.x - separation(left, right) / 2,
-                        x1 = right.x + separation(right, left) / 2;
-
-                    // Second walk, normalizing x & y to the desired size.
-                    return root.eachAfter(nodeSize ? function(node) {
-                      node.x = (node.x - root.x) * dx;
-                      node.y = (root.y - node.y) * dy;
-                    } : function(node) {
-                      node.x = (node.x - x0) / (x1 - x0) * dx;
-                      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
-                    });
-                  }
-
-                  cluster.separation = function(x) {
-                    return arguments.length ? (separation = x, cluster) : separation;
-                  };
-
-                  cluster.size = function(x) {
-                    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
-                  };
-
-                  cluster.nodeSize = function(x) {
-                    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
-                  };
-
-                  return cluster;
-                };
-
-                var node_each = function(callback) {
-                  var node = this, current, next = [node], children, i, n;
-                  do {
-                    current = next.reverse(), next = [];
-                    while (node = current.pop()) {
-                      callback(node), children = node.children;
-                      if (children) for (i = 0, n = children.length; i < n; ++i) {
-                        next.push(children[i]);
-                      }
-                    }
-                  } while (next.length);
-                  return this;
-                };
-
-                var node_eachBefore = function(callback) {
-                  var node = this, nodes = [node], children, i;
-                  while (node = nodes.pop()) {
-                    callback(node), children = node.children;
-                    if (children) for (i = children.length - 1; i >= 0; --i) {
-                      nodes.push(children[i]);
-                    }
-                  }
-                  return this;
-                };
-
-                var node_eachAfter = function(callback) {
-                  var node = this, nodes = [node], next = [], children, i, n;
-                  while (node = nodes.pop()) {
-                    next.push(node), children = node.children;
-                    if (children) for (i = 0, n = children.length; i < n; ++i) {
-                      nodes.push(children[i]);
-                    }
-                  }
-                  while (node = next.pop()) {
-                    callback(node);
-                  }
-                  return this;
-                };
-
-                var node_sum = function(value) {
-                  return this.eachAfter(function(node) {
-                    var sum = +value(node.data) || 0,
-                        children = node.children,
-                        i = children && children.length;
-                    while (--i >= 0) sum += children[i].value;
-                    node.value = sum;
-                  });
-                };
-
-                var node_sort = function(compare) {
-                  return this.eachBefore(function(node) {
-                    if (node.children) {
-                      node.children.sort(compare);
-                    }
-                  });
-                };
-
-                var node_path = function(end) {
-                  var start = this,
-                      ancestor = leastCommonAncestor(start, end),
-                      nodes = [start];
-                  while (start !== ancestor) {
-                    start = start.parent;
-                    nodes.push(start);
-                  }
-                  var k = nodes.length;
-                  while (end !== ancestor) {
-                    nodes.splice(k, 0, end);
-                    end = end.parent;
-                  }
-                  return nodes;
-                };
-
-                function leastCommonAncestor(a, b) {
-                  if (a === b) return a;
-                  var aNodes = a.ancestors(),
-                      bNodes = b.ancestors(),
-                      c = null;
-                  a = aNodes.pop();
-                  b = bNodes.pop();
-                  while (a === b) {
-                    c = a;
-                    a = aNodes.pop();
-                    b = bNodes.pop();
-                  }
-                  return c;
-                }
-
-                var node_ancestors = function() {
-                  var node = this, nodes = [node];
-                  while (node = node.parent) {
-                    nodes.push(node);
-                  }
-                  return nodes;
-                };
-
-                var node_descendants = function() {
-                  var nodes = [];
-                  this.each(function(node) {
-                    nodes.push(node);
-                  });
-                  return nodes;
-                };
-
-                var node_leaves = function() {
-                  var leaves = [];
-                  this.eachBefore(function(node) {
-                    if (!node.children) {
-                      leaves.push(node);
-                    }
-                  });
-                  return leaves;
-                };
-
-                var node_links = function() {
-                  var root = this, links = [];
-                  root.each(function(node) {
-                    if (node !== root) { // Don’t include the root’s parent, if any.
-                      links.push({source: node.parent, target: node});
-                    }
-                  });
-                  return links;
-                };
-
-                function hierarchy(data, children) {
-                  var root = new Node(data),
-                      valued = +data.value && (root.value = data.value),
-                      node,
-                      nodes = [root],
-                      child,
-                      childs,
-                      i,
-                      n;
-
-                  if (children == null) children = defaultChildren;
-
-                  while (node = nodes.pop()) {
-                    if (valued) node.value = +node.data.value;
-                    if ((childs = children(node.data)) && (n = childs.length)) {
-                      node.children = new Array(n);
-                      for (i = n - 1; i >= 0; --i) {
-                        nodes.push(child = node.children[i] = new Node(childs[i]));
-                        child.parent = node;
-                        child.depth = node.depth + 1;
-                      }
-                    }
-                  }
-
-                  return root.eachBefore(computeHeight);
-                }
-
-                function node_copy() {
-                  return hierarchy(this).eachBefore(copyData);
-                }
-
-                function defaultChildren(d) {
-                  return d.children;
-                }
-
-                function copyData(node) {
-                  node.data = node.data.data;
-                }
-
-                function computeHeight(node) {
-                  var height = 0;
-                  do node.height = height;
-                  while ((node = node.parent) && (node.height < ++height));
-                }
-
-                function Node(data) {
-                  this.data = data;
-                  this.depth =
-                  this.height = 0;
-                  this.parent = null;
-                }
-
-                Node.prototype = hierarchy.prototype = {
-                  constructor: Node,
-                  each: node_each,
-                  eachAfter: node_eachAfter,
-                  eachBefore: node_eachBefore,
-                  sum: node_sum,
-                  sort: node_sort,
-                  path: node_path,
-                  ancestors: node_ancestors,
-                  descendants: node_descendants,
-                  leaves: node_leaves,
-                  links: node_links,
-                  copy: node_copy
-                };
-
-                function Node$2(value) {
-                  this._ = value;
-                  this.next = null;
-                }
-
-                var shuffle$1 = function(array) {
-                  var i,
-                      n = (array = array.slice()).length,
-                      head = null,
-                      node = head;
-
-                  while (n) {
-                    var next = new Node$2(array[n - 1]);
-                    if (node) node = node.next = next;
-                    else node = head = next;
-                    array[i] = array[--n];
-                  }
-
-                  return {
-                    head: head,
-                    tail: node
-                  };
-                };
-
-                var enclose = function(circles) {
-                  return encloseN(shuffle$1(circles), []);
-                };
-
-                function encloses(a, b) {
-                  var dx = b.x - a.x,
-                      dy = b.y - a.y,
-                      dr = a.r - b.r;
-                  return dr * dr + 1e-6 > dx * dx + dy * dy;
-                }
-
-                // Returns the smallest circle that contains circles L and intersects circles B.
-                function encloseN(L, B) {
-                  var circle,
-                      l0 = null,
-                      l1 = L.head,
-                      l2,
-                      p1;
-
-                  switch (B.length) {
-                    case 1: circle = enclose1(B[0]); break;
-                    case 2: circle = enclose2(B[0], B[1]); break;
-                    case 3: circle = enclose3(B[0], B[1], B[2]); break;
-                  }
-
-                  while (l1) {
-                    p1 = l1._, l2 = l1.next;
-                    if (!circle || !encloses(circle, p1)) {
-
-                      // Temporarily truncate L before l1.
-                      if (l0) L.tail = l0, l0.next = null;
-                      else L.head = L.tail = null;
-
-                      B.push(p1);
-                      circle = encloseN(L, B); // Note: reorders L!
-                      B.pop();
-
-                      // Move l1 to the front of L and reconnect the truncated list L.
-                      if (L.head) l1.next = L.head, L.head = l1;
-                      else l1.next = null, L.head = L.tail = l1;
-                      l0 = L.tail, l0.next = l2;
-
-                    } else {
-                      l0 = l1;
-                    }
-                    l1 = l2;
-                  }
-
-                  L.tail = l0;
-                  return circle;
-                }
-
-                function enclose1(a) {
-                  return {
-                    x: a.x,
-                    y: a.y,
-                    r: a.r
-                  };
-                }
-
-                function enclose2(a, b) {
-                  var x1 = a.x, y1 = a.y, r1 = a.r,
-                      x2 = b.x, y2 = b.y, r2 = b.r,
-                      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
-                      l = Math.sqrt(x21 * x21 + y21 * y21);
-                  return {
-                    x: (x1 + x2 + x21 / l * r21) / 2,
-                    y: (y1 + y2 + y21 / l * r21) / 2,
-                    r: (l + r1 + r2) / 2
-                  };
-                }
-
-                function enclose3(a, b, c) {
-                  var x1 = a.x, y1 = a.y, r1 = a.r,
-                      x2 = b.x, y2 = b.y, r2 = b.r,
-                      x3 = c.x, y3 = c.y, r3 = c.r,
-                      a2 = 2 * (x1 - x2),
-                      b2 = 2 * (y1 - y2),
-                      c2 = 2 * (r2 - r1),
-                      d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
-                      a3 = 2 * (x1 - x3),
-                      b3 = 2 * (y1 - y3),
-                      c3 = 2 * (r3 - r1),
-                      d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
-                      ab = a3 * b2 - a2 * b3,
-                      xa = (b2 * d3 - b3 * d2) / ab - x1,
-                      xb = (b3 * c2 - b2 * c3) / ab,
-                      ya = (a3 * d2 - a2 * d3) / ab - y1,
-                      yb = (a2 * c3 - a3 * c2) / ab,
-                      A = xb * xb + yb * yb - 1,
-                      B = 2 * (xa * xb + ya * yb + r1),
-                      C = xa * xa + ya * ya - r1 * r1,
-                      r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
-                  return {
-                    x: xa + xb * r + x1,
-                    y: ya + yb * r + y1,
-                    r: r
-                  };
-                }
-
-                function place(a, b, c) {
-                  var ax = a.x,
-                      ay = a.y,
-                      da = b.r + c.r,
-                      db = a.r + c.r,
-                      dx = b.x - ax,
-                      dy = b.y - ay,
-                      dc = dx * dx + dy * dy;
-                  if (dc) {
-                    var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
-                        y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
-                    c.x = ax + x * dx + y * dy;
-                    c.y = ay + x * dy - y * dx;
-                  } else {
-                    c.x = ax + db;
-                    c.y = ay;
-                  }
-                }
-
-                function intersects(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;
-                }
-
-                function distance2(circle, x, y) {
-                  var dx = circle.x - x,
-                      dy = circle.y - y;
-                  return dx * dx + dy * dy;
-                }
-
-                function Node$1(circle) {
-                  this._ = circle;
-                  this.next = null;
-                  this.previous = null;
-                }
-
-                function packEnclose(circles) {
-                  if (!(n = circles.length)) return 0;
-
-                  var a, b, c, n;
-
-                  // Place the first circle.
-                  a = circles[0], a.x = 0, a.y = 0;
-                  if (!(n > 1)) return a.r;
-
-                  // Place the second circle.
-                  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
-                  if (!(n > 2)) return a.r + b.r;
-
-                  // Place the third circle.
-                  place(b, a, c = circles[2]);
-
-                  // Initialize the weighted centroid.
-                  var aa = a.r * a.r,
-                      ba = b.r * b.r,
-                      ca = c.r * c.r,
-                      oa = aa + ba + ca,
-                      ox = aa * a.x + ba * b.x + ca * c.x,
-                      oy = aa * a.y + ba * b.y + ca * c.y,
-                      cx, cy, i, j, k, sj, sk;
-
-                  // Initialize the front-chain using the first three circles a, b and c.
-                  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
-                  a.next = c.previous = b;
-                  b.next = a.previous = c;
-                  c.next = b.previous = a;
-
-                  // Attempt to place each remaining circle…
-                  pack: for (i = 3; i < n; ++i) {
-                    place(a._, b._, c = circles[i]), c = new Node$1(c);
-
-                    // If there are only three elements in the front-chain…
-                    if ((k = a.previous) === (j = b.next)) {
-                      // If the new circle intersects the third circle,
-                      // rotate the front chain to try the next position.
-                      if (intersects(j._, c._)) {
-                        a = b, b = j, --i;
-                        continue pack;
-                      }
-                    }
-
-                    // Find the closest intersecting circle on the front-chain, if any.
-                    else {
-                      sj = j._.r, sk = k._.r;
-                      do {
-                        if (sj <= sk) {
-                          if (intersects(j._, c._)) {
-                            b = j, a.next = b, b.previous = a, --i;
-                            continue pack;
-                          }
-                          j = j.next, sj += j._.r;
-                        } else {
-                          if (intersects(k._, c._)) {
-                            a = k, a.next = b, b.previous = a, --i;
-                            continue pack;
-                          }
-                          k = k.previous, sk += k._.r;
-                        }
-                      } while (j !== k.next);
-                    }
-
-                    // Success! Insert the new circle c between a and b.
-                    c.previous = a, c.next = b, a.next = b.previous = b = c;
-
-                    // Update the weighted centroid.
-                    oa += ca = c._.r * c._.r;
-                    ox += ca * c._.x;
-                    oy += ca * c._.y;
-
-                    // Compute the new closest circle a to centroid.
-                    aa = distance2(a._, cx = ox / oa, cy = oy / oa);
-                    while ((c = c.next) !== b) {
-                      if ((ca = distance2(c._, cx, cy)) < aa) {
-                        a = c, aa = ca;
-                      }
-                    }
-                    b = a.next;
-                  }
-
-                  // Compute the enclosing circle of the front chain.
-                  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
-
-                  // Translate the circles to put the enclosing circle around the origin.
-                  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
-
-                  return c.r;
-                }
-
-                var siblings = function(circles) {
-                  packEnclose(circles);
-                  return circles;
-                };
-
-                function optional(f) {
-                  return f == null ? null : required(f);
-                }
-
-                function required(f) {
-                  if (typeof f !== "function") throw new Error;
-                  return f;
-                }
-
-                function constantZero() {
-                  return 0;
-                }
-
-                var constant$6 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function defaultRadius(d) {
-                  return Math.sqrt(d.value);
-                }
-
-                var index = function() {
-                  var radius = null,
-                      dx = 1,
-                      dy = 1,
-                      padding = constantZero;
-
-                  function pack(root) {
-                    root.x = dx / 2, root.y = dy / 2;
-                    if (radius) {
-                      root.eachBefore(radiusLeaf(radius))
-                          .eachAfter(packChildren(padding, 0.5))
-                          .eachBefore(translateChild(1));
-                    } else {
-                      root.eachBefore(radiusLeaf(defaultRadius))
-                          .eachAfter(packChildren(constantZero, 1))
-                          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
-                          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
-                    }
-                    return root;
-                  }
-
-                  pack.radius = function(x) {
-                    return arguments.length ? (radius = optional(x), pack) : radius;
-                  };
-
-                  pack.size = function(x) {
-                    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
-                  };
-
-                  pack.padding = function(x) {
-                    return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding;
-                  };
-
-                  return pack;
-                };
-
-                function radiusLeaf(radius) {
-                  return function(node) {
-                    if (!node.children) {
-                      node.r = Math.max(0, +radius(node) || 0);
-                    }
-                  };
-                }
-
-                function packChildren(padding, k) {
-                  return function(node) {
-                    if (children = node.children) {
-                      var children,
-                          i,
-                          n = children.length,
-                          r = padding(node) * k || 0,
-                          e;
-
-                      if (r) for (i = 0; i < n; ++i) children[i].r += r;
-                      e = packEnclose(children);
-                      if (r) for (i = 0; i < n; ++i) children[i].r -= r;
-                      node.r = e + r;
-                    }
-                  };
-                }
-
-                function translateChild(k) {
-                  return function(node) {
-                    var parent = node.parent;
-                    node.r *= k;
-                    if (parent) {
-                      node.x = parent.x + k * node.x;
-                      node.y = parent.y + k * node.y;
-                    }
-                  };
-                }
-
-                var roundNode = function(node) {
-                  node.x0 = Math.round(node.x0);
-                  node.y0 = Math.round(node.y0);
-                  node.x1 = Math.round(node.x1);
-                  node.y1 = Math.round(node.y1);
-                };
-
-                var treemapDice = function(parent, x0, y0, x1, y1) {
-                  var nodes = parent.children,
-                      node,
-                      i = -1,
-                      n = nodes.length,
-                      k = parent.value && (x1 - x0) / parent.value;
-
-                  while (++i < n) {
-                    node = nodes[i], node.y0 = y0, node.y1 = y1;
-                    node.x0 = x0, node.x1 = x0 += node.value * k;
-                  }
-                };
-
-                var partition = function() {
-                  var dx = 1,
-                      dy = 1,
-                      padding = 0,
-                      round = false;
-
-                  function partition(root) {
-                    var n = root.height + 1;
-                    root.x0 =
-                    root.y0 = padding;
-                    root.x1 = dx;
-                    root.y1 = dy / n;
-                    root.eachBefore(positionNode(dy, n));
-                    if (round) root.eachBefore(roundNode);
-                    return root;
-                  }
-
-                  function positionNode(dy, n) {
-                    return function(node) {
-                      if (node.children) {
-                        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
-                      }
-                      var x0 = node.x0,
-                          y0 = node.y0,
-                          x1 = node.x1 - padding,
-                          y1 = node.y1 - padding;
-                      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-                      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-                      node.x0 = x0;
-                      node.y0 = y0;
-                      node.x1 = x1;
-                      node.y1 = y1;
-                    };
-                  }
-
-                  partition.round = function(x) {
-                    return arguments.length ? (round = !!x, partition) : round;
-                  };
-
-                  partition.size = function(x) {
-                    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
-                  };
-
-                  partition.padding = function(x) {
-                    return arguments.length ? (padding = +x, partition) : padding;
-                  };
-
-                  return partition;
-                };
-
-                var keyPrefix$1 = "$";
-                var preroot = {depth: -1};
-                var ambiguous = {};
-
-                function defaultId(d) {
-                  return d.id;
-                }
-
-                function defaultParentId(d) {
-                  return d.parentId;
-                }
-
-                var stratify = function() {
-                  var id = defaultId,
-                      parentId = defaultParentId;
-
-                  function stratify(data) {
-                    var d,
-                        i,
-                        n = data.length,
-                        root,
-                        parent,
-                        node,
-                        nodes = new Array(n),
-                        nodeId,
-                        nodeKey,
-                        nodeByKey = {};
-
-                    for (i = 0; i < n; ++i) {
-                      d = data[i], node = nodes[i] = new Node(d);
-                      if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
-                        nodeKey = keyPrefix$1 + (node.id = nodeId);
-                        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
-                      }
-                    }
-
-                    for (i = 0; i < n; ++i) {
-                      node = nodes[i], nodeId = parentId(data[i], i, data);
-                      if (nodeId == null || !(nodeId += "")) {
-                        if (root) throw new Error("multiple roots");
-                        root = node;
-                      } else {
-                        parent = nodeByKey[keyPrefix$1 + nodeId];
-                        if (!parent) throw new Error("missing: " + nodeId);
-                        if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
-                        if (parent.children) parent.children.push(node);
-                        else parent.children = [node];
-                        node.parent = parent;
-                      }
-                    }
-
-                    if (!root) throw new Error("no root");
-                    root.parent = preroot;
-                    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
-                    root.parent = null;
-                    if (n > 0) throw new Error("cycle");
-
-                    return root;
-                  }
-
-                  stratify.id = function(x) {
-                    return arguments.length ? (id = required(x), stratify) : id;
-                  };
-
-                  stratify.parentId = function(x) {
-                    return arguments.length ? (parentId = required(x), stratify) : parentId;
-                  };
-
-                  return stratify;
-                };
-
-                function defaultSeparation$1(a, b) {
-                  return a.parent === b.parent ? 1 : 2;
-                }
-
-                // function radialSeparation(a, b) {
-                //   return (a.parent === b.parent ? 1 : 2) / a.depth;
-                // }
-
-                // This function is used to traverse the left contour of a subtree (or
-                // subforest). It returns the successor of v on this contour. This successor is
-                // either given by the leftmost child of v or by the thread of v. The function
-                // returns null if and only if v is on the highest level of its subtree.
-                function nextLeft(v) {
-                  var children = v.children;
-                  return children ? children[0] : v.t;
-                }
-
-                // This function works analogously to nextLeft.
-                function nextRight(v) {
-                  var children = v.children;
-                  return children ? children[children.length - 1] : v.t;
-                }
-
-                // Shifts the current subtree rooted at w+. This is done by increasing
-                // prelim(w+) and mod(w+) by shift.
-                function moveSubtree(wm, wp, shift) {
-                  var change = shift / (wp.i - wm.i);
-                  wp.c -= change;
-                  wp.s += shift;
-                  wm.c += change;
-                  wp.z += shift;
-                  wp.m += shift;
-                }
-
-                // All other shifts, applied to the smaller subtrees between w- and w+, are
-                // performed by this function. To prepare the shifts, we have to adjust
-                // change(w+), shift(w+), and change(w-).
-                function executeShifts(v) {
-                  var shift = 0,
-                      change = 0,
-                      children = v.children,
-                      i = children.length,
-                      w;
-                  while (--i >= 0) {
-                    w = children[i];
-                    w.z += shift;
-                    w.m += shift;
-                    shift += w.s + (change += w.c);
-                  }
-                }
-
-                // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
-                // returns the specified (default) ancestor.
-                function nextAncestor(vim, v, ancestor) {
-                  return vim.a.parent === v.parent ? vim.a : ancestor;
-                }
-
-                function TreeNode(node, i) {
-                  this._ = node;
-                  this.parent = null;
-                  this.children = null;
-                  this.A = null; // default ancestor
-                  this.a = this; // ancestor
-                  this.z = 0; // prelim
-                  this.m = 0; // mod
-                  this.c = 0; // change
-                  this.s = 0; // shift
-                  this.t = null; // thread
-                  this.i = i; // number
-                }
-
-                TreeNode.prototype = Object.create(Node.prototype);
-
-                function treeRoot(root) {
-                  var tree = new TreeNode(root, 0),
-                      node,
-                      nodes = [tree],
-                      child,
-                      children,
-                      i,
-                      n;
-
-                  while (node = nodes.pop()) {
-                    if (children = node._.children) {
-                      node.children = new Array(n = children.length);
-                      for (i = n - 1; i >= 0; --i) {
-                        nodes.push(child = node.children[i] = new TreeNode(children[i], i));
-                        child.parent = node;
-                      }
-                    }
-                  }
-
-                  (tree.parent = new TreeNode(null, 0)).children = [tree];
-                  return tree;
-                }
-
-                // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
-                var tree = function() {
-                  var separation = defaultSeparation$1,
-                      dx = 1,
-                      dy = 1,
-                      nodeSize = null;
-
-                  function tree(root) {
-                    var t = treeRoot(root);
-
-                    // Compute the layout using Buchheim et al.’s algorithm.
-                    t.eachAfter(firstWalk), t.parent.m = -t.z;
-                    t.eachBefore(secondWalk);
-
-                    // If a fixed node size is specified, scale x and y.
-                    if (nodeSize) root.eachBefore(sizeNode);
-
-                    // If a fixed tree size is specified, scale x and y based on the extent.
-                    // Compute the left-most, right-most, and depth-most nodes for extents.
-                    else {
-                      var left = root,
-                          right = root,
-                          bottom = root;
-                      root.eachBefore(function(node) {
-                        if (node.x < left.x) left = node;
-                        if (node.x > right.x) right = node;
-                        if (node.depth > bottom.depth) bottom = node;
-                      });
-                      var s = left === right ? 1 : separation(left, right) / 2,
-                          tx = s - left.x,
-                          kx = dx / (right.x + s + tx),
-                          ky = dy / (bottom.depth || 1);
-                      root.eachBefore(function(node) {
-                        node.x = (node.x + tx) * kx;
-                        node.y = node.depth * ky;
-                      });
-                    }
-
-                    return root;
-                  }
-
-                  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
-                  // applied recursively to the children of v, as well as the function
-                  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
-                  // node v is placed to the midpoint of its outermost children.
-                  function firstWalk(v) {
-                    var children = v.children,
-                        siblings = v.parent.children,
-                        w = v.i ? siblings[v.i - 1] : null;
-                    if (children) {
-                      executeShifts(v);
-                      var midpoint = (children[0].z + children[children.length - 1].z) / 2;
-                      if (w) {
-                        v.z = w.z + separation(v._, w._);
-                        v.m = v.z - midpoint;
-                      } else {
-                        v.z = midpoint;
-                      }
-                    } else if (w) {
-                      v.z = w.z + separation(v._, w._);
-                    }
-                    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
-                  }
-
-                  // Computes all real x-coordinates by summing up the modifiers recursively.
-                  function secondWalk(v) {
-                    v._.x = v.z + v.parent.m;
-                    v.m += v.parent.m;
-                  }
-
-                  // The core of the algorithm. Here, a new subtree is combined with the
-                  // previous subtrees. Threads are used to traverse the inside and outside
-                  // contours of the left and right subtree up to the highest common level. The
-                  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
-                  // superscript o means outside and i means inside, the subscript - means left
-                  // subtree and + means right subtree. For summing up the modifiers along the
-                  // contour, we use respective variables si+, si-, so-, and so+. Whenever two
-                  // nodes of the inside contours conflict, we compute the left one of the
-                  // greatest uncommon ancestors using the function ANCESTOR and call MOVE
-                  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
-                  // Finally, we add a new thread (if necessary).
-                  function apportion(v, w, ancestor) {
-                    if (w) {
-                      var vip = v,
-                          vop = v,
-                          vim = w,
-                          vom = vip.parent.children[0],
-                          sip = vip.m,
-                          sop = vop.m,
-                          sim = vim.m,
-                          som = vom.m,
-                          shift;
-                      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
-                        vom = nextLeft(vom);
-                        vop = nextRight(vop);
-                        vop.a = v;
-                        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
-                        if (shift > 0) {
-                          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
-                          sip += shift;
-                          sop += shift;
-                        }
-                        sim += vim.m;
-                        sip += vip.m;
-                        som += vom.m;
-                        sop += vop.m;
-                      }
-                      if (vim && !nextRight(vop)) {
-                        vop.t = vim;
-                        vop.m += sim - sop;
-                      }
-                      if (vip && !nextLeft(vom)) {
-                        vom.t = vip;
-                        vom.m += sip - som;
-                        ancestor = v;
-                      }
-                    }
-                    return ancestor;
-                  }
-
-                  function sizeNode(node) {
-                    node.x *= dx;
-                    node.y = node.depth * dy;
-                  }
-
-                  tree.separation = function(x) {
-                    return arguments.length ? (separation = x, tree) : separation;
-                  };
-
-                  tree.size = function(x) {
-                    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
-                  };
-
-                  tree.nodeSize = function(x) {
-                    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
-                  };
-
-                  return tree;
-                };
-
-                var treemapSlice = function(parent, x0, y0, x1, y1) {
-                  var nodes = parent.children,
-                      node,
-                      i = -1,
-                      n = nodes.length,
-                      k = parent.value && (y1 - y0) / parent.value;
-
-                  while (++i < n) {
-                    node = nodes[i], node.x0 = x0, node.x1 = x1;
-                    node.y0 = y0, node.y1 = y0 += node.value * k;
-                  }
-                };
-
-                var phi = (1 + Math.sqrt(5)) / 2;
-
-                function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
-                  var rows = [],
-                      nodes = parent.children,
-                      row,
-                      nodeValue,
-                      i0 = 0,
-                      i1,
-                      n = nodes.length,
-                      dx, dy,
-                      value = parent.value,
-                      sumValue,
-                      minValue,
-                      maxValue,
-                      newRatio,
-                      minRatio,
-                      alpha,
-                      beta;
-
-                  while (i0 < n) {
-                    dx = x1 - x0, dy = y1 - y0;
-                    minValue = maxValue = sumValue = nodes[i0].value;
-                    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
-                    beta = sumValue * sumValue * alpha;
-                    minRatio = Math.max(maxValue / beta, beta / minValue);
-
-                    // Keep adding nodes while the aspect ratio maintains or improves.
-                    for (i1 = i0 + 1; i1 < n; ++i1) {
-                      sumValue += nodeValue = nodes[i1].value;
-                      if (nodeValue < minValue) minValue = nodeValue;
-                      if (nodeValue > maxValue) maxValue = nodeValue;
-                      beta = sumValue * sumValue * alpha;
-                      newRatio = Math.max(maxValue / beta, beta / minValue);
-                      if (newRatio > minRatio) { sumValue -= nodeValue; break; }
-                      minRatio = newRatio;
-                    }
-
-                    // Position and record the row orientation.
-                    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
-                    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
-                    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
-                    value -= sumValue, i0 = i1;
-                  }
-
-                  return rows;
-                }
-
-                var squarify = (function custom(ratio) {
-
-                  function squarify(parent, x0, y0, x1, y1) {
-                    squarifyRatio(ratio, parent, x0, y0, x1, y1);
-                  }
-
-                  squarify.ratio = function(x) {
-                    return custom((x = +x) > 1 ? x : 1);
-                  };
-
-                  return squarify;
-                })(phi);
-
-                var index$1 = function() {
-                  var tile = squarify,
-                      round = false,
-                      dx = 1,
-                      dy = 1,
-                      paddingStack = [0],
-                      paddingInner = constantZero,
-                      paddingTop = constantZero,
-                      paddingRight = constantZero,
-                      paddingBottom = constantZero,
-                      paddingLeft = constantZero;
-
-                  function treemap(root) {
-                    root.x0 =
-                    root.y0 = 0;
-                    root.x1 = dx;
-                    root.y1 = dy;
-                    root.eachBefore(positionNode);
-                    paddingStack = [0];
-                    if (round) root.eachBefore(roundNode);
-                    return root;
-                  }
-
-                  function positionNode(node) {
-                    var p = paddingStack[node.depth],
-                        x0 = node.x0 + p,
-                        y0 = node.y0 + p,
-                        x1 = node.x1 - p,
-                        y1 = node.y1 - p;
-                    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-                    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-                    node.x0 = x0;
-                    node.y0 = y0;
-                    node.x1 = x1;
-                    node.y1 = y1;
-                    if (node.children) {
-                      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
-                      x0 += paddingLeft(node) - p;
-                      y0 += paddingTop(node) - p;
-                      x1 -= paddingRight(node) - p;
-                      y1 -= paddingBottom(node) - p;
-                      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
-                      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
-                      tile(node, x0, y0, x1, y1);
-                    }
-                  }
-
-                  treemap.round = function(x) {
-                    return arguments.length ? (round = !!x, treemap) : round;
-                  };
-
-                  treemap.size = function(x) {
-                    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
-                  };
-
-                  treemap.tile = function(x) {
-                    return arguments.length ? (tile = required(x), treemap) : tile;
-                  };
-
-                  treemap.padding = function(x) {
-                    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
-                  };
-
-                  treemap.paddingInner = function(x) {
-                    return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner;
-                  };
-
-                  treemap.paddingOuter = function(x) {
-                    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
-                  };
-
-                  treemap.paddingTop = function(x) {
-                    return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop;
-                  };
-
-                  treemap.paddingRight = function(x) {
-                    return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight;
-                  };
-
-                  treemap.paddingBottom = function(x) {
-                    return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom;
-                  };
-
-                  treemap.paddingLeft = function(x) {
-                    return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft;
-                  };
-
-                  return treemap;
-                };
-
-                var binary = function(parent, x0, y0, x1, y1) {
-                  var nodes = parent.children,
-                      i, n = nodes.length,
-                      sum, sums = new Array(n + 1);
-
-                  for (sums[0] = sum = i = 0; i < n; ++i) {
-                    sums[i + 1] = sum += nodes[i].value;
-                  }
-
-                  partition(0, n, parent.value, x0, y0, x1, y1);
-
-                  function partition(i, j, value, x0, y0, x1, y1) {
-                    if (i >= j - 1) {
-                      var node = nodes[i];
-                      node.x0 = x0, node.y0 = y0;
-                      node.x1 = x1, node.y1 = y1;
-                      return;
-                    }
-
-                    var valueOffset = sums[i],
-                        valueTarget = (value / 2) + valueOffset,
-                        k = i + 1,
-                        hi = j - 1;
-
-                    while (k < hi) {
-                      var mid = k + hi >>> 1;
-                      if (sums[mid] < valueTarget) k = mid + 1;
-                      else hi = mid;
-                    }
-
-                    var valueLeft = sums[k] - valueOffset,
-                        valueRight = value - valueLeft;
-
-                    if ((y1 - y0) > (x1 - x0)) {
-                      var yk = (y0 * valueRight + y1 * valueLeft) / value;
-                      partition(i, k, valueLeft, x0, y0, x1, yk);
-                      partition(k, j, valueRight, x0, yk, x1, y1);
-                    } else {
-                      var xk = (x0 * valueRight + x1 * valueLeft) / value;
-                      partition(i, k, valueLeft, x0, y0, xk, y1);
-                      partition(k, j, valueRight, xk, y0, x1, y1);
-                    }
-                  }
-                };
-
-                var sliceDice = function(parent, x0, y0, x1, y1) {
-                  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
-                };
-
-                var resquarify = (function custom(ratio) {
-
-                  function resquarify(parent, x0, y0, x1, y1) {
-                    if ((rows = parent._squarify) && (rows.ratio === ratio)) {
-                      var rows,
-                          row,
-                          nodes,
-                          i,
-                          j = -1,
-                          n,
-                          m = rows.length,
-                          value = parent.value;
-
-                      while (++j < m) {
-                        row = rows[j], nodes = row.children;
-                        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
-                        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
-                        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
-                        value -= row.value;
-                      }
-                    } else {
-                      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
-                      rows.ratio = ratio;
-                    }
-                  }
-
-                  resquarify.ratio = function(x) {
-                    return custom((x = +x) > 1 ? x : 1);
-                  };
-
-                  return resquarify;
-                })(phi);
-
-                var center$1 = function(x, y) {
-                  var nodes;
-
-                  if (x == null) x = 0;
-                  if (y == null) y = 0;
-
-                  function force() {
-                    var i,
-                        n = nodes.length,
-                        node,
-                        sx = 0,
-                        sy = 0;
-
-                    for (i = 0; i < n; ++i) {
-                      node = nodes[i], sx += node.x, sy += node.y;
-                    }
-
-                    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
-                      node = nodes[i], node.x -= sx, node.y -= sy;
-                    }
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                  };
-
-                  force.x = function(_) {
-                    return arguments.length ? (x = +_, force) : x;
-                  };
-
-                  force.y = function(_) {
-                    return arguments.length ? (y = +_, force) : y;
-                  };
-
-                  return force;
-                };
-
-                var constant$7 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var jiggle = function() {
-                  return (Math.random() - 0.5) * 1e-6;
-                };
-
-                function x$1(d) {
-                  return d.x + d.vx;
-                }
-
-                function y$1(d) {
-                  return d.y + d.vy;
-                }
-
-                var collide = function(radius) {
-                  var nodes,
-                      radii,
-                      strength = 1,
-                      iterations = 1;
-
-                  if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
-
-                  function force() {
-                    var i, n = nodes.length,
-                        tree,
-                        node,
-                        xi,
-                        yi,
-                        ri,
-                        ri2;
-
-                    for (var k = 0; k < iterations; ++k) {
-                      tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);
-                      for (i = 0; i < n; ++i) {
-                        node = nodes[i];
-                        ri = radii[i], ri2 = ri * ri;
-                        xi = node.x + node.vx;
-                        yi = node.y + node.vy;
-                        tree.visit(apply);
-                      }
-                    }
-
-                    function apply(quad, x0, y0, x1, y1) {
-                      var data = quad.data, rj = quad.r, r = ri + rj;
-                      if (data) {
-                        if (data.index > i) {
-                          var x = xi - data.x - data.vx,
-                              y = yi - data.y - data.vy,
-                              l = x * x + y * y;
-                          if (l < r * r) {
-                            if (x === 0) x = jiggle(), l += x * x;
-                            if (y === 0) y = jiggle(), l += y * y;
-                            l = (r - (l = Math.sqrt(l))) / l * strength;
-                            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
-                            node.vy += (y *= l) * r;
-                            data.vx -= x * (r = 1 - r);
-                            data.vy -= y * r;
-                          }
-                        }
-                        return;
-                      }
-                      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
-                    }
-                  }
-
-                  function prepare(quad) {
-                    if (quad.data) return quad.r = radii[quad.data.index];
-                    for (var i = quad.r = 0; i < 4; ++i) {
-                      if (quad[i] && quad[i].r > quad.r) {
-                        quad.r = quad[i].r;
-                      }
-                    }
-                  }
-
-                  function initialize() {
-                    if (!nodes) return;
-                    var i, n = nodes.length;
-                    radii = new Array(n);
-                    for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                    initialize();
-                  };
-
-                  force.iterations = function(_) {
-                    return arguments.length ? (iterations = +_, force) : iterations;
-                  };
-
-                  force.strength = function(_) {
-                    return arguments.length ? (strength = +_, force) : strength;
-                  };
-
-                  force.radius = function(_) {
-                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
-                  };
-
-                  return force;
-                };
-
-                function index$2(d, i) {
-                  return i;
-                }
-
-                function find(nodeById, nodeId) {
-                  var node = nodeById.get(nodeId);
-                  if (!node) throw new Error("missing: " + nodeId);
-                  return node;
-                }
-
-                var link = function(links) {
-                  var id = index$2,
-                      strength = defaultStrength,
-                      strengths,
-                      distance = constant$7(30),
-                      distances,
-                      nodes,
-                      count,
-                      bias,
-                      iterations = 1;
-
-                  if (links == null) links = [];
-
-                  function defaultStrength(link) {
-                    return 1 / Math.min(count[link.source.index], count[link.target.index]);
-                  }
-
-                  function force(alpha) {
-                    for (var k = 0, n = links.length; k < iterations; ++k) {
-                      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
-                        link = links[i], source = link.source, target = link.target;
-                        x = target.x + target.vx - source.x - source.vx || jiggle();
-                        y = target.y + target.vy - source.y - source.vy || jiggle();
-                        l = Math.sqrt(x * x + y * y);
-                        l = (l - distances[i]) / l * alpha * strengths[i];
-                        x *= l, y *= l;
-                        target.vx -= x * (b = bias[i]);
-                        target.vy -= y * b;
-                        source.vx += x * (b = 1 - b);
-                        source.vy += y * b;
-                      }
-                    }
-                  }
-
-                  function initialize() {
-                    if (!nodes) return;
-
-                    var i,
-                        n = nodes.length,
-                        m = links.length,
-                        nodeById = map$1(nodes, id),
-                        link;
-
-                    for (i = 0, count = new Array(n); i < n; ++i) {
-                      count[i] = 0;
-                    }
-
-                    for (i = 0; i < m; ++i) {
-                      link = links[i], link.index = i;
-                      if (typeof link.source !== "object") link.source = find(nodeById, link.source);
-                      if (typeof link.target !== "object") link.target = find(nodeById, link.target);
-                      ++count[link.source.index], ++count[link.target.index];
-                    }
-
-                    for (i = 0, bias = new Array(m); i < m; ++i) {
-                      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
-                    }
-
-                    strengths = new Array(m), initializeStrength();
-                    distances = new Array(m), initializeDistance();
-                  }
-
-                  function initializeStrength() {
-                    if (!nodes) return;
-
-                    for (var i = 0, n = links.length; i < n; ++i) {
-                      strengths[i] = +strength(links[i], i, links);
-                    }
-                  }
-
-                  function initializeDistance() {
-                    if (!nodes) return;
-
-                    for (var i = 0, n = links.length; i < n; ++i) {
-                      distances[i] = +distance(links[i], i, links);
-                    }
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                    initialize();
-                  };
-
-                  force.links = function(_) {
-                    return arguments.length ? (links = _, initialize(), force) : links;
-                  };
-
-                  force.id = function(_) {
-                    return arguments.length ? (id = _, force) : id;
-                  };
-
-                  force.iterations = function(_) {
-                    return arguments.length ? (iterations = +_, force) : iterations;
-                  };
-
-                  force.strength = function(_) {
-                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
-                  };
-
-                  force.distance = function(_) {
-                    return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
-                  };
-
-                  return force;
-                };
-
-                function x$2(d) {
-                  return d.x;
-                }
-
-                function y$2(d) {
-                  return d.y;
-                }
-
-                var initialRadius = 10;
-                var initialAngle = Math.PI * (3 - Math.sqrt(5));
-
-                var simulation = function(nodes) {
-                  var simulation,
-                      alpha = 1,
-                      alphaMin = 0.001,
-                      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
-                      alphaTarget = 0,
-                      velocityDecay = 0.6,
-                      forces = map$1(),
-                      stepper = timer(step),
-                      event = dispatch("tick", "end");
-
-                  if (nodes == null) nodes = [];
-
-                  function step() {
-                    tick();
-                    event.call("tick", simulation);
-                    if (alpha < alphaMin) {
-                      stepper.stop();
-                      event.call("end", simulation);
-                    }
-                  }
-
-                  function tick() {
-                    var i, n = nodes.length, node;
-
-                    alpha += (alphaTarget - alpha) * alphaDecay;
-
-                    forces.each(function(force) {
-                      force(alpha);
-                    });
-
-                    for (i = 0; i < n; ++i) {
-                      node = nodes[i];
-                      if (node.fx == null) node.x += node.vx *= velocityDecay;
-                      else node.x = node.fx, node.vx = 0;
-                      if (node.fy == null) node.y += node.vy *= velocityDecay;
-                      else node.y = node.fy, node.vy = 0;
-                    }
-                  }
-
-                  function initializeNodes() {
-                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
-                      node = nodes[i], node.index = i;
-                      if (isNaN(node.x) || isNaN(node.y)) {
-                        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
-                        node.x = radius * Math.cos(angle);
-                        node.y = radius * Math.sin(angle);
-                      }
-                      if (isNaN(node.vx) || isNaN(node.vy)) {
-                        node.vx = node.vy = 0;
-                      }
-                    }
-                  }
-
-                  function initializeForce(force) {
-                    if (force.initialize) force.initialize(nodes);
-                    return force;
-                  }
-
-                  initializeNodes();
-
-                  return simulation = {
-                    tick: tick,
-
-                    restart: function() {
-                      return stepper.restart(step), simulation;
-                    },
-
-                    stop: function() {
-                      return stepper.stop(), simulation;
-                    },
-
-                    nodes: function(_) {
-                      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
-                    },
-
-                    alpha: function(_) {
-                      return arguments.length ? (alpha = +_, simulation) : alpha;
-                    },
-
-                    alphaMin: function(_) {
-                      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
-                    },
-
-                    alphaDecay: function(_) {
-                      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
-                    },
-
-                    alphaTarget: function(_) {
-                      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
-                    },
-
-                    velocityDecay: function(_) {
-                      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
-                    },
-
-                    force: function(name, _) {
-                      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
-                    },
-
-                    find: function(x, y, radius) {
-                      var i = 0,
-                          n = nodes.length,
-                          dx,
-                          dy,
-                          d2,
-                          node,
-                          closest;
-
-                      if (radius == null) radius = Infinity;
-                      else radius *= radius;
-
-                      for (i = 0; i < n; ++i) {
-                        node = nodes[i];
-                        dx = x - node.x;
-                        dy = y - node.y;
-                        d2 = dx * dx + dy * dy;
-                        if (d2 < radius) closest = node, radius = d2;
-                      }
-
-                      return closest;
-                    },
-
-                    on: function(name, _) {
-                      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
-                    }
-                  };
-                };
-
-                var manyBody = function() {
-                  var nodes,
-                      node,
-                      alpha,
-                      strength = constant$7(-30),
-                      strengths,
-                      distanceMin2 = 1,
-                      distanceMax2 = Infinity,
-                      theta2 = 0.81;
-
-                  function force(_) {
-                    var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);
-                    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
-                  }
-
-                  function initialize() {
-                    if (!nodes) return;
-                    var i, n = nodes.length;
-                    strengths = new Array(n);
-                    for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);
-                  }
-
-                  function accumulate(quad) {
-                    var strength = 0, q, c, x$$1, y$$1, i;
-
-                    // For internal nodes, accumulate forces from child quadrants.
-                    if (quad.length) {
-                      for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
-                        if ((q = quad[i]) && (c = q.value)) {
-                          strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
-                        }
-                      }
-                      quad.x = x$$1 / strength;
-                      quad.y = y$$1 / strength;
-                    }
-
-                    // For leaf nodes, accumulate forces from coincident quadrants.
-                    else {
-                      q = quad;
-                      q.x = q.data.x;
-                      q.y = q.data.y;
-                      do strength += strengths[q.data.index];
-                      while (q = q.next);
-                    }
-
-                    quad.value = strength;
-                  }
-
-                  function apply(quad, x1, _, x2) {
-                    if (!quad.value) return true;
-
-                    var x$$1 = quad.x - node.x,
-                        y$$1 = quad.y - node.y,
-                        w = x2 - x1,
-                        l = x$$1 * x$$1 + y$$1 * y$$1;
-
-                    // Apply the Barnes-Hut approximation if possible.
-                    // Limit forces for very close nodes; randomize direction if coincident.
-                    if (w * w / theta2 < l) {
-                      if (l < distanceMax2) {
-                        if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-                        if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
-                        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
-                        node.vx += x$$1 * quad.value * alpha / l;
-                        node.vy += y$$1 * quad.value * alpha / l;
-                      }
-                      return true;
-                    }
-
-                    // Otherwise, process points directly.
-                    else if (quad.length || l >= distanceMax2) return;
-
-                    // Limit forces for very close nodes; randomize direction if coincident.
-                    if (quad.data !== node || quad.next) {
-                      if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-                      if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
-                      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
-                    }
-
-                    do if (quad.data !== node) {
-                      w = strengths[quad.data.index] * alpha / l;
-                      node.vx += x$$1 * w;
-                      node.vy += y$$1 * w;
-                    } while (quad = quad.next);
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                    initialize();
-                  };
-
-                  force.strength = function(_) {
-                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-                  };
-
-                  force.distanceMin = function(_) {
-                    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
-                  };
-
-                  force.distanceMax = function(_) {
-                    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
-                  };
-
-                  force.theta = function(_) {
-                    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
-                  };
-
-                  return force;
-                };
-
-                var x$3 = function(x) {
-                  var strength = constant$7(0.1),
-                      nodes,
-                      strengths,
-                      xz;
-
-                  if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
-
-                  function force(alpha) {
-                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
-                      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
-                    }
-                  }
-
-                  function initialize() {
-                    if (!nodes) return;
-                    var i, n = nodes.length;
-                    strengths = new Array(n);
-                    xz = new Array(n);
-                    for (i = 0; i < n; ++i) {
-                      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
-                    }
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                    initialize();
-                  };
-
-                  force.strength = function(_) {
-                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-                  };
-
-                  force.x = function(_) {
-                    return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
-                  };
-
-                  return force;
-                };
-
-                var y$3 = function(y) {
-                  var strength = constant$7(0.1),
-                      nodes,
-                      strengths,
-                      yz;
-
-                  if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
-
-                  function force(alpha) {
-                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
-                      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
-                    }
-                  }
-
-                  function initialize() {
-                    if (!nodes) return;
-                    var i, n = nodes.length;
-                    strengths = new Array(n);
-                    yz = new Array(n);
-                    for (i = 0; i < n; ++i) {
-                      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
-                    }
-                  }
-
-                  force.initialize = function(_) {
-                    nodes = _;
-                    initialize();
-                  };
-
-                  force.strength = function(_) {
-                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
-                  };
-
-                  force.y = function(_) {
-                    return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
-                  };
-
-                  return force;
-                };
-
-                function nopropagation() {
-                  exports.event.stopImmediatePropagation();
-                }
-
-                var noevent = function() {
-                  exports.event.preventDefault();
-                  exports.event.stopImmediatePropagation();
-                };
-
-                var dragDisable = function(view) {
-                  var root = view.document.documentElement,
-                      selection$$1 = select(view).on("dragstart.drag", noevent, true);
-                  if ("onselectstart" in root) {
-                    selection$$1.on("selectstart.drag", noevent, true);
-                  } else {
-                    root.__noselect = root.style.MozUserSelect;
-                    root.style.MozUserSelect = "none";
-                  }
-                };
-
-                function yesdrag(view, noclick) {
-                  var root = view.document.documentElement,
-                      selection$$1 = select(view).on("dragstart.drag", null);
-                  if (noclick) {
-                    selection$$1.on("click.drag", noevent, true);
-                    setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
-                  }
-                  if ("onselectstart" in root) {
-                    selection$$1.on("selectstart.drag", null);
-                  } else {
-                    root.style.MozUserSelect = root.__noselect;
-                    delete root.__noselect;
-                  }
-                }
-
-                var constant$8 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
-                  this.target = target;
-                  this.type = type;
-                  this.subject = subject;
-                  this.identifier = id;
-                  this.active = active;
-                  this.x = x;
-                  this.y = y;
-                  this.dx = dx;
-                  this.dy = dy;
-                  this._ = dispatch;
-                }
-
-                DragEvent.prototype.on = function() {
-                  var value = this._.on.apply(this._, arguments);
-                  return value === this._ ? this : value;
-                };
-
-                // Ignore right-click, since that should open the context menu.
-                function defaultFilter() {
-                  return !exports.event.button;
-                }
-
-                function defaultContainer() {
-                  return this.parentNode;
-                }
-
-                function defaultSubject(d) {
-                  return d == null ? {x: exports.event.x, y: exports.event.y} : d;
-                }
-
-                var drag = function() {
-                  var filter = defaultFilter,
-                      container = defaultContainer,
-                      subject = defaultSubject,
-                      gestures = {},
-                      listeners = dispatch("start", "drag", "end"),
-                      active = 0,
-                      mousemoving,
-                      touchending;
-
-                  function drag(selection$$1) {
-                    selection$$1
-                        .on("mousedown.drag", mousedowned)
-                        .on("touchstart.drag", touchstarted)
-                        .on("touchmove.drag", touchmoved)
-                        .on("touchend.drag touchcancel.drag", touchended)
-                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
-                  }
-
-                  function mousedowned() {
-                    if (touchending || !filter.apply(this, arguments)) return;
-                    var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
-                    if (!gesture) return;
-                    select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
-                    dragDisable(exports.event.view);
-                    nopropagation();
-                    mousemoving = false;
-                    gesture("start");
-                  }
-
-                  function mousemoved() {
-                    noevent();
-                    mousemoving = true;
-                    gestures.mouse("drag");
-                  }
-
-                  function mouseupped() {
-                    select(exports.event.view).on("mousemove.drag mouseup.drag", null);
-                    yesdrag(exports.event.view, mousemoving);
-                    noevent();
-                    gestures.mouse("end");
-                  }
-
-                  function touchstarted() {
-                    if (!filter.apply(this, arguments)) return;
-                    var touches$$1 = exports.event.changedTouches,
-                        c = container.apply(this, arguments),
-                        n = touches$$1.length, i, gesture;
-
-                    for (i = 0; i < n; ++i) {
-                      if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
-                        nopropagation();
-                        gesture("start");
-                      }
-                    }
-                  }
-
-                  function touchmoved() {
-                    var touches$$1 = exports.event.changedTouches,
-                        n = touches$$1.length, i, gesture;
-
-                    for (i = 0; i < n; ++i) {
-                      if (gesture = gestures[touches$$1[i].identifier]) {
-                        noevent();
-                        gesture("drag");
-                      }
-                    }
-                  }
-
-                  function touchended() {
-                    var touches$$1 = exports.event.changedTouches,
-                        n = touches$$1.length, i, gesture;
-
-                    if (touchending) clearTimeout(touchending);
-                    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
-                    for (i = 0; i < n; ++i) {
-                      if (gesture = gestures[touches$$1[i].identifier]) {
-                        nopropagation();
-                        gesture("end");
-                      }
-                    }
-                  }
-
-                  function beforestart(id, container, point, that, args) {
-                    var p = point(container, id), s, dx, dy,
-                        sublisteners = listeners.copy();
-
-                    if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
-                      if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
-                      dx = s.x - p[0] || 0;
-                      dy = s.y - p[1] || 0;
-                      return true;
-                    })) return;
-
-                    return function gesture(type) {
-                      var p0 = p, n;
-                      switch (type) {
-                        case "start": gestures[id] = gesture, n = active++; break;
-                        case "end": delete gestures[id], --active; // nobreak
-                        case "drag": p = point(container, id), n = active; break;
-                      }
-                      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
-                    };
-                  }
-
-                  drag.filter = function(_) {
-                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter;
-                  };
-
-                  drag.container = function(_) {
-                    return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container;
-                  };
-
-                  drag.subject = function(_) {
-                    return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject;
-                  };
-
-                  drag.on = function() {
-                    var value = listeners.on.apply(listeners, arguments);
-                    return value === listeners ? drag : value;
-                  };
-
-                  return drag;
-                };
-
-                var constant$9 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function x$4(d) {
-                  return d[0];
-                }
-
-                function y$4(d) {
-                  return d[1];
-                }
-
-                function RedBlackTree() {
-                  this._ = null; // root node
-                }
-
-                function RedBlackNode(node) {
-                  node.U = // parent node
-                  node.C = // color - true for red, false for black
-                  node.L = // left node
-                  node.R = // right node
-                  node.P = // previous node
-                  node.N = null; // next node
-                }
-
-                RedBlackTree.prototype = {
-                  constructor: RedBlackTree,
-
-                  insert: function(after, node) {
-                    var parent, grandpa, uncle;
-
-                    if (after) {
-                      node.P = after;
-                      node.N = after.N;
-                      if (after.N) after.N.P = node;
-                      after.N = node;
-                      if (after.R) {
-                        after = after.R;
-                        while (after.L) after = after.L;
-                        after.L = node;
-                      } else {
-                        after.R = node;
-                      }
-                      parent = after;
-                    } else if (this._) {
-                      after = RedBlackFirst(this._);
-                      node.P = null;
-                      node.N = after;
-                      after.P = after.L = node;
-                      parent = after;
-                    } else {
-                      node.P = node.N = null;
-                      this._ = node;
-                      parent = null;
-                    }
-                    node.L = node.R = null;
-                    node.U = parent;
-                    node.C = true;
-
-                    after = node;
-                    while (parent && parent.C) {
-                      grandpa = parent.U;
-                      if (parent === grandpa.L) {
-                        uncle = grandpa.R;
-                        if (uncle && uncle.C) {
-                          parent.C = uncle.C = false;
-                          grandpa.C = true;
-                          after = grandpa;
-                        } else {
-                          if (after === parent.R) {
-                            RedBlackRotateLeft(this, parent);
-                            after = parent;
-                            parent = after.U;
-                          }
-                          parent.C = false;
-                          grandpa.C = true;
-                          RedBlackRotateRight(this, grandpa);
-                        }
-                      } else {
-                        uncle = grandpa.L;
-                        if (uncle && uncle.C) {
-                          parent.C = uncle.C = false;
-                          grandpa.C = true;
-                          after = grandpa;
-                        } else {
-                          if (after === parent.L) {
-                            RedBlackRotateRight(this, parent);
-                            after = parent;
-                            parent = after.U;
-                          }
-                          parent.C = false;
-                          grandpa.C = true;
-                          RedBlackRotateLeft(this, grandpa);
-                        }
-                      }
-                      parent = after.U;
-                    }
-                    this._.C = false;
-                  },
-
-                  remove: function(node) {
-                    if (node.N) node.N.P = node.P;
-                    if (node.P) node.P.N = node.N;
-                    node.N = node.P = null;
-
-                    var parent = node.U,
-                        sibling,
-                        left = node.L,
-                        right = node.R,
-                        next,
-                        red;
-
-                    if (!left) next = right;
-                    else if (!right) next = left;
-                    else next = RedBlackFirst(right);
-
-                    if (parent) {
-                      if (parent.L === node) parent.L = next;
-                      else parent.R = next;
-                    } else {
-                      this._ = next;
-                    }
-
-                    if (left && right) {
-                      red = next.C;
-                      next.C = node.C;
-                      next.L = left;
-                      left.U = next;
-                      if (next !== right) {
-                        parent = next.U;
-                        next.U = node.U;
-                        node = next.R;
-                        parent.L = node;
-                        next.R = right;
-                        right.U = next;
-                      } else {
-                        next.U = parent;
-                        parent = next;
-                        node = next.R;
-                      }
-                    } else {
-                      red = node.C;
-                      node = next;
-                    }
-
-                    if (node) node.U = parent;
-                    if (red) return;
-                    if (node && node.C) { node.C = false; return; }
-
-                    do {
-                      if (node === this._) break;
-                      if (node === parent.L) {
-                        sibling = parent.R;
-                        if (sibling.C) {
-                          sibling.C = false;
-                          parent.C = true;
-                          RedBlackRotateLeft(this, parent);
-                          sibling = parent.R;
-                        }
-                        if ((sibling.L && sibling.L.C)
-                            || (sibling.R && sibling.R.C)) {
-                          if (!sibling.R || !sibling.R.C) {
-                            sibling.L.C = false;
-                            sibling.C = true;
-                            RedBlackRotateRight(this, sibling);
-                            sibling = parent.R;
-                          }
-                          sibling.C = parent.C;
-                          parent.C = sibling.R.C = false;
-                          RedBlackRotateLeft(this, parent);
-                          node = this._;
-                          break;
-                        }
-                      } else {
-                        sibling = parent.L;
-                        if (sibling.C) {
-                          sibling.C = false;
-                          parent.C = true;
-                          RedBlackRotateRight(this, parent);
-                          sibling = parent.L;
-                        }
-                        if ((sibling.L && sibling.L.C)
-                          || (sibling.R && sibling.R.C)) {
-                          if (!sibling.L || !sibling.L.C) {
-                            sibling.R.C = false;
-                            sibling.C = true;
-                            RedBlackRotateLeft(this, sibling);
-                            sibling = parent.L;
-                          }
-                          sibling.C = parent.C;
-                          parent.C = sibling.L.C = false;
-                          RedBlackRotateRight(this, parent);
-                          node = this._;
-                          break;
-                        }
-                      }
-                      sibling.C = true;
-                      node = parent;
-                      parent = parent.U;
-                    } while (!node.C);
-
-                    if (node) node.C = false;
-                  }
-                };
-
-                function RedBlackRotateLeft(tree, node) {
-                  var p = node,
-                      q = node.R,
-                      parent = p.U;
-
-                  if (parent) {
-                    if (parent.L === p) parent.L = q;
-                    else parent.R = q;
-                  } else {
-                    tree._ = q;
-                  }
-
-                  q.U = parent;
-                  p.U = q;
-                  p.R = q.L;
-                  if (p.R) p.R.U = p;
-                  q.L = p;
-                }
-
-                function RedBlackRotateRight(tree, node) {
-                  var p = node,
-                      q = node.L,
-                      parent = p.U;
-
-                  if (parent) {
-                    if (parent.L === p) parent.L = q;
-                    else parent.R = q;
-                  } else {
-                    tree._ = q;
-                  }
-
-                  q.U = parent;
-                  p.U = q;
-                  p.L = q.R;
-                  if (p.L) p.L.U = p;
-                  q.R = p;
-                }
-
-                function RedBlackFirst(node) {
-                  while (node.L) node = node.L;
-                  return node;
-                }
-
-                function createEdge(left, right, v0, v1) {
-                  var edge = [null, null],
-                      index = edges.push(edge) - 1;
-                  edge.left = left;
-                  edge.right = right;
-                  if (v0) setEdgeEnd(edge, left, right, v0);
-                  if (v1) setEdgeEnd(edge, right, left, v1);
-                  cells[left.index].halfedges.push(index);
-                  cells[right.index].halfedges.push(index);
-                  return edge;
-                }
-
-                function createBorderEdge(left, v0, v1) {
-                  var edge = [v0, v1];
-                  edge.left = left;
-                  return edge;
-                }
-
-                function setEdgeEnd(edge, left, right, vertex) {
-                  if (!edge[0] && !edge[1]) {
-                    edge[0] = vertex;
-                    edge.left = left;
-                    edge.right = right;
-                  } else if (edge.left === right) {
-                    edge[1] = vertex;
-                  } else {
-                    edge[0] = vertex;
-                  }
-                }
-
-                // Liang–Barsky line clipping.
-                function clipEdge(edge, x0, y0, x1, y1) {
-                  var a = edge[0],
-                      b = edge[1],
-                      ax = a[0],
-                      ay = a[1],
-                      bx = b[0],
-                      by = b[1],
-                      t0 = 0,
-                      t1 = 1,
-                      dx = bx - ax,
-                      dy = by - ay,
-                      r;
-
-                  r = x0 - ax;
-                  if (!dx && r > 0) return;
-                  r /= dx;
-                  if (dx < 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  } else if (dx > 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  }
-
-                  r = x1 - ax;
-                  if (!dx && r < 0) return;
-                  r /= dx;
-                  if (dx < 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  } else if (dx > 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  }
-
-                  r = y0 - ay;
-                  if (!dy && r > 0) return;
-                  r /= dy;
-                  if (dy < 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  } else if (dy > 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  }
-
-                  r = y1 - ay;
-                  if (!dy && r < 0) return;
-                  r /= dy;
-                  if (dy < 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  } else if (dy > 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  }
-
-                  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
-
-                  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
-                  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
-                  return true;
-                }
-
-                function connectEdge(edge, x0, y0, x1, y1) {
-                  var v1 = edge[1];
-                  if (v1) return true;
-
-                  var v0 = edge[0],
-                      left = edge.left,
-                      right = edge.right,
-                      lx = left[0],
-                      ly = left[1],
-                      rx = right[0],
-                      ry = right[1],
-                      fx = (lx + rx) / 2,
-                      fy = (ly + ry) / 2,
-                      fm,
-                      fb;
-
-                  if (ry === ly) {
-                    if (fx < x0 || fx >= x1) return;
-                    if (lx > rx) {
-                      if (!v0) v0 = [fx, y0];
-                      else if (v0[1] >= y1) return;
-                      v1 = [fx, y1];
-                    } else {
-                      if (!v0) v0 = [fx, y1];
-                      else if (v0[1] < y0) return;
-                      v1 = [fx, y0];
-                    }
-                  } else {
-                    fm = (lx - rx) / (ry - ly);
-                    fb = fy - fm * fx;
-                    if (fm < -1 || fm > 1) {
-                      if (lx > rx) {
-                        if (!v0) v0 = [(y0 - fb) / fm, y0];
-                        else if (v0[1] >= y1) return;
-                        v1 = [(y1 - fb) / fm, y1];
-                      } else {
-                        if (!v0) v0 = [(y1 - fb) / fm, y1];
-                        else if (v0[1] < y0) return;
-                        v1 = [(y0 - fb) / fm, y0];
-                      }
-                    } else {
-                      if (ly < ry) {
-                        if (!v0) v0 = [x0, fm * x0 + fb];
-                        else if (v0[0] >= x1) return;
-                        v1 = [x1, fm * x1 + fb];
-                      } else {
-                        if (!v0) v0 = [x1, fm * x1 + fb];
-                        else if (v0[0] < x0) return;
-                        v1 = [x0, fm * x0 + fb];
-                      }
-                    }
-                  }
-
-                  edge[0] = v0;
-                  edge[1] = v1;
-                  return true;
-                }
-
-                function clipEdges(x0, y0, x1, y1) {
-                  var i = edges.length,
-                      edge;
-
-                  while (i--) {
-                    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
-                        || !clipEdge(edge, x0, y0, x1, y1)
-                        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3
-                            || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {
-                      delete edges[i];
-                    }
-                  }
-                }
-
-                function createCell(site) {
-                  return cells[site.index] = {
-                    site: site,
-                    halfedges: []
-                  };
-                }
-
-                function cellHalfedgeAngle(cell, edge) {
-                  var site = cell.site,
-                      va = edge.left,
-                      vb = edge.right;
-                  if (site === vb) vb = va, va = site;
-                  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
-                  if (site === va) va = edge[1], vb = edge[0];
-                  else va = edge[0], vb = edge[1];
-                  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
-                }
-
-                function cellHalfedgeStart(cell, edge) {
-                  return edge[+(edge.left !== cell.site)];
-                }
-
-                function cellHalfedgeEnd(cell, edge) {
-                  return edge[+(edge.left === cell.site)];
-                }
-
-                function sortCellHalfedges() {
-                  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
-                    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
-                      var index = new Array(m),
-                          array = new Array(m);
-                      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
-                      index.sort(function(i, j) { return array[j] - array[i]; });
-                      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
-                      for (j = 0; j < m; ++j) halfedges[j] = array[j];
-                    }
-                  }
-                }
-
-                function clipCells(x0, y0, x1, y1) {
-                  var nCells = cells.length,
-                      iCell,
-                      cell,
-                      site,
-                      iHalfedge,
-                      halfedges,
-                      nHalfedges,
-                      start,
-                      startX,
-                      startY,
-                      end,
-                      endX,
-                      endY,
-                      cover = true;
-
-                  for (iCell = 0; iCell < nCells; ++iCell) {
-                    if (cell = cells[iCell]) {
-                      site = cell.site;
-                      halfedges = cell.halfedges;
-                      iHalfedge = halfedges.length;
-
-                      // Remove any dangling clipped edges.
-                      while (iHalfedge--) {
-                        if (!edges[halfedges[iHalfedge]]) {
-                          halfedges.splice(iHalfedge, 1);
-                        }
-                      }
-
-                      // Insert any border edges as necessary.
-                      iHalfedge = 0, nHalfedges = halfedges.length;
-                      while (iHalfedge < nHalfedges) {
-                        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
-                        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
-                        if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {
-                          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
-                              Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]
-                              : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]
-                              : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]
-                              : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]
-                              : null)) - 1);
-                          ++nHalfedges;
-                        }
-                      }
-
-                      if (nHalfedges) cover = false;
-                    }
-                  }
-
-                  // If there weren’t any edges, have the closest site cover the extent.
-                  // It doesn’t matter which corner of the extent we measure!
-                  if (cover) {
-                    var dx, dy, d2, dc = Infinity;
-
-                    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
-                      if (cell = cells[iCell]) {
-                        site = cell.site;
-                        dx = site[0] - x0;
-                        dy = site[1] - y0;
-                        d2 = dx * dx + dy * dy;
-                        if (d2 < dc) dc = d2, cover = cell;
-                      }
-                    }
-
-                    if (cover) {
-                      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
-                      cover.halfedges.push(
-                        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
-                        edges.push(createBorderEdge(site, v01, v11)) - 1,
-                        edges.push(createBorderEdge(site, v11, v10)) - 1,
-                        edges.push(createBorderEdge(site, v10, v00)) - 1
-                      );
-                    }
-                  }
-
-                  // Lastly delete any cells with no edges; these were entirely clipped.
-                  for (iCell = 0; iCell < nCells; ++iCell) {
-                    if (cell = cells[iCell]) {
-                      if (!cell.halfedges.length) {
-                        delete cells[iCell];
-                      }
-                    }
-                  }
-                }
-
-                var circlePool = [];
-
-                var firstCircle;
-
-                function Circle() {
-                  RedBlackNode(this);
-                  this.x =
-                  this.y =
-                  this.arc =
-                  this.site =
-                  this.cy = null;
-                }
-
-                function attachCircle(arc) {
-                  var lArc = arc.P,
-                      rArc = arc.N;
-
-                  if (!lArc || !rArc) return;
-
-                  var lSite = lArc.site,
-                      cSite = arc.site,
-                      rSite = rArc.site;
-
-                  if (lSite === rSite) return;
-
-                  var bx = cSite[0],
-                      by = cSite[1],
-                      ax = lSite[0] - bx,
-                      ay = lSite[1] - by,
-                      cx = rSite[0] - bx,
-                      cy = rSite[1] - by;
-
-                  var d = 2 * (ax * cy - ay * cx);
-                  if (d >= -epsilon2$1) return;
-
-                  var ha = ax * ax + ay * ay,
-                      hc = cx * cx + cy * cy,
-                      x = (cy * ha - ay * hc) / d,
-                      y = (ax * hc - cx * ha) / d;
-
-                  var circle = circlePool.pop() || new Circle;
-                  circle.arc = arc;
-                  circle.site = cSite;
-                  circle.x = x + bx;
-                  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
-
-                  arc.circle = circle;
-
-                  var before = null,
-                      node = circles._;
-
-                  while (node) {
-                    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
-                      if (node.L) node = node.L;
-                      else { before = node.P; break; }
-                    } else {
-                      if (node.R) node = node.R;
-                      else { before = node; break; }
-                    }
-                  }
-
-                  circles.insert(before, circle);
-                  if (!before) firstCircle = circle;
-                }
-
-                function detachCircle(arc) {
-                  var circle = arc.circle;
-                  if (circle) {
-                    if (!circle.P) firstCircle = circle.N;
-                    circles.remove(circle);
-                    circlePool.push(circle);
-                    RedBlackNode(circle);
-                    arc.circle = null;
-                  }
-                }
-
-                var beachPool = [];
-
-                function Beach() {
-                  RedBlackNode(this);
-                  this.edge =
-                  this.site =
-                  this.circle = null;
-                }
-
-                function createBeach(site) {
-                  var beach = beachPool.pop() || new Beach;
-                  beach.site = site;
-                  return beach;
-                }
-
-                function detachBeach(beach) {
-                  detachCircle(beach);
-                  beaches.remove(beach);
-                  beachPool.push(beach);
-                  RedBlackNode(beach);
-                }
-
-                function removeBeach(beach) {
-                  var circle = beach.circle,
-                      x = circle.x,
-                      y = circle.cy,
-                      vertex = [x, y],
-                      previous = beach.P,
-                      next = beach.N,
-                      disappearing = [beach];
-
-                  detachBeach(beach);
-
-                  var lArc = previous;
-                  while (lArc.circle
-                      && Math.abs(x - lArc.circle.x) < epsilon$3
-                      && Math.abs(y - lArc.circle.cy) < epsilon$3) {
-                    previous = lArc.P;
-                    disappearing.unshift(lArc);
-                    detachBeach(lArc);
-                    lArc = previous;
-                  }
-
-                  disappearing.unshift(lArc);
-                  detachCircle(lArc);
-
-                  var rArc = next;
-                  while (rArc.circle
-                      && Math.abs(x - rArc.circle.x) < epsilon$3
-                      && Math.abs(y - rArc.circle.cy) < epsilon$3) {
-                    next = rArc.N;
-                    disappearing.push(rArc);
-                    detachBeach(rArc);
-                    rArc = next;
-                  }
-
-                  disappearing.push(rArc);
-                  detachCircle(rArc);
-
-                  var nArcs = disappearing.length,
-                      iArc;
-                  for (iArc = 1; iArc < nArcs; ++iArc) {
-                    rArc = disappearing[iArc];
-                    lArc = disappearing[iArc - 1];
-                    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
-                  }
-
-                  lArc = disappearing[0];
-                  rArc = disappearing[nArcs - 1];
-                  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
-
-                  attachCircle(lArc);
-                  attachCircle(rArc);
-                }
-
-                function addBeach(site) {
-                  var x = site[0],
-                      directrix = site[1],
-                      lArc,
-                      rArc,
-                      dxl,
-                      dxr,
-                      node = beaches._;
-
-                  while (node) {
-                    dxl = leftBreakPoint(node, directrix) - x;
-                    if (dxl > epsilon$3) node = node.L; else {
-                      dxr = x - rightBreakPoint(node, directrix);
-                      if (dxr > epsilon$3) {
-                        if (!node.R) {
-                          lArc = node;
-                          break;
-                        }
-                        node = node.R;
-                      } else {
-                        if (dxl > -epsilon$3) {
-                          lArc = node.P;
-                          rArc = node;
-                        } else if (dxr > -epsilon$3) {
-                          lArc = node;
-                          rArc = node.N;
-                        } else {
-                          lArc = rArc = node;
-                        }
-                        break;
-                      }
-                    }
-                  }
-
-                  createCell(site);
-                  var newArc = createBeach(site);
-                  beaches.insert(lArc, newArc);
-
-                  if (!lArc && !rArc) return;
-
-                  if (lArc === rArc) {
-                    detachCircle(lArc);
-                    rArc = createBeach(lArc.site);
-                    beaches.insert(newArc, rArc);
-                    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
-                    attachCircle(lArc);
-                    attachCircle(rArc);
-                    return;
-                  }
-
-                  if (!rArc) { // && lArc
-                    newArc.edge = createEdge(lArc.site, newArc.site);
-                    return;
-                  }
-
-                  // else lArc !== rArc
-                  detachCircle(lArc);
-                  detachCircle(rArc);
-
-                  var lSite = lArc.site,
-                      ax = lSite[0],
-                      ay = lSite[1],
-                      bx = site[0] - ax,
-                      by = site[1] - ay,
-                      rSite = rArc.site,
-                      cx = rSite[0] - ax,
-                      cy = rSite[1] - ay,
-                      d = 2 * (bx * cy - by * cx),
-                      hb = bx * bx + by * by,
-                      hc = cx * cx + cy * cy,
-                      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
-
-                  setEdgeEnd(rArc.edge, lSite, rSite, vertex);
-                  newArc.edge = createEdge(lSite, site, null, vertex);
-                  rArc.edge = createEdge(site, rSite, null, vertex);
-                  attachCircle(lArc);
-                  attachCircle(rArc);
-                }
-
-                function leftBreakPoint(arc, directrix) {
-                  var site = arc.site,
-                      rfocx = site[0],
-                      rfocy = site[1],
-                      pby2 = rfocy - directrix;
-
-                  if (!pby2) return rfocx;
-
-                  var lArc = arc.P;
-                  if (!lArc) return -Infinity;
-
-                  site = lArc.site;
-                  var lfocx = site[0],
-                      lfocy = site[1],
-                      plby2 = lfocy - directrix;
-
-                  if (!plby2) return lfocx;
-
-                  var hl = lfocx - rfocx,
-                      aby2 = 1 / pby2 - 1 / plby2,
-                      b = hl / plby2;
-
-                  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
-
-                  return (rfocx + lfocx) / 2;
-                }
-
-                function rightBreakPoint(arc, directrix) {
-                  var rArc = arc.N;
-                  if (rArc) return leftBreakPoint(rArc, directrix);
-                  var site = arc.site;
-                  return site[1] === directrix ? site[0] : Infinity;
-                }
-
-                var epsilon$3 = 1e-6;
-                var epsilon2$1 = 1e-12;
-                var beaches;
-                var cells;
-                var circles;
-                var edges;
-
-                function triangleArea(a, b, c) {
-                  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
-                }
-
-                function lexicographic(a, b) {
-                  return b[1] - a[1]
-                      || b[0] - a[0];
-                }
-
-                function Diagram(sites, extent) {
-                  var site = sites.sort(lexicographic).pop(),
-                      x,
-                      y,
-                      circle;
-
-                  edges = [];
-                  cells = new Array(sites.length);
-                  beaches = new RedBlackTree;
-                  circles = new RedBlackTree;
-
-                  while (true) {
-                    circle = firstCircle;
-                    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
-                      if (site[0] !== x || site[1] !== y) {
-                        addBeach(site);
-                        x = site[0], y = site[1];
-                      }
-                      site = sites.pop();
-                    } else if (circle) {
-                      removeBeach(circle.arc);
-                    } else {
-                      break;
-                    }
-                  }
-
-                  sortCellHalfedges();
-
-                  if (extent) {
-                    var x0 = +extent[0][0],
-                        y0 = +extent[0][1],
-                        x1 = +extent[1][0],
-                        y1 = +extent[1][1];
-                    clipEdges(x0, y0, x1, y1);
-                    clipCells(x0, y0, x1, y1);
-                  }
-
-                  this.edges = edges;
-                  this.cells = cells;
-
-                  beaches =
-                  circles =
-                  edges =
-                  cells = null;
-                }
-
-                Diagram.prototype = {
-                  constructor: Diagram,
-
-                  polygons: function() {
-                    var edges = this.edges;
-
-                    return this.cells.map(function(cell) {
-                      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
-                      polygon.data = cell.site.data;
-                      return polygon;
-                    });
-                  },
-
-                  triangles: function() {
-                    var triangles = [],
-                        edges = this.edges;
-
-                    this.cells.forEach(function(cell, i) {
-                      var site = cell.site,
-                          halfedges = cell.halfedges,
-                          j = -1,
-                          m = halfedges.length,
-                          s0,
-                          e1 = edges[halfedges[m - 1]],
-                          s1 = e1.left === site ? e1.right : e1.left;
-
-                      while (++j < m) {
-                        s0 = s1;
-                        e1 = edges[halfedges[j]];
-                        s1 = e1.left === site ? e1.right : e1.left;
-                        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
-                          triangles.push([site.data, s0.data, s1.data]);
-                        }
-                      }
-                    });
-
-                    return triangles;
-                  },
-
-                  links: function() {
-                    return this.edges.filter(function(edge) {
-                      return edge.right;
-                    }).map(function(edge) {
-                      return {
-                        source: edge.left.data,
-                        target: edge.right.data
-                      };
-                    });
-                  },
-
-                  find: function(x, y, radius) {
-                    var that = this,
-                        i0, i1 = that._found || 0,
-                        cell = that.cells[i1] || that.cells[i1 = 0],
-                        dx = x - cell.site[0],
-                        dy = y - cell.site[1],
-                        d2 = dx * dx + dy * dy;
-
-                    do {
-                      cell = that.cells[i0 = i1], i1 = null;
-                      cell.halfedges.forEach(function(e) {
-                        var edge = that.edges[e], v = edge.left;
-                        if ((v === cell.site || !v) && !(v = edge.right)) return;
-                        var vx = x - v[0],
-                            vy = y - v[1],
-                            v2 = vx * vx + vy * vy;
-                        if (v2 < d2) d2 = v2, i1 = v.index;
-                      });
-                    } while (i1 !== null);
-
-                    that._found = i0;
-
-                    return radius == null || d2 <= radius * radius ? cell.site : null;
-                  }
-                };
-
-                var voronoi = function() {
-                  var x$$1 = x$4,
-                      y$$1 = y$4,
-                      extent = null;
-
-                  function voronoi(data) {
-                    return new Diagram(data.map(function(d, i) {
-                      var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3];
-                      s.index = i;
-                      s.data = d;
-                      return s;
-                    }), extent);
-                  }
-
-                  voronoi.polygons = function(data) {
-                    return voronoi(data).polygons();
-                  };
-
-                  voronoi.links = function(data) {
-                    return voronoi(data).links();
-                  };
-
-                  voronoi.triangles = function(data) {
-                    return voronoi(data).triangles();
-                  };
-
-                  voronoi.x = function(_) {
-                    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1;
-                  };
-
-                  voronoi.y = function(_) {
-                    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1;
-                  };
-
-                  voronoi.extent = function(_) {
-                    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
-                  };
-
-                  voronoi.size = function(_) {
-                    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
-                  };
-
-                  return voronoi;
-                };
-
-                var constant$10 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function ZoomEvent(target, type, transform) {
-                  this.target = target;
-                  this.type = type;
-                  this.transform = transform;
-                }
-
-                function Transform(k, x, y) {
-                  this.k = k;
-                  this.x = x;
-                  this.y = y;
-                }
-
-                Transform.prototype = {
-                  constructor: Transform,
-                  scale: function(k) {
-                    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
-                  },
-                  translate: function(x, y) {
-                    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
-                  },
-                  apply: function(point) {
-                    return [point[0] * this.k + this.x, point[1] * this.k + this.y];
-                  },
-                  applyX: function(x) {
-                    return x * this.k + this.x;
-                  },
-                  applyY: function(y) {
-                    return y * this.k + this.y;
-                  },
-                  invert: function(location) {
-                    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
-                  },
-                  invertX: function(x) {
-                    return (x - this.x) / this.k;
-                  },
-                  invertY: function(y) {
-                    return (y - this.y) / this.k;
-                  },
-                  rescaleX: function(x) {
-                    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
-                  },
-                  rescaleY: function(y) {
-                    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
-                  },
-                  toString: function() {
-                    return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
-                  }
-                };
-
-                var identity$6 = new Transform(1, 0, 0);
-
-                transform.prototype = Transform.prototype;
-
-                function transform(node) {
-                  return node.__zoom || identity$6;
-                }
-
-                function nopropagation$1() {
-                  exports.event.stopImmediatePropagation();
-                }
-
-                var noevent$1 = function() {
-                  exports.event.preventDefault();
-                  exports.event.stopImmediatePropagation();
-                };
-
-                // Ignore right-click, since that should open the context menu.
-                function defaultFilter$1() {
-                  return !exports.event.button;
-                }
-
-                function defaultExtent() {
-                  var e = this, w, h;
-                  if (e instanceof SVGElement) {
-                    e = e.ownerSVGElement || e;
-                    w = e.width.baseVal.value;
-                    h = e.height.baseVal.value;
-                  } else {
-                    w = e.clientWidth;
-                    h = e.clientHeight;
-                  }
-                  return [[0, 0], [w, h]];
-                }
-
-                function defaultTransform() {
-                  return this.__zoom || identity$6;
-                }
-
-                var zoom = function() {
-                  var filter = defaultFilter$1,
-                      extent = defaultExtent,
-                      k0 = 0,
-                      k1 = Infinity,
-                      x0 = -k1,
-                      x1 = k1,
-                      y0 = x0,
-                      y1 = x1,
-                      duration = 250,
-                      gestures = [],
-                      listeners = dispatch("start", "zoom", "end"),
-                      touchstarting,
-                      touchending,
-                      touchDelay = 500,
-                      wheelDelay = 150;
-
-                  function zoom(selection$$1) {
-                    selection$$1
-                        .on("wheel.zoom", wheeled)
-                        .on("mousedown.zoom", mousedowned)
-                        .on("dblclick.zoom", dblclicked)
-                        .on("touchstart.zoom", touchstarted)
-                        .on("touchmove.zoom", touchmoved)
-                        .on("touchend.zoom touchcancel.zoom", touchended)
-                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
-                        .property("__zoom", defaultTransform);
-                  }
-
-                  zoom.transform = function(collection, transform) {
-                    var selection$$1 = collection.selection ? collection.selection() : collection;
-                    selection$$1.property("__zoom", defaultTransform);
-                    if (collection !== selection$$1) {
-                      schedule(collection, transform);
-                    } else {
-                      selection$$1.interrupt().each(function() {
-                        gesture(this, arguments)
-                            .start()
-                            .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
-                            .end();
-                      });
-                    }
-                  };
-
-                  zoom.scaleBy = function(selection$$1, k) {
-                    zoom.scaleTo(selection$$1, function() {
-                      var k0 = this.__zoom.k,
-                          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-                      return k0 * k1;
-                    });
-                  };
-
-                  zoom.scaleTo = function(selection$$1, k) {
-                    zoom.transform(selection$$1, function() {
-                      var e = extent.apply(this, arguments),
-                          t0 = this.__zoom,
-                          p0 = centroid(e),
-                          p1 = t0.invert(p0),
-                          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-                      return constrain(translate(scale(t0, k1), p0, p1), e);
-                    });
-                  };
-
-                  zoom.translateBy = function(selection$$1, x, y) {
-                    zoom.transform(selection$$1, function() {
-                      return constrain(this.__zoom.translate(
-                        typeof x === "function" ? x.apply(this, arguments) : x,
-                        typeof y === "function" ? y.apply(this, arguments) : y
-                      ), extent.apply(this, arguments));
-                    });
-                  };
-
-                  function scale(transform, k) {
-                    k = Math.max(k0, Math.min(k1, k));
-                    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
-                  }
-
-                  function translate(transform, p0, p1) {
-                    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
-                    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
-                  }
-
-                  function constrain(transform, extent) {
-                    var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),
-                        dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);
-                    return dx || dy ? transform.translate(dx, dy) : transform;
-                  }
-
-                  function centroid(extent) {
-                    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
-                  }
-
-                  function schedule(transition$$1, transform, center) {
-                    transition$$1
-                        .on("start.zoom", function() { gesture(this, arguments).start(); })
-                        .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
-                        .tween("zoom", function() {
-                          var that = this,
-                              args = arguments,
-                              g = gesture(that, args),
-                              e = extent.apply(that, args),
-                              p = center || centroid(e),
-                              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
-                              a = that.__zoom,
-                              b = typeof transform === "function" ? transform.apply(that, args) : transform,
-                              i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
-                          return function(t) {
-                            if (t === 1) t = b; // Avoid rounding error on end.
-                            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
-                            g.zoom(null, t);
-                          };
-                        });
-                  }
-
-                  function gesture(that, args) {
-                    for (var i = 0, n = gestures.length, g; i < n; ++i) {
-                      if ((g = gestures[i]).that === that) {
-                        return g;
-                      }
-                    }
-                    return new Gesture(that, args);
-                  }
-
-                  function Gesture(that, args) {
-                    this.that = that;
-                    this.args = args;
-                    this.index = -1;
-                    this.active = 0;
-                    this.extent = extent.apply(that, args);
-                  }
-
-                  Gesture.prototype = {
-                    start: function() {
-                      if (++this.active === 1) {
-                        this.index = gestures.push(this) - 1;
-                        this.emit("start");
-                      }
-                      return this;
-                    },
-                    zoom: function(key, transform) {
-                      if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
-                      if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
-                      if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
-                      this.that.__zoom = transform;
-                      this.emit("zoom");
-                      return this;
-                    },
-                    end: function() {
-                      if (--this.active === 0) {
-                        gestures.splice(this.index, 1);
-                        this.index = -1;
-                        this.emit("end");
-                      }
-                      return this;
-                    },
-                    emit: function(type) {
-                      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
-                    }
-                  };
-
-                  function wheeled() {
-                    if (!filter.apply(this, arguments)) return;
-                    var g = gesture(this, arguments),
-                        t = this.__zoom,
-                        k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
-                        p = mouse(this);
-
-                    // If the mouse is in the same location as before, reuse it.
-                    // If there were recent wheel events, reset the wheel idle timeout.
-                    if (g.wheel) {
-                      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
-                        g.mouse[1] = t.invert(g.mouse[0] = p);
-                      }
-                      clearTimeout(g.wheel);
-                    }
-
-                    // If this wheel event won’t trigger a transform change, ignore it.
-                    else if (t.k === k) return;
-
-                    // Otherwise, capture the mouse point and location at the start.
-                    else {
-                      g.mouse = [p, t.invert(p)];
-                      interrupt(this);
-                      g.start();
-                    }
-
-                    noevent$1();
-                    g.wheel = setTimeout(wheelidled, wheelDelay);
-                    g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
-
-                    function wheelidled() {
-                      g.wheel = null;
-                      g.end();
-                    }
-                  }
-
-                  function mousedowned() {
-                    if (touchending || !filter.apply(this, arguments)) return;
-                    var g = gesture(this, arguments),
-                        v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
-                        p = mouse(this);
-
-                    dragDisable(exports.event.view);
-                    nopropagation$1();
-                    g.mouse = [p, this.__zoom.invert(p)];
-                    interrupt(this);
-                    g.start();
-
-                    function mousemoved() {
-                      noevent$1();
-                      g.moved = true;
-                      g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
-                    }
-
-                    function mouseupped() {
-                      v.on("mousemove.zoom mouseup.zoom", null);
-                      yesdrag(exports.event.view, g.moved);
-                      noevent$1();
-                      g.end();
-                    }
-                  }
-
-                  function dblclicked() {
-                    if (!filter.apply(this, arguments)) return;
-                    var t0 = this.__zoom,
-                        p0 = mouse(this),
-                        p1 = t0.invert(p0),
-                        k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
-                        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
-
-                    noevent$1();
-                    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
-                    else select(this).call(zoom.transform, t1);
-                  }
-
-                  function touchstarted() {
-                    if (!filter.apply(this, arguments)) return;
-                    var g = gesture(this, arguments),
-                        touches$$1 = exports.event.changedTouches,
-                        n = touches$$1.length, i, t, p;
-
-                    nopropagation$1();
-                    for (i = 0; i < n; ++i) {
-                      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
-                      p = [p, this.__zoom.invert(p), t.identifier];
-                      if (!g.touch0) g.touch0 = p;
-                      else if (!g.touch1) g.touch1 = p;
-                    }
-                    if (touchstarting) {
-                      touchstarting = clearTimeout(touchstarting);
-                      if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);
-                    }
-                    if (exports.event.touches.length === n) {
-                      touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
-                      interrupt(this);
-                      g.start();
-                    }
-                  }
-
-                  function touchmoved() {
-                    var g = gesture(this, arguments),
-                        touches$$1 = exports.event.changedTouches,
-                        n = touches$$1.length, i, t, p, l;
-
-                    noevent$1();
-                    if (touchstarting) touchstarting = clearTimeout(touchstarting);
-                    for (i = 0; i < n; ++i) {
-                      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
-                      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
-                      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
-                    }
-                    t = g.that.__zoom;
-                    if (g.touch1) {
-                      var p0 = g.touch0[0], l0 = g.touch0[1],
-                          p1 = g.touch1[0], l1 = g.touch1[1],
-                          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
-                          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
-                      t = scale(t, Math.sqrt(dp / dl));
-                      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
-                      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
-                    }
-                    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
-                    else return;
-                    g.zoom("touch", constrain(translate(t, p, l), g.extent));
-                  }
-
-                  function touchended() {
-                    var g = gesture(this, arguments),
-                        touches$$1 = exports.event.changedTouches,
-                        n = touches$$1.length, i, t;
-
-                    nopropagation$1();
-                    if (touchending) clearTimeout(touchending);
-                    touchending = setTimeout(function() { touchending = null; }, touchDelay);
-                    for (i = 0; i < n; ++i) {
-                      t = touches$$1[i];
-                      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
-                      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
-                    }
-                    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
-                    if (!g.touch0) g.end();
-                  }
-
-                  zoom.filter = function(_) {
-                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter;
-                  };
-
-                  zoom.extent = function(_) {
-                    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
-                  };
-
-                  zoom.scaleExtent = function(_) {
-                    return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
-                  };
-
-                  zoom.translateExtent = function(_) {
-                    return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
-                  };
-
-                  zoom.duration = function(_) {
-                    return arguments.length ? (duration = +_, zoom) : duration;
-                  };
-
-                  zoom.on = function() {
-                    var value = listeners.on.apply(listeners, arguments);
-                    return value === listeners ? zoom : value;
-                  };
-
-                  return zoom;
-                };
-
-                var constant$11 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var BrushEvent = function(target, type, selection) {
-                  this.target = target;
-                  this.type = type;
-                  this.selection = selection;
-                };
-
-                function nopropagation$2() {
-                  exports.event.stopImmediatePropagation();
-                }
-
-                var noevent$2 = function() {
-                  exports.event.preventDefault();
-                  exports.event.stopImmediatePropagation();
-                };
-
-                var MODE_DRAG = {name: "drag"};
-                var MODE_SPACE = {name: "space"};
-                var MODE_HANDLE = {name: "handle"};
-                var MODE_CENTER = {name: "center"};
-
-                var X = {
-                  name: "x",
-                  handles: ["e", "w"].map(type$1),
-                  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
-                  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
-                };
-
-                var Y = {
-                  name: "y",
-                  handles: ["n", "s"].map(type$1),
-                  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
-                  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
-                };
-
-                var XY = {
-                  name: "xy",
-                  handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1),
-                  input: function(xy) { return xy; },
-                  output: function(xy) { return xy; }
-                };
-
-                var cursors = {
-                  overlay: "crosshair",
-                  selection: "move",
-                  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 flipX = {
-                  e: "w",
-                  w: "e",
-                  nw: "ne",
-                  ne: "nw",
-                  se: "sw",
-                  sw: "se"
-                };
-
-                var flipY = {
-                  n: "s",
-                  s: "n",
-                  nw: "sw",
-                  ne: "se",
-                  se: "ne",
-                  sw: "nw"
-                };
-
-                var signsX = {
-                  overlay: +1,
-                  selection: +1,
-                  n: null,
-                  e: +1,
-                  s: null,
-                  w: -1,
-                  nw: -1,
-                  ne: +1,
-                  se: +1,
-                  sw: -1
-                };
-
-                var signsY = {
-                  overlay: +1,
-                  selection: +1,
-                  n: -1,
-                  e: null,
-                  s: +1,
-                  w: null,
-                  nw: -1,
-                  ne: -1,
-                  se: +1,
-                  sw: +1
-                };
-
-                function type$1(t) {
-                  return {type: t};
-                }
-
-                // Ignore right-click, since that should open the context menu.
-                function defaultFilter$2() {
-                  return !exports.event.button;
-                }
-
-                function defaultExtent$1() {
-                  var svg = this.ownerSVGElement || this;
-                  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
-                }
-
-                // Like d3.local, but with the name “__brush” rather than auto-generated.
-                function local$1(node) {
-                  while (!node.__brush) if (!(node = node.parentNode)) return;
-                  return node.__brush;
-                }
-
-                function empty$1(extent) {
-                  return extent[0][0] === extent[1][0]
-                      || extent[0][1] === extent[1][1];
-                }
-
-                function brushSelection(node) {
-                  var state = node.__brush;
-                  return state ? state.dim.output(state.selection) : null;
-                }
-
-                function brushX() {
-                  return brush$1(X);
-                }
-
-                function brushY() {
-                  return brush$1(Y);
-                }
-
-                var brush = function() {
-                  return brush$1(XY);
-                };
-
-                function brush$1(dim) {
-                  var extent = defaultExtent$1,
-                      filter = defaultFilter$2,
-                      listeners = dispatch(brush, "start", "brush", "end"),
-                      handleSize = 6,
-                      touchending;
-
-                  function brush(group) {
-                    var overlay = group
-                        .property("__brush", initialize)
-                      .selectAll(".overlay")
-                      .data([type$1("overlay")]);
-
-                    overlay.enter().append("rect")
-                        .attr("class", "overlay")
-                        .attr("pointer-events", "all")
-                        .attr("cursor", cursors.overlay)
-                      .merge(overlay)
-                        .each(function() {
-                          var extent = local$1(this).extent;
-                          select(this)
-                              .attr("x", extent[0][0])
-                              .attr("y", extent[0][1])
-                              .attr("width", extent[1][0] - extent[0][0])
-                              .attr("height", extent[1][1] - extent[0][1]);
-                        });
-
-                    group.selectAll(".selection")
-                      .data([type$1("selection")])
-                      .enter().append("rect")
-                        .attr("class", "selection")
-                        .attr("cursor", cursors.selection)
-                        .attr("fill", "#777")
-                        .attr("fill-opacity", 0.3)
-                        .attr("stroke", "#fff")
-                        .attr("shape-rendering", "crispEdges");
-
-                    var handle = group.selectAll(".handle")
-                      .data(dim.handles, function(d) { return d.type; });
-
-                    handle.exit().remove();
-
-                    handle.enter().append("rect")
-                        .attr("class", function(d) { return "handle handle--" + d.type; })
-                        .attr("cursor", function(d) { return cursors[d.type]; });
-
-                    group
-                        .each(redraw)
-                        .attr("fill", "none")
-                        .attr("pointer-events", "all")
-                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
-                        .on("mousedown.brush touchstart.brush", started);
-                  }
-
-                  brush.move = function(group, selection$$1) {
-                    if (group.selection) {
-                      group
-                          .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
-                          .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
-                          .tween("brush", function() {
-                            var that = this,
-                                state = that.__brush,
-                                emit = emitter(that, arguments),
-                                selection0 = state.selection,
-                                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
-                                i = interpolate(selection0, selection1);
-
-                            function tween(t) {
-                              state.selection = t === 1 && empty$1(selection1) ? null : i(t);
-                              redraw.call(that);
-                              emit.brush();
-                            }
-
-                            return selection0 && selection1 ? tween : tween(1);
-                          });
-                    } else {
-                      group
-                          .each(function() {
-                            var that = this,
-                                args = arguments,
-                                state = that.__brush,
-                                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
-                                emit = emitter(that, args).beforestart();
-
-                            interrupt(that);
-                            state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
-                            redraw.call(that);
-                            emit.start().brush().end();
-                          });
-                    }
-                  };
-
-                  function redraw() {
-                    var group = select(this),
-                        selection$$1 = local$1(this).selection;
-
-                    if (selection$$1) {
-                      group.selectAll(".selection")
-                          .style("display", null)
-                          .attr("x", selection$$1[0][0])
-                          .attr("y", selection$$1[0][1])
-                          .attr("width", selection$$1[1][0] - selection$$1[0][0])
-                          .attr("height", selection$$1[1][1] - selection$$1[0][1]);
-
-                      group.selectAll(".handle")
-                          .style("display", null)
-                          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
-                          .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
-                          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
-                          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
-                    }
-
-                    else {
-                      group.selectAll(".selection,.handle")
-                          .style("display", "none")
-                          .attr("x", null)
-                          .attr("y", null)
-                          .attr("width", null)
-                          .attr("height", null);
-                    }
-                  }
-
-                  function emitter(that, args) {
-                    return that.__brush.emitter || new Emitter(that, args);
-                  }
-
-                  function Emitter(that, args) {
-                    this.that = that;
-                    this.args = args;
-                    this.state = that.__brush;
-                    this.active = 0;
-                  }
-
-                  Emitter.prototype = {
-                    beforestart: function() {
-                      if (++this.active === 1) this.state.emitter = this, this.starting = true;
-                      return this;
-                    },
-                    start: function() {
-                      if (this.starting) this.starting = false, this.emit("start");
-                      return this;
-                    },
-                    brush: function() {
-                      this.emit("brush");
-                      return this;
-                    },
-                    end: function() {
-                      if (--this.active === 0) delete this.state.emitter, this.emit("end");
-                      return this;
-                    },
-                    emit: function(type) {
-                      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
-                    }
-                  };
-
-                  function started() {
-                    if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }
-                    else if (touchending) return;
-                    if (!filter.apply(this, arguments)) return;
-
-                    var that = this,
-                        type = exports.event.target.__data__.type,
-                        mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
-                        signX = dim === Y ? null : signsX[type],
-                        signY = dim === X ? null : signsY[type],
-                        state = local$1(that),
-                        extent = state.extent,
-                        selection$$1 = state.selection,
-                        W = extent[0][0], w0, w1,
-                        N = extent[0][1], n0, n1,
-                        E = extent[1][0], e0, e1,
-                        S = extent[1][1], s0, s1,
-                        dx,
-                        dy,
-                        moving,
-                        shifting = signX && signY && exports.event.shiftKey,
-                        lockX,
-                        lockY,
-                        point0 = mouse(that),
-                        point = point0,
-                        emit = emitter(that, arguments).beforestart();
-
-                    if (type === "overlay") {
-                      state.selection = selection$$1 = [
-                        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
-                        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
-                      ];
-                    } else {
-                      w0 = selection$$1[0][0];
-                      n0 = selection$$1[0][1];
-                      e0 = selection$$1[1][0];
-                      s0 = selection$$1[1][1];
-                    }
-
-                    w1 = w0;
-                    n1 = n0;
-                    e1 = e0;
-                    s1 = s0;
-
-                    var group = select(that)
-                        .attr("pointer-events", "none");
-
-                    var overlay = group.selectAll(".overlay")
-                        .attr("cursor", cursors[type]);
-
-                    if (exports.event.touches) {
-                      group
-                          .on("touchmove.brush", moved, true)
-                          .on("touchend.brush touchcancel.brush", ended, true);
-                    } else {
-                      var view = select(exports.event.view)
-                          .on("keydown.brush", keydowned, true)
-                          .on("keyup.brush", keyupped, true)
-                          .on("mousemove.brush", moved, true)
-                          .on("mouseup.brush", ended, true);
-
-                      dragDisable(exports.event.view);
-                    }
-
-                    nopropagation$2();
-                    interrupt(that);
-                    redraw.call(that);
-                    emit.start();
-
-                    function moved() {
-                      var point1 = mouse(that);
-                      if (shifting && !lockX && !lockY) {
-                        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
-                        else lockX = true;
-                      }
-                      point = point1;
-                      moving = true;
-                      noevent$2();
-                      move();
-                    }
-
-                    function move() {
-                      var t;
-
-                      dx = point[0] - point0[0];
-                      dy = point[1] - point0[1];
-
-                      switch (mode) {
-                        case MODE_SPACE:
-                        case MODE_DRAG: {
-                          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
-                          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
-                          break;
-                        }
-                        case MODE_HANDLE: {
-                          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
-                          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
-                          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
-                          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
-                          break;
-                        }
-                        case MODE_CENTER: {
-                          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
-                          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
-                          break;
-                        }
-                      }
-
-                      if (e1 < w1) {
-                        signX *= -1;
-                        t = w0, w0 = e0, e0 = t;
-                        t = w1, w1 = e1, e1 = t;
-                        if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
-                      }
-
-                      if (s1 < n1) {
-                        signY *= -1;
-                        t = n0, n0 = s0, s0 = t;
-                        t = n1, n1 = s1, s1 = t;
-                        if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
-                      }
-
-                      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
-                      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
-                      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
-
-                      if (selection$$1[0][0] !== w1
-                          || selection$$1[0][1] !== n1
-                          || selection$$1[1][0] !== e1
-                          || selection$$1[1][1] !== s1) {
-                        state.selection = [[w1, n1], [e1, s1]];
-                        redraw.call(that);
-                        emit.brush();
-                      }
-                    }
-
-                    function ended() {
-                      nopropagation$2();
-                      if (exports.event.touches) {
-                        if (exports.event.touches.length) return;
-                        if (touchending) clearTimeout(touchending);
-                        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
-                        group.on("touchmove.brush touchend.brush touchcancel.brush", null);
-                      } else {
-                        yesdrag(exports.event.view, moving);
-                        view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
-                      }
-                      group.attr("pointer-events", "all");
-                      overlay.attr("cursor", cursors.overlay);
-                      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
-                      if (empty$1(selection$$1)) state.selection = null, redraw.call(that);
-                      emit.end();
-                    }
-
-                    function keydowned() {
-                      switch (exports.event.keyCode) {
-                        case 16: { // SHIFT
-                          shifting = signX && signY;
-                          break;
-                        }
-                        case 18: { // ALT
-                          if (mode === MODE_HANDLE) {
-                            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-                            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-                            mode = MODE_CENTER;
-                            move();
-                          }
-                          break;
-                        }
-                        case 32: { // SPACE; takes priority over ALT
-                          if (mode === MODE_HANDLE || mode === MODE_CENTER) {
-                            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
-                            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
-                            mode = MODE_SPACE;
-                            overlay.attr("cursor", cursors.selection);
-                            move();
-                          }
-                          break;
-                        }
-                        default: return;
-                      }
-                      noevent$2();
-                    }
-
-                    function keyupped() {
-                      switch (exports.event.keyCode) {
-                        case 16: { // SHIFT
-                          if (shifting) {
-                            lockX = lockY = shifting = false;
-                            move();
-                          }
-                          break;
-                        }
-                        case 18: { // ALT
-                          if (mode === MODE_CENTER) {
-                            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-                            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-                            mode = MODE_HANDLE;
-                            move();
-                          }
-                          break;
-                        }
-                        case 32: { // SPACE
-                          if (mode === MODE_SPACE) {
-                            if (exports.event.altKey) {
-                              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-                              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-                              mode = MODE_CENTER;
-                            } else {
-                              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-                              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-                              mode = MODE_HANDLE;
-                            }
-                            overlay.attr("cursor", cursors[type]);
-                            move();
-                          }
-                          break;
-                        }
-                        default: return;
-                      }
-                      noevent$2();
-                    }
-                  }
-
-                  function initialize() {
-                    var state = this.__brush || {selection: null};
-                    state.extent = extent.apply(this, arguments);
-                    state.dim = dim;
-                    return state;
-                  }
-
-                  brush.extent = function(_) {
-                    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
-                  };
-
-                  brush.filter = function(_) {
-                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter;
-                  };
-
-                  brush.handleSize = function(_) {
-                    return arguments.length ? (handleSize = +_, brush) : handleSize;
-                  };
-
-                  brush.on = function() {
-                    var value = listeners.on.apply(listeners, arguments);
-                    return value === listeners ? brush : value;
-                  };
-
-                  return brush;
-                }
-
-                var cos = Math.cos;
-                var sin = Math.sin;
-                var pi$3 = Math.PI;
-                var halfPi$2 = pi$3 / 2;
-                var tau$3 = pi$3 * 2;
-                var max$1 = Math.max;
-
-                function compareValue(compare) {
-                  return function(a, b) {
-                    return compare(
-                      a.source.value + a.target.value,
-                      b.source.value + b.target.value
-                    );
-                  };
-                }
-
-                var chord = function() {
-                  var padAngle = 0,
-                      sortGroups = null,
-                      sortSubgroups = null,
-                      sortChords = null;
-
-                  function chord(matrix) {
-                    var n = matrix.length,
-                        groupSums = [],
-                        groupIndex = range(n),
-                        subgroupIndex = [],
-                        chords = [],
-                        groups = chords.groups = new Array(n),
-                        subgroups = new Array(n * n),
-                        k,
-                        x,
-                        x0,
-                        dx,
-                        i,
-                        j;
-
-                    // Compute the sum.
-                    k = 0, i = -1; while (++i < n) {
-                      x = 0, j = -1; while (++j < n) {
-                        x += matrix[i][j];
-                      }
-                      groupSums.push(x);
-                      subgroupIndex.push(range(n));
-                      k += x;
-                    }
-
-                    // Sort groups…
-                    if (sortGroups) groupIndex.sort(function(a, b) {
-                      return sortGroups(groupSums[a], groupSums[b]);
-                    });
-
-                    // Sort subgroups…
-                    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
-                      d.sort(function(a, b) {
-                        return sortSubgroups(matrix[i][a], matrix[i][b]);
-                      });
-                    });
-
-                    // Convert the sum to scaling factor for [0, 2pi].
-                    // TODO Allow start and end angle to be specified?
-                    // TODO Allow padding to be specified as percentage?
-                    k = max$1(0, tau$3 - padAngle * n) / k;
-                    dx = k ? padAngle : tau$3 / n;
-
-                    // Compute the start and end angle for each group and subgroup.
-                    // Note: Opera has a bug reordering object literal properties!
-                    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[dj * n + di] = {
-                          index: di,
-                          subindex: dj,
-                          startAngle: a0,
-                          endAngle: a1,
-                          value: v
-                        };
-                      }
-                      groups[di] = {
-                        index: di,
-                        startAngle: x0,
-                        endAngle: x,
-                        value: groupSums[di]
-                      };
-                      x += dx;
-                    }
-
-                    // Generate chords for each (non-empty) subgroup-subgroup link.
-                    i = -1; while (++i < n) {
-                      j = i - 1; while (++j < n) {
-                        var source = subgroups[j * n + i],
-                            target = subgroups[i * n + j];
-                        if (source.value || target.value) {
-                          chords.push(source.value < target.value
-                              ? {source: target, target: source}
-                              : {source: source, target: target});
-                        }
-                      }
-                    }
-
-                    return sortChords ? chords.sort(sortChords) : chords;
-                  }
-
-                  chord.padAngle = function(_) {
-                    return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
-                  };
-
-                  chord.sortGroups = function(_) {
-                    return arguments.length ? (sortGroups = _, chord) : sortGroups;
-                  };
-
-                  chord.sortSubgroups = function(_) {
-                    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
-                  };
-
-                  chord.sortChords = function(_) {
-                    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
-                  };
-
-                  return chord;
-                };
-
-                var slice$5 = Array.prototype.slice;
-
-                var constant$12 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                function defaultSource(d) {
-                  return d.source;
-                }
-
-                function defaultTarget(d) {
-                  return d.target;
-                }
-
-                function defaultRadius$1(d) {
-                  return d.radius;
-                }
-
-                function defaultStartAngle(d) {
-                  return d.startAngle;
-                }
-
-                function defaultEndAngle(d) {
-                  return d.endAngle;
-                }
-
-                var ribbon = function() {
-                  var source = defaultSource,
-                      target = defaultTarget,
-                      radius = defaultRadius$1,
-                      startAngle = defaultStartAngle,
-                      endAngle = defaultEndAngle,
-                      context = null;
-
-                  function ribbon() {
-                    var buffer,
-                        argv = slice$5.call(arguments),
-                        s = source.apply(this, argv),
-                        t = target.apply(this, argv),
-                        sr = +radius.apply(this, (argv[0] = s, argv)),
-                        sa0 = startAngle.apply(this, argv) - halfPi$2,
-                        sa1 = endAngle.apply(this, argv) - halfPi$2,
-                        sx0 = sr * cos(sa0),
-                        sy0 = sr * sin(sa0),
-                        tr = +radius.apply(this, (argv[0] = t, argv)),
-                        ta0 = startAngle.apply(this, argv) - halfPi$2,
-                        ta1 = endAngle.apply(this, argv) - halfPi$2;
-
-                    if (!context) context = buffer = path();
-
-                    context.moveTo(sx0, sy0);
-                    context.arc(0, 0, sr, sa0, sa1);
-                    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
-                      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
-                      context.arc(0, 0, tr, ta0, ta1);
-                    }
-                    context.quadraticCurveTo(0, 0, sx0, sy0);
-                    context.closePath();
-
-                    if (buffer) return context = null, buffer + "" || null;
-                  }
-
-                  ribbon.radius = function(_) {
-                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius;
-                  };
-
-                  ribbon.startAngle = function(_) {
-                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle;
-                  };
-
-                  ribbon.endAngle = function(_) {
-                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle;
-                  };
-
-                  ribbon.source = function(_) {
-                    return arguments.length ? (source = _, ribbon) : source;
-                  };
-
-                  ribbon.target = function(_) {
-                    return arguments.length ? (target = _, ribbon) : target;
-                  };
-
-                  ribbon.context = function(_) {
-                    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
-                  };
-
-                  return ribbon;
-                };
-
-                // Adds floating point numbers with twice the normal precision.
-                // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
-                // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
-                // 305–363 (1997).
-                // Code adapted from GeographicLib by Charles F. F. Karney,
-                // http://geographiclib.sourceforge.net/
-
-                var adder = function() {
-                  return new Adder;
-                };
-
-                function Adder() {
-                  this.reset();
-                }
-
-                Adder.prototype = {
-                  constructor: Adder,
-                  reset: function() {
-                    this.s = // rounded value
-                    this.t = 0; // exact error
-                  },
-                  add: function(y) {
-                    add$1(temp, y, this.t);
-                    add$1(this, temp.s, this.s);
-                    if (this.s) this.t += temp.t;
-                    else this.s = temp.t;
-                  },
-                  valueOf: function() {
-                    return this.s;
-                  }
-                };
-
-                var temp = new Adder;
-
-                function add$1(adder, a, b) {
-                  var x = adder.s = a + b,
-                      bv = x - a,
-                      av = x - bv;
-                  adder.t = (a - av) + (b - bv);
-                }
-
-                var epsilon$4 = 1e-6;
-                var epsilon2$2 = 1e-12;
-                var pi$4 = Math.PI;
-                var halfPi$3 = pi$4 / 2;
-                var quarterPi = pi$4 / 4;
-                var tau$4 = pi$4 * 2;
-
-                var degrees$1 = 180 / pi$4;
-                var radians = pi$4 / 180;
-
-                var abs = Math.abs;
-                var atan = Math.atan;
-                var atan2 = Math.atan2;
-                var cos$1 = Math.cos;
-                var ceil = Math.ceil;
-                var exp = Math.exp;
-
-                var log$1 = Math.log;
-                var pow$1 = Math.pow;
-                var sin$1 = Math.sin;
-                var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
-                var sqrt$1 = Math.sqrt;
-                var tan = Math.tan;
-
-                function acos(x) {
-                  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
-                }
-
-                function asin$1(x) {
-                  return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);
-                }
-
-                function haversin(x) {
-                  return (x = sin$1(x / 2)) * x;
-                }
-
-                function noop$2() {}
-
-                function streamGeometry(geometry, stream) {
-                  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
-                    streamGeometryType[geometry.type](geometry, stream);
-                  }
-                }
-
-                var streamObjectType = {
-                  Feature: function(feature, stream) {
-                    streamGeometry(feature.geometry, stream);
-                  },
-                  FeatureCollection: function(object, stream) {
-                    var features = object.features, i = -1, n = features.length;
-                    while (++i < n) streamGeometry(features[i].geometry, stream);
-                  }
-                };
-
-                var streamGeometryType = {
-                  Sphere: function(object, stream) {
-                    stream.sphere();
-                  },
-                  Point: function(object, stream) {
-                    object = object.coordinates;
-                    stream.point(object[0], object[1], object[2]);
-                  },
-                  MultiPoint: function(object, stream) {
-                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
-                    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
-                  },
-                  LineString: function(object, stream) {
-                    streamLine(object.coordinates, stream, 0);
-                  },
-                  MultiLineString: function(object, stream) {
-                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
-                    while (++i < n) streamLine(coordinates[i], stream, 0);
-                  },
-                  Polygon: function(object, stream) {
-                    streamPolygon(object.coordinates, stream);
-                  },
-                  MultiPolygon: function(object, stream) {
-                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
-                    while (++i < n) streamPolygon(coordinates[i], stream);
-                  },
-                  GeometryCollection: function(object, stream) {
-                    var geometries = object.geometries, i = -1, n = geometries.length;
-                    while (++i < n) streamGeometry(geometries[i], stream);
-                  }
-                };
-
-                function streamLine(coordinates, stream, closed) {
-                  var i = -1, n = coordinates.length - closed, coordinate;
-                  stream.lineStart();
-                  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
-                  stream.lineEnd();
-                }
-
-                function streamPolygon(coordinates, stream) {
-                  var i = -1, n = coordinates.length;
-                  stream.polygonStart();
-                  while (++i < n) streamLine(coordinates[i], stream, 1);
-                  stream.polygonEnd();
-                }
-
-                var geoStream = function(object, stream) {
-                  if (object && streamObjectType.hasOwnProperty(object.type)) {
-                    streamObjectType[object.type](object, stream);
-                  } else {
-                    streamGeometry(object, stream);
-                  }
-                };
-
-                var areaRingSum = adder();
-
-                var areaSum = adder();
-                var lambda00;
-                var phi00;
-                var lambda0;
-                var cosPhi0;
-                var sinPhi0;
-
-                var areaStream = {
-                  point: noop$2,
-                  lineStart: noop$2,
-                  lineEnd: noop$2,
-                  polygonStart: function() {
-                    areaRingSum.reset();
-                    areaStream.lineStart = areaRingStart;
-                    areaStream.lineEnd = areaRingEnd;
-                  },
-                  polygonEnd: function() {
-                    var areaRing = +areaRingSum;
-                    areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);
-                    this.lineStart = this.lineEnd = this.point = noop$2;
-                  },
-                  sphere: function() {
-                    areaSum.add(tau$4);
-                  }
-                };
-
-                function areaRingStart() {
-                  areaStream.point = areaPointFirst;
-                }
-
-                function areaRingEnd() {
-                  areaPoint(lambda00, phi00);
-                }
-
-                function areaPointFirst(lambda, phi) {
-                  areaStream.point = areaPoint;
-                  lambda00 = lambda, phi00 = phi;
-                  lambda *= radians, phi *= radians;
-                  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
-                }
-
-                function areaPoint(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  phi = phi / 2 + quarterPi; // half the angular distance from south pole
-
-                  // Spherical excess E for a spherical triangle with vertices: south pole,
-                  // previous point, current point.  Uses a formula derived from Cagnoli’s
-                  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
-                  var dLambda = lambda - lambda0,
-                      sdLambda = dLambda >= 0 ? 1 : -1,
-                      adLambda = sdLambda * dLambda,
-                      cosPhi = cos$1(phi),
-                      sinPhi = sin$1(phi),
-                      k = sinPhi0 * sinPhi,
-                      u = cosPhi0 * cosPhi + k * cos$1(adLambda),
-                      v = k * sdLambda * sin$1(adLambda);
-                  areaRingSum.add(atan2(v, u));
-
-                  // Advance the previous points.
-                  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
-                }
-
-                var area$2 = function(object) {
-                  areaSum.reset();
-                  geoStream(object, areaStream);
-                  return areaSum * 2;
-                };
-
-                function spherical(cartesian) {
-                  return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];
-                }
-
-                function cartesian(spherical) {
-                  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
-                  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
-                }
-
-                function cartesianDot(a, b) {
-                  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
-                }
-
-                function 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]];
-                }
-
-                // TODO return a
-                function cartesianAddInPlace(a, b) {
-                  a[0] += b[0], a[1] += b[1], a[2] += b[2];
-                }
-
-                function cartesianScale(vector, k) {
-                  return [vector[0] * k, vector[1] * k, vector[2] * k];
-                }
-
-                // TODO return d
-                function cartesianNormalizeInPlace(d) {
-                  var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
-                  d[0] /= l, d[1] /= l, d[2] /= l;
-                }
-
-                var lambda0$1;
-                var phi0;
-                var lambda1;
-                var phi1;
-                var lambda2;
-                var lambda00$1;
-                var phi00$1;
-                var p0;
-                var deltaSum = adder();
-                var ranges;
-                var range$1;
-
-                var boundsStream = {
-                  point: boundsPoint,
-                  lineStart: boundsLineStart,
-                  lineEnd: boundsLineEnd,
-                  polygonStart: function() {
-                    boundsStream.point = boundsRingPoint;
-                    boundsStream.lineStart = boundsRingStart;
-                    boundsStream.lineEnd = boundsRingEnd;
-                    deltaSum.reset();
-                    areaStream.polygonStart();
-                  },
-                  polygonEnd: function() {
-                    areaStream.polygonEnd();
-                    boundsStream.point = boundsPoint;
-                    boundsStream.lineStart = boundsLineStart;
-                    boundsStream.lineEnd = boundsLineEnd;
-                    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
-                    else if (deltaSum > epsilon$4) phi1 = 90;
-                    else if (deltaSum < -epsilon$4) phi0 = -90;
-                    range$1[0] = lambda0$1, range$1[1] = lambda1;
-                  }
-                };
-
-                function boundsPoint(lambda, phi) {
-                  ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
-                  if (phi < phi0) phi0 = phi;
-                  if (phi > phi1) phi1 = phi;
-                }
-
-                function linePoint(lambda, phi) {
-                  var p = cartesian([lambda * radians, phi * radians]);
-                  if (p0) {
-                    var normal = cartesianCross(p0, p),
-                        equatorial = [normal[1], -normal[0], 0],
-                        inflection = cartesianCross(equatorial, normal);
-                    cartesianNormalizeInPlace(inflection);
-                    inflection = spherical(inflection);
-                    var delta = lambda - lambda2,
-                        sign$$1 = delta > 0 ? 1 : -1,
-                        lambdai = inflection[0] * degrees$1 * sign$$1,
-                        phii,
-                        antimeridian = abs(delta) > 180;
-                    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
-                      phii = inflection[1] * degrees$1;
-                      if (phii > phi1) phi1 = phii;
-                    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
-                      phii = -inflection[1] * degrees$1;
-                      if (phii < phi0) phi0 = phii;
-                    } else {
-                      if (phi < phi0) phi0 = phi;
-                      if (phi > phi1) phi1 = phi;
-                    }
-                    if (antimeridian) {
-                      if (lambda < lambda2) {
-                        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
-                      } else {
-                        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
-                      }
-                    } else {
-                      if (lambda1 >= lambda0$1) {
-                        if (lambda < lambda0$1) lambda0$1 = lambda;
-                        if (lambda > lambda1) lambda1 = lambda;
-                      } else {
-                        if (lambda > lambda2) {
-                          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
-                        } else {
-                          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
-                        }
-                      }
-                    }
-                  } else {
-                    boundsPoint(lambda, phi);
-                  }
-                  p0 = p, lambda2 = lambda;
-                }
-
-                function boundsLineStart() {
-                  boundsStream.point = linePoint;
-                }
-
-                function boundsLineEnd() {
-                  range$1[0] = lambda0$1, range$1[1] = lambda1;
-                  boundsStream.point = boundsPoint;
-                  p0 = null;
-                }
-
-                function boundsRingPoint(lambda, phi) {
-                  if (p0) {
-                    var delta = lambda - lambda2;
-                    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
-                  } else {
-                    lambda00$1 = lambda, phi00$1 = phi;
-                  }
-                  areaStream.point(lambda, phi);
-                  linePoint(lambda, phi);
-                }
-
-                function boundsRingStart() {
-                  areaStream.lineStart();
-                }
-
-                function boundsRingEnd() {
-                  boundsRingPoint(lambda00$1, phi00$1);
-                  areaStream.lineEnd();
-                  if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);
-                  range$1[0] = lambda0$1, range$1[1] = lambda1;
-                  p0 = null;
-                }
-
-                // Finds the left-right distance between two longitudes.
-                // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
-                // the distance between ±180° to be 360°.
-                function angle(lambda0, lambda1) {
-                  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
-                }
-
-                function rangeCompare(a, b) {
-                  return a[0] - b[0];
-                }
-
-                function rangeContains(range, x) {
-                  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
-                }
-
-                var bounds = function(feature) {
-                  var i, n, a, b, merged, deltaMax, delta;
-
-                  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
-                  ranges = [];
-                  geoStream(feature, boundsStream);
-
-                  // First, sort ranges by their minimum longitudes.
-                  if (n = ranges.length) {
-                    ranges.sort(rangeCompare);
-
-                    // Then, merge any ranges that overlap.
-                    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
-                      b = ranges[i];
-                      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
-                        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
-                        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
-                      } else {
-                        merged.push(a = b);
-                      }
-                    }
-
-                    // Finally, find the largest gap between the merged ranges.
-                    // The final bounding box will be the inverse of this gap.
-                    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
-                      b = merged[i];
-                      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
-                    }
-                  }
-
-                  ranges = range$1 = null;
-
-                  return lambda0$1 === Infinity || phi0 === Infinity
-                      ? [[NaN, NaN], [NaN, NaN]]
-                      : [[lambda0$1, phi0], [lambda1, phi1]];
-                };
-
-                var W0;
-                var W1;
-                var X0;
-                var Y0;
-                var Z0;
-                var X1;
-                var Y1;
-                var Z1;
-                var X2;
-                var Y2;
-                var Z2;
-                var lambda00$2;
-                var phi00$2;
-                var x0;
-                var y0;
-                var z0; // previous point
-
-                var centroidStream = {
-                  sphere: noop$2,
-                  point: centroidPoint,
-                  lineStart: centroidLineStart,
-                  lineEnd: centroidLineEnd,
-                  polygonStart: function() {
-                    centroidStream.lineStart = centroidRingStart;
-                    centroidStream.lineEnd = centroidRingEnd;
-                  },
-                  polygonEnd: function() {
-                    centroidStream.lineStart = centroidLineStart;
-                    centroidStream.lineEnd = centroidLineEnd;
-                  }
-                };
-
-                // Arithmetic mean of Cartesian vectors.
-                function centroidPoint(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  var cosPhi = cos$1(phi);
-                  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
-                }
-
-                function centroidPointCartesian(x, y, z) {
-                  ++W0;
-                  X0 += (x - X0) / W0;
-                  Y0 += (y - Y0) / W0;
-                  Z0 += (z - Z0) / W0;
-                }
-
-                function centroidLineStart() {
-                  centroidStream.point = centroidLinePointFirst;
-                }
-
-                function centroidLinePointFirst(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  var cosPhi = cos$1(phi);
-                  x0 = cosPhi * cos$1(lambda);
-                  y0 = cosPhi * sin$1(lambda);
-                  z0 = sin$1(phi);
-                  centroidStream.point = centroidLinePoint;
-                  centroidPointCartesian(x0, y0, z0);
-                }
-
-                function centroidLinePoint(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  var cosPhi = cos$1(phi),
-                      x = cosPhi * cos$1(lambda),
-                      y = cosPhi * sin$1(lambda),
-                      z = sin$1(phi),
-                      w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
-                  W1 += w;
-                  X1 += w * (x0 + (x0 = x));
-                  Y1 += w * (y0 + (y0 = y));
-                  Z1 += w * (z0 + (z0 = z));
-                  centroidPointCartesian(x0, y0, z0);
-                }
-
-                function centroidLineEnd() {
-                  centroidStream.point = centroidPoint;
-                }
-
-                // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
-                // J. Applied Mechanics 42, 239 (1975).
-                function centroidRingStart() {
-                  centroidStream.point = centroidRingPointFirst;
-                }
-
-                function centroidRingEnd() {
-                  centroidRingPoint(lambda00$2, phi00$2);
-                  centroidStream.point = centroidPoint;
-                }
-
-                function centroidRingPointFirst(lambda, phi) {
-                  lambda00$2 = lambda, phi00$2 = phi;
-                  lambda *= radians, phi *= radians;
-                  centroidStream.point = centroidRingPoint;
-                  var cosPhi = cos$1(phi);
-                  x0 = cosPhi * cos$1(lambda);
-                  y0 = cosPhi * sin$1(lambda);
-                  z0 = sin$1(phi);
-                  centroidPointCartesian(x0, y0, z0);
-                }
-
-                function centroidRingPoint(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  var cosPhi = cos$1(phi),
-                      x = cosPhi * cos$1(lambda),
-                      y = cosPhi * sin$1(lambda),
-                      z = sin$1(phi),
-                      cx = y0 * z - z0 * y,
-                      cy = z0 * x - x0 * z,
-                      cz = x0 * y - y0 * x,
-                      m = sqrt$1(cx * cx + cy * cy + cz * cz),
-                      u = x0 * x + y0 * y + z0 * z,
-                      v = m && -acos(u) / m, // area weight
-                      w = atan2(m, u); // line weight
-                  X2 += v * cx;
-                  Y2 += v * cy;
-                  Z2 += v * cz;
-                  W1 += w;
-                  X1 += w * (x0 + (x0 = x));
-                  Y1 += w * (y0 + (y0 = y));
-                  Z1 += w * (z0 + (z0 = z));
-                  centroidPointCartesian(x0, y0, z0);
-                }
-
-                var centroid$1 = function(object) {
-                  W0 = W1 =
-                  X0 = Y0 = Z0 =
-                  X1 = Y1 = Z1 =
-                  X2 = Y2 = Z2 = 0;
-                  geoStream(object, centroidStream);
-
-                  var x = X2,
-                      y = Y2,
-                      z = Z2,
-                      m = x * x + y * y + z * z;
-
-                  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
-                  if (m < epsilon2$2) {
-                    x = X1, y = Y1, z = Z1;
-                    // If the feature has zero length, fall back to arithmetic mean of point vectors.
-                    if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;
-                    m = x * x + y * y + z * z;
-                    // If the feature still has an undefined ccentroid, then return.
-                    if (m < epsilon2$2) return [NaN, NaN];
-                  }
-
-                  return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];
-                };
-
-                var constant$13 = function(x) {
-                  return function() {
-                    return x;
-                  };
-                };
-
-                var compose = function(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 rotationIdentity(lambda, phi) {
-                  return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
-                }
-
-                rotationIdentity.invert = rotationIdentity;
-
-                function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
-                  return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
-                    : rotationLambda(deltaLambda))
-                    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
-                    : rotationIdentity);
-                }
-
-                function forwardRotationLambda(deltaLambda) {
-                  return function(lambda, phi) {
-                    return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
-                  };
-                }
-
-                function rotationLambda(deltaLambda) {
-                  var rotation = forwardRotationLambda(deltaLambda);
-                  rotation.invert = forwardRotationLambda(-deltaLambda);
-                  return rotation;
-                }
-
-                function rotationPhiGamma(deltaPhi, deltaGamma) {
-                  var cosDeltaPhi = cos$1(deltaPhi),
-                      sinDeltaPhi = sin$1(deltaPhi),
-                      cosDeltaGamma = cos$1(deltaGamma),
-                      sinDeltaGamma = sin$1(deltaGamma);
-
-                  function rotation(lambda, phi) {
-                    var cosPhi = cos$1(phi),
-                        x = cos$1(lambda) * cosPhi,
-                        y = sin$1(lambda) * cosPhi,
-                        z = sin$1(phi),
-                        k = z * cosDeltaPhi + x * sinDeltaPhi;
-                    return [
-                      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
-                      asin$1(k * cosDeltaGamma + y * sinDeltaGamma)
-                    ];
-                  }
-
-                  rotation.invert = function(lambda, phi) {
-                    var cosPhi = cos$1(phi),
-                        x = cos$1(lambda) * cosPhi,
-                        y = sin$1(lambda) * cosPhi,
-                        z = sin$1(phi),
-                        k = z * cosDeltaGamma - y * sinDeltaGamma;
-                    return [
-                      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
-                      asin$1(k * cosDeltaPhi - x * sinDeltaPhi)
-                    ];
-                  };
-
-                  return rotation;
-                }
-
-                var rotation = function(rotate) {
-                  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
-
-                  function forward(coordinates) {
-                    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
-                    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
-                  }
-
-                  forward.invert = function(coordinates) {
-                    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
-                    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
-                  };
-
-                  return forward;
-                };
-
-                // Generates a circle centered at [0°, 0°], with a given radius and precision.
-                function circleStream(stream, radius, delta, direction, t0, t1) {
-                  if (!delta) return;
-                  var cosRadius = cos$1(radius),
-                      sinRadius = sin$1(radius),
-                      step = direction * delta;
-                  if (t0 == null) {
-                    t0 = radius + direction * tau$4;
-                    t1 = radius - step / 2;
-                  } else {
-                    t0 = circleRadius(cosRadius, t0);
-                    t1 = circleRadius(cosRadius, t1);
-                    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;
-                  }
-                  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
-                    point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
-                    stream.point(point[0], point[1]);
-                  }
-                }
-
-                // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
-                function circleRadius(cosRadius, point) {
-                  point = cartesian(point), point[0] -= cosRadius;
-                  cartesianNormalizeInPlace(point);
-                  var radius = acos(-point[1]);
-                  return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;
-                }
-
-                var circle$1 = function() {
-                  var center = constant$13([0, 0]),
-                      radius = constant$13(90),
-                      precision = constant$13(6),
-                      ring,
-                      rotate,
-                      stream = {point: point};
-
-                  function point(x, y) {
-                    ring.push(x = rotate(x, y));
-                    x[0] *= degrees$1, x[1] *= degrees$1;
-                  }
-
-                  function circle() {
-                    var c = center.apply(this, arguments),
-                        r = radius.apply(this, arguments) * radians,
-                        p = precision.apply(this, arguments) * radians;
-                    ring = [];
-                    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
-                    circleStream(stream, r, p, 1);
-                    c = {type: "Polygon", coordinates: [ring]};
-                    ring = rotate = null;
-                    return c;
-                  }
-
-                  circle.center = function(_) {
-                    return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center;
-                  };
-
-                  circle.radius = function(_) {
-                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius;
-                  };
-
-                  circle.precision = function(_) {
-                    return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision;
-                  };
-
-                  return circle;
-                };
-
-                var clipBuffer = function() {
-                  var lines = [],
-                      line;
-                  return {
-                    point: function(x, y) {
-                      line.push([x, y]);
-                    },
-                    lineStart: function() {
-                      lines.push(line = []);
-                    },
-                    lineEnd: noop$2,
-                    rejoin: function() {
-                      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
-                    },
-                    result: function() {
-                      var result = lines;
-                      lines = [];
-                      line = null;
-                      return result;
-                    }
-                  };
-                };
-
-                var clipLine = function(a, b, x0, y0, x1, y1) {
-                  var ax = a[0],
-                      ay = a[1],
-                      bx = b[0],
-                      by = b[1],
-                      t0 = 0,
-                      t1 = 1,
-                      dx = bx - ax,
-                      dy = by - ay,
-                      r;
-
-                  r = x0 - ax;
-                  if (!dx && r > 0) return;
-                  r /= dx;
-                  if (dx < 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  } else if (dx > 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  }
-
-                  r = x1 - ax;
-                  if (!dx && r < 0) return;
-                  r /= dx;
-                  if (dx < 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  } else if (dx > 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  }
-
-                  r = y0 - ay;
-                  if (!dy && r > 0) return;
-                  r /= dy;
-                  if (dy < 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  } else if (dy > 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  }
-
-                  r = y1 - ay;
-                  if (!dy && r < 0) return;
-                  r /= dy;
-                  if (dy < 0) {
-                    if (r > t1) return;
-                    if (r > t0) t0 = r;
-                  } else if (dy > 0) {
-                    if (r < t0) return;
-                    if (r < t1) t1 = r;
-                  }
-
-                  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
-                  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
-                  return true;
-                };
-
-                var pointEqual = function(a, b) {
-                  return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;
-                };
-
-                function Intersection(point, points, other, entry) {
-                  this.x = point;
-                  this.z = points;
-                  this.o = other; // another intersection
-                  this.e = entry; // is an entry?
-                  this.v = false; // visited
-                  this.n = this.p = null; // next & previous
-                }
-
-                // A generalized polygon clipping algorithm: given a polygon that has been cut
-                // into its visible line segments, and rejoins the segments by interpolating
-                // along the clip edge.
-                var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
-                  var subject = [],
-                      clip = [],
-                      i,
-                      n;
-
-                  segments.forEach(function(segment) {
-                    if ((n = segment.length - 1) <= 0) return;
-                    var n, p0 = segment[0], p1 = segment[n], x;
-
-                    // If the first and last points of a segment are coincident, then treat as a
-                    // closed ring. TODO if all rings are closed, then the winding order of the
-                    // exterior ring should be checked.
-                    if (pointEqual(p0, p1)) {
-                      stream.lineStart();
-                      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
-                      stream.lineEnd();
-                      return;
-                    }
-
-                    subject.push(x = new Intersection(p0, segment, null, true));
-                    clip.push(x.o = new Intersection(p0, null, x, false));
-                    subject.push(x = new Intersection(p1, segment, null, false));
-                    clip.push(x.o = new Intersection(p1, null, x, true));
-                  });
-
-                  if (!subject.length) return;
-
-                  clip.sort(compareIntersection);
-                  link$1(subject);
-                  link$1(clip);
-
-                  for (i = 0, n = clip.length; i < n; ++i) {
-                    clip[i].e = startInside = !startInside;
-                  }
-
-                  var start = subject[0],
-                      points,
-                      point;
-
-                  while (1) {
-                    // Find first unvisited intersection.
-                    var current = start,
-                        isSubject = true;
-                    while (current.v) if ((current = current.n) === start) return;
-                    points = current.z;
-                    stream.lineStart();
-                    do {
-                      current.v = current.o.v = true;
-                      if (current.e) {
-                        if (isSubject) {
-                          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
-                        } else {
-                          interpolate(current.x, current.n.x, 1, stream);
-                        }
-                        current = current.n;
-                      } else {
-                        if (isSubject) {
-                          points = current.p.z;
-                          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
-                        } else {
-                          interpolate(current.x, current.p.x, -1, stream);
-                        }
-                        current = current.p;
-                      }
-                      current = current.o;
-                      points = current.z;
-                      isSubject = !isSubject;
-                    } while (!current.v);
-                    stream.lineEnd();
-                  }
-                };
-
-                function link$1(array) {
-                  if (!(n = array.length)) return;
-                  var n,
-                      i = 0,
-                      a = array[0],
-                      b;
-                  while (++i < n) {
-                    a.n = b = array[i];
-                    b.p = a;
-                    a = b;
-                  }
-                  a.n = b = array[0];
-                  b.p = a;
-                }
-
-                var clipMax = 1e9;
-                var clipMin = -clipMax;
-
-                // TODO Use d3-polygon’s polygonContains here for the ring check?
-                // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
-
-                function clipExtent(x0, y0, x1, y1) {
-
-                  function visible(x, y) {
-                    return x0 <= x && x <= x1 && y0 <= y && y <= y1;
-                  }
-
-                  function interpolate(from, to, direction, stream) {
-                    var a = 0, a1 = 0;
-                    if (from == null
-                        || (a = corner(from, direction)) !== (a1 = corner(to, direction))
-                        || comparePoint(from, to) < 0 ^ direction > 0) {
-                      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
-                      while ((a = (a + direction + 4) % 4) !== a1);
-                    } else {
-                      stream.point(to[0], to[1]);
-                    }
-                  }
-
-                  function corner(p, direction) {
-                    return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3
-                        : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1
-                        : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0
-                        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
-                  }
-
-                  function compareIntersection(a, b) {
-                    return comparePoint(a.x, b.x);
-                  }
-
-                  function comparePoint(a, b) {
-                    var ca = corner(a, 1),
-                        cb = corner(b, 1);
-                    return ca !== cb ? ca - cb
-                        : ca === 0 ? b[1] - a[1]
-                        : ca === 1 ? a[0] - b[0]
-                        : ca === 2 ? a[1] - b[1]
-                        : b[0] - a[0];
-                  }
-
-                  return function(stream) {
-                    var activeStream = stream,
-                        bufferStream = clipBuffer(),
-                        segments,
-                        polygon,
-                        ring,
-                        x__, y__, v__, // first point
-                        x_, y_, v_, // previous point
-                        first,
-                        clean;
-
-                    var clipStream = {
-                      point: point,
-                      lineStart: lineStart,
-                      lineEnd: lineEnd,
-                      polygonStart: polygonStart,
-                      polygonEnd: polygonEnd
-                    };
-
-                    function point(x, y) {
-                      if (visible(x, y)) activeStream.point(x, y);
-                    }
-
-                    function polygonInside() {
-                      var winding = 0;
-
-                      for (var i = 0, n = polygon.length; i < n; ++i) {
-                        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
-                          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
-                          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
-                          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
-                        }
-                      }
-
-                      return winding;
-                    }
-
-                    // Buffer geometry within a polygon and then clip it en masse.
-                    function polygonStart() {
-                      activeStream = bufferStream, segments = [], polygon = [], clean = true;
-                    }
-
-                    function polygonEnd() {
-                      var startInside = polygonInside(),
-                          cleanInside = clean && startInside,
-                          visible = (segments = merge(segments)).length;
-                      if (cleanInside || visible) {
-                        stream.polygonStart();
-                        if (cleanInside) {
-                          stream.lineStart();
-                          interpolate(null, null, 1, stream);
-                          stream.lineEnd();
-                        }
-                        if (visible) {
-                          clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
-                        }
-                        stream.polygonEnd();
-                      }
-                      activeStream = stream, segments = polygon = ring = null;
-                    }
-
-                    function lineStart() {
-                      clipStream.point = linePoint;
-                      if (polygon) polygon.push(ring = []);
-                      first = true;
-                      v_ = false;
-                      x_ = y_ = NaN;
-                    }
-
-                    // TODO rather than special-case polygons, simply handle them separately.
-                    // Ideally, coincident intersection points should be jittered to avoid
-                    // clipping issues.
-                    function lineEnd() {
-                      if (segments) {
-                        linePoint(x__, y__);
-                        if (v__ && v_) bufferStream.rejoin();
-                        segments.push(bufferStream.result());
-                      }
-                      clipStream.point = point;
-                      if (v_) activeStream.lineEnd();
-                    }
-
-                    function linePoint(x, y) {
-                      var v = visible(x, y);
-                      if (polygon) ring.push([x, y]);
-                      if (first) {
-                        x__ = x, y__ = y, v__ = v;
-                        first = false;
-                        if (v) {
-                          activeStream.lineStart();
-                          activeStream.point(x, y);
-                        }
-                      } else {
-                        if (v && v_) activeStream.point(x, y);
-                        else {
-                          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
-                              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
-                          if (clipLine(a, b, x0, y0, x1, y1)) {
-                            if (!v_) {
-                              activeStream.lineStart();
-                              activeStream.point(a[0], a[1]);
-                            }
-                            activeStream.point(b[0], b[1]);
-                            if (!v) activeStream.lineEnd();
-                            clean = false;
-                          } else if (v) {
-                            activeStream.lineStart();
-                            activeStream.point(x, y);
-                            clean = false;
-                          }
-                        }
-                      }
-                      x_ = x, y_ = y, v_ = v;
-                    }
-
-                    return clipStream;
-                  };
-                }
-
-                var extent$1 = function() {
-                  var x0 = 0,
-                      y0 = 0,
-                      x1 = 960,
-                      y1 = 500,
-                      cache,
-                      cacheStream,
-                      clip;
-
-                  return clip = {
-                    stream: function(stream) {
-                      return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
-                    },
-                    extent: function(_) {
-                      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
-                    }
-                  };
-                };
-
-                var lengthSum = adder();
-                var lambda0$2;
-                var sinPhi0$1;
-                var cosPhi0$1;
-
-                var lengthStream = {
-                  sphere: noop$2,
-                  point: noop$2,
-                  lineStart: lengthLineStart,
-                  lineEnd: noop$2,
-                  polygonStart: noop$2,
-                  polygonEnd: noop$2
-                };
-
-                function lengthLineStart() {
-                  lengthStream.point = lengthPointFirst;
-                  lengthStream.lineEnd = lengthLineEnd;
-                }
-
-                function lengthLineEnd() {
-                  lengthStream.point = lengthStream.lineEnd = noop$2;
-                }
-
-                function lengthPointFirst(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
-                  lengthStream.point = lengthPoint;
-                }
-
-                function lengthPoint(lambda, phi) {
-                  lambda *= radians, phi *= radians;
-                  var sinPhi = sin$1(phi),
-                      cosPhi = cos$1(phi),
-                      delta = abs(lambda - lambda0$2),
-                      cosDelta = cos$1(delta),
-                      sinDelta = sin$1(delta),
-                      x = cosPhi * sinDelta,
-                      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
-                      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
-                  lengthSum.add(atan2(sqrt$1(x * x + y * y), z));
-                  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
-                }
-
-                var length$2 = function(object) {
-                  lengthSum.reset();
-                  geoStream(object, lengthStream);
-                  return +lengthSum;
-                };
-
-                var coordinates = [null, null];
-                var object$1 = {type: "LineString", coordinates: coordinates};
-
-                var distance = function(a, b) {
-                  coordinates[0] = a;
-                  coordinates[1] = b;
-                  return length$2(object$1);
-                };
-
-                function graticuleX(y0, y1, dy) {
-                  var y = range(y0, y1 - epsilon$4, dy).concat(y1);
-                  return function(x) { return y.map(function(y) { return [x, y]; }); };
-                }
-
-                function graticuleY(x0, x1, dx) {
-                  var x = range(x0, x1 - epsilon$4, dx).concat(x1);
-                  return function(y) { return x.map(function(x) { return [x, y]; }); };
-                }
-
-                function graticule() {
-                  var x1, x0, X1, X0,
-                      y1, y0, Y1, Y0,
-                      dx = 10, dy = dx, DX = 90, DY = 360,
-                      x, y, X, Y,
-                      precision = 2.5;
-
-                  function graticule() {
-                    return {type: "MultiLineString", coordinates: lines()};
-                  }
-
-                  function lines() {
-                    return range(ceil(X0 / DX) * DX, X1, DX).map(X)
-                        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
-                        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))
-                        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).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 graticule.extentMinor();
-                    return graticule.extentMajor(_).extentMinor(_);
-                  };
-
-                  graticule.extentMajor = 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.extentMinor = 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 graticule.stepMinor();
-                    return graticule.stepMajor(_).stepMinor(_);
-                  };
-
-                  graticule.stepMajor = function(_) {
-                    if (!arguments.length) return [DX, DY];
-                    DX = +_[0], DY = +_[1];
-                    return graticule;
-                  };
-
-                  graticule.stepMinor = function(_) {
-                    if (!arguments.length) return [dx, dy];
-                    dx = +_[0], dy = +_[1];
-                    return graticule;
-                  };
-
-                  graticule.precision = function(_) {
-                    if (!arguments.length) return precision;
-                    precision = +_;
-                    x = graticuleX(y0, y1, 90);
-                    y = graticuleY(x0, x1, precision);
-                    X = graticuleX(Y0, Y1, 90);
-                    Y = graticuleY(X0, X1, precision);
-                    return graticule;
-                  };
-
-                  return graticule
-                      .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])
-                      .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);
-                }
-
-                function graticule10() {
-                  return graticule()();
-                }
-
-                var interpolate$2 = function(a, b) {
-                  var x0 = a[0] * radians,
-                      y0 = a[1] * radians,
-                      x1 = b[0] * radians,
-                      y1 = b[1] * radians,
-                      cy0 = cos$1(y0),
-                      sy0 = sin$1(y0),
-                      cy1 = cos$1(y1),
-                      sy1 = sin$1(y1),
-                      kx0 = cy0 * cos$1(x0),
-                      ky0 = cy0 * sin$1(x0),
-                      kx1 = cy1 * cos$1(x1),
-                      ky1 = cy1 * sin$1(x1),
-                      d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
-                      k = sin$1(d);
-
-                  var interpolate = d ? function(t) {
-                    var B = sin$1(t *= d) / k,
-                        A = sin$1(d - t) / k,
-                        x = A * kx0 + B * kx1,
-                        y = A * ky0 + B * ky1,
-                        z = A * sy0 + B * sy1;
-                    return [
-                      atan2(y, x) * degrees$1,
-                      atan2(z, sqrt$1(x * x + y * y)) * degrees$1
-                    ];
-                  } : function() {
-                    return [x0 * degrees$1, y0 * degrees$1];
-                  };
-
-                  interpolate.distance = d;
-
-                  return interpolate;
-                };
-
-                var identity$7 = function(x) {
-                  return x;
-                };
-
-                var areaSum$1 = adder();
-                var areaRingSum$1 = adder();
-                var x00;
-                var y00;
-                var x0$1;
-                var y0$1;
-
-                var areaStream$1 = {
-                  point: noop$2,
-                  lineStart: noop$2,
-                  lineEnd: noop$2,
-                  polygonStart: function() {
-                    areaStream$1.lineStart = areaRingStart$1;
-                    areaStream$1.lineEnd = areaRingEnd$1;
-                  },
-                  polygonEnd: function() {
-                    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;
-                    areaSum$1.add(abs(areaRingSum$1));
-                    areaRingSum$1.reset();
-                  },
-                  result: function() {
-                    var area = areaSum$1 / 2;
-                    areaSum$1.reset();
-                    return area;
-                  }
-                };
-
-                function areaRingStart$1() {
-                  areaStream$1.point = areaPointFirst$1;
-                }
-
-                function areaPointFirst$1(x, y) {
-                  areaStream$1.point = areaPoint$1;
-                  x00 = x0$1 = x, y00 = y0$1 = y;
-                }
-
-                function areaPoint$1(x, y) {
-                  areaRingSum$1.add(y0$1 * x - x0$1 * y);
-                  x0$1 = x, y0$1 = y;
-                }
-
-                function areaRingEnd$1() {
-                  areaPoint$1(x00, y00);
-                }
-
-                var x0$2 = Infinity;
-                var y0$2 = x0$2;
-                var x1 = -x0$2;
-                var y1 = x1;
-
-                var boundsStream$1 = {
-                  point: boundsPoint$1,
-                  lineStart: noop$2,
-                  lineEnd: noop$2,
-                  polygonStart: noop$2,
-                  polygonEnd: noop$2,
-                  result: function() {
-                    var bounds = [[x0$2, y0$2], [x1, y1]];
-                    x1 = y1 = -(y0$2 = x0$2 = Infinity);
-                    return bounds;
-                  }
-                };
-
-                function boundsPoint$1(x, y) {
-                  if (x < x0$2) x0$2 = x;
-                  if (x > x1) x1 = x;
-                  if (y < y0$2) y0$2 = y;
-                  if (y > y1) y1 = y;
-                }
-
-                // TODO Enforce positive area for exterior, negative area for interior?
-
-                var X0$1 = 0;
-                var Y0$1 = 0;
-                var Z0$1 = 0;
-                var X1$1 = 0;
-                var Y1$1 = 0;
-                var Z1$1 = 0;
-                var X2$1 = 0;
-                var Y2$1 = 0;
-                var Z2$1 = 0;
-                var x00$1;
-                var y00$1;
-                var x0$3;
-                var y0$3;
-
-                var centroidStream$1 = {
-                  point: centroidPoint$1,
-                  lineStart: centroidLineStart$1,
-                  lineEnd: centroidLineEnd$1,
-                  polygonStart: function() {
-                    centroidStream$1.lineStart = centroidRingStart$1;
-                    centroidStream$1.lineEnd = centroidRingEnd$1;
-                  },
-                  polygonEnd: function() {
-                    centroidStream$1.point = centroidPoint$1;
-                    centroidStream$1.lineStart = centroidLineStart$1;
-                    centroidStream$1.lineEnd = centroidLineEnd$1;
-                  },
-                  result: function() {
-                    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
-                        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
-                        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
-                        : [NaN, NaN];
-                    X0$1 = Y0$1 = Z0$1 =
-                    X1$1 = Y1$1 = Z1$1 =
-                    X2$1 = Y2$1 = Z2$1 = 0;
-                    return centroid;
-                  }
-                };
-
-                function centroidPoint$1(x, y) {
-                  X0$1 += x;
-                  Y0$1 += y;
-                  ++Z0$1;
-                }
-
-                function centroidLineStart$1() {
-                  centroidStream$1.point = centroidPointFirstLine;
-                }
-
-                function centroidPointFirstLine(x, y) {
-                  centroidStream$1.point = centroidPointLine;
-                  centroidPoint$1(x0$3 = x, y0$3 = y);
-                }
-
-                function centroidPointLine(x, y) {
-                  var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);
-                  X1$1 += z * (x0$3 + x) / 2;
-                  Y1$1 += z * (y0$3 + y) / 2;
-                  Z1$1 += z;
-                  centroidPoint$1(x0$3 = x, y0$3 = y);
-                }
-
-                function centroidLineEnd$1() {
-                  centroidStream$1.point = centroidPoint$1;
-                }
-
-                function centroidRingStart$1() {
-                  centroidStream$1.point = centroidPointFirstRing;
-                }
-
-                function centroidRingEnd$1() {
-                  centroidPointRing(x00$1, y00$1);
-                }
-
-                function centroidPointFirstRing(x, y) {
-                  centroidStream$1.point = centroidPointRing;
-                  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
-                }
-
-                function centroidPointRing(x, y) {
-                  var dx = x - x0$3,
-                      dy = y - y0$3,
-                      z = sqrt$1(dx * dx + dy * dy);
-
-                  X1$1 += z * (x0$3 + x) / 2;
-                  Y1$1 += z * (y0$3 + y) / 2;
-                  Z1$1 += z;
-
-                  z = y0$3 * x - x0$3 * y;
-                  X2$1 += z * (x0$3 + x);
-                  Y2$1 += z * (y0$3 + y);
-                  Z2$1 += z * 3;
-                  centroidPoint$1(x0$3 = x, y0$3 = y);
-                }
-
-                function PathContext(context) {
-                  this._context = context;
-                }
-
-                PathContext.prototype = {
-                  _radius: 4.5,
-                  pointRadius: function(_) {
-                    return this._radius = _, this;
-                  },
-                  polygonStart: function() {
-                    this._line = 0;
-                  },
-                  polygonEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line === 0) this._context.closePath();
-                    this._point = NaN;
-                  },
-                  point: function(x, y) {
-                    switch (this._point) {
-                      case 0: {
-                        this._context.moveTo(x, y);
-                        this._point = 1;
-                        break;
-                      }
-                      case 1: {
-                        this._context.lineTo(x, y);
-                        break;
-                      }
-                      default: {
-                        this._context.moveTo(x + this._radius, y);
-                        this._context.arc(x, y, this._radius, 0, tau$4);
-                        break;
-                      }
-                    }
-                  },
-                  result: noop$2
-                };
-
-                function PathString() {
-                  this._string = [];
-                }
-
-                PathString.prototype = {
-                  _circle: circle$2(4.5),
-                  pointRadius: function(_) {
-                    return this._circle = circle$2(_), this;
-                  },
-                  polygonStart: function() {
-                    this._line = 0;
-                  },
-                  polygonEnd: function() {
-                    this._line = NaN;
-                  },
-                  lineStart: function() {
-                    this._point = 0;
-                  },
-                  lineEnd: function() {
-                    if (this._line === 0) this._string.push("Z");
-                    this._point = NaN;
-                  },
-                  point: function(x, y) {
-                    switch (this._point) {
-                      case 0: {
-                        this._string.push("M", x, ",", y);
-                        this._point = 1;
-                        break;
-                      }
-                      case 1: {
-                        this._string.push("L", x, ",", y);
-                        break;
-                      }
-                      default: {
-                        this._string.push("M", x, ",", y, this._circle);
-                        break;
-                      }
-                    }
-                  },
-                  result: function() {
-                    if (this._string.length) {
-                      var result = this._string.join("");
-                      this._string = [];
-                      return result;
-                    }
-                  }
-                };
-
-                function circle$2(radius) {
-                  return "m0," + radius
-                      + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
-                      + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
-                      + "z";
-                }
-
-                var index$3 = function(projection, context) {
-                  var pointRadius = 4.5,
-                      projectionStream,
-                      contextStream;
-
-                  function path(object) {
-                    if (object) {
-                      if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
-                      geoStream(object, projectionStream(contextStream));
-                    }
-                    return contextStream.result();
-                  }
-
-                  path.area = function(object) {
-                    geoStream(object, projectionStream(areaStream$1));
-                    return areaStream$1.result();
-                  };
-
-                  path.bounds = function(object) {
-                    geoStream(object, projectionStream(boundsStream$1));
-                    return boundsStream$1.result();
-                  };
-
-                  path.centroid = function(object) {
-                    geoStream(object, projectionStream(centroidStream$1));
-                    return centroidStream$1.result();
-                  };
-
-                  path.projection = function(_) {
-                    return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;
-                  };
-
-                  path.context = function(_) {
-                    if (!arguments.length) return context;
-                    contextStream = (context = _) == null ? new PathString : new PathContext(_);
-                    if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
-                    return path;
-                  };
-
-                  path.pointRadius = function(_) {
-                    if (!arguments.length) return pointRadius;
-                    pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
-                    return path;
-                  };
-
-                  return path.projection(projection).context(context);
-                };
-
-                var sum$2 = adder();
-
-                var polygonContains = function(polygon, point) {
-                  var lambda = point[0],
-                      phi = point[1],
-                      normal = [sin$1(lambda), -cos$1(lambda), 0],
-                      angle = 0,
-                      winding = 0;
-
-                  sum$2.reset();
-
-                  for (var i = 0, n = polygon.length; i < n; ++i) {
-                    if (!(m = (ring = polygon[i]).length)) continue;
-                    var ring,
-                        m,
-                        point0 = ring[m - 1],
-                        lambda0 = point0[0],
-                        phi0 = point0[1] / 2 + quarterPi,
-                        sinPhi0 = sin$1(phi0),
-                        cosPhi0 = cos$1(phi0);
-
-                    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
-                      var point1 = ring[j],
-                          lambda1 = point1[0],
-                          phi1 = point1[1] / 2 + quarterPi,
-                          sinPhi1 = sin$1(phi1),
-                          cosPhi1 = cos$1(phi1),
-                          delta = lambda1 - lambda0,
-                          sign$$1 = delta >= 0 ? 1 : -1,
-                          absDelta = sign$$1 * delta,
-                          antimeridian = absDelta > pi$4,
-                          k = sinPhi0 * sinPhi1;
-
-                      sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
-                      angle += antimeridian ? delta + sign$$1 * tau$4 : delta;
-
-                      // Are the longitudes either side of the point’s meridian (lambda),
-                      // and are the latitudes smaller than the parallel (phi)?
-                      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
-                        var arc = cartesianCross(cartesian(point0), cartesian(point1));
-                        cartesianNormalizeInPlace(arc);
-                        var intersection = cartesianCross(normal, arc);
-                        cartesianNormalizeInPlace(intersection);
-                        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);
-                        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
-                          winding += antimeridian ^ delta >= 0 ? 1 : -1;
-                        }
-                      }
-                    }
-                  }
-
-                  // First, determine whether the South pole is inside or outside:
-                  //
-                  // It is inside if:
-                  // * the polygon winds around it in a clockwise direction.
-                  // * the polygon does not (cumulatively) wind around it, but has a negative
-                  //   (counter-clockwise) area.
-                  //
-                  // Second, count the (signed) number of times a segment crosses a lambda
-                  // from the point to the South pole.  If it is zero, then the point is the
-                  // same side as the South pole.
-
-                  return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);
-                };
-
-                var clip = function(pointVisible, clipLine, interpolate, start) {
-                  return function(rotate, sink) {
-                    var line = clipLine(sink),
-                        rotatedStart = rotate.invert(start[0], start[1]),
-                        ringBuffer = clipBuffer(),
-                        ringSink = clipLine(ringBuffer),
-                        polygonStarted = false,
-                        polygon,
-                        segments,
-                        ring;
-
-                    var clip = {
-                      point: point,
-                      lineStart: lineStart,
-                      lineEnd: lineEnd,
-                      polygonStart: function() {
-                        clip.point = pointRing;
-                        clip.lineStart = ringStart;
-                        clip.lineEnd = ringEnd;
-                        segments = [];
-                        polygon = [];
-                      },
-                      polygonEnd: function() {
-                        clip.point = point;
-                        clip.lineStart = lineStart;
-                        clip.lineEnd = lineEnd;
-                        segments = merge(segments);
-                        var startInside = polygonContains(polygon, rotatedStart);
-                        if (segments.length) {
-                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-                          clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
-                        } else if (startInside) {
-                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-                          sink.lineStart();
-                          interpolate(null, null, 1, sink);
-                          sink.lineEnd();
-                        }
-                        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
-                        segments = polygon = null;
-                      },
-                      sphere: function() {
-                        sink.polygonStart();
-                        sink.lineStart();
-                        interpolate(null, null, 1, sink);
-                        sink.lineEnd();
-                        sink.polygonEnd();
-                      }
-                    };
-
-                    function point(lambda, phi) {
-                      var point = rotate(lambda, phi);
-                      if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
-                    }
-
-                    function pointLine(lambda, phi) {
-                      var point = rotate(lambda, phi);
-                      line.point(point[0], point[1]);
-                    }
-
-                    function lineStart() {
-                      clip.point = pointLine;
-                      line.lineStart();
-                    }
-
-                    function lineEnd() {
-                      clip.point = point;
-                      line.lineEnd();
-                    }
-
-                    function pointRing(lambda, phi) {
-                      ring.push([lambda, phi]);
-                      var point = rotate(lambda, phi);
-                      ringSink.point(point[0], point[1]);
-                    }
-
-                    function ringStart() {
-                      ringSink.lineStart();
-                      ring = [];
-                    }
-
-                    function ringEnd() {
-                      pointRing(ring[0][0], ring[0][1]);
-                      ringSink.lineEnd();
-
-                      var clean = ringSink.clean(),
-                          ringSegments = ringBuffer.result(),
-                          i, n = ringSegments.length, m,
-                          segment,
-                          point;
-
-                      ring.pop();
-                      polygon.push(ring);
-                      ring = null;
-
-                      if (!n) return;
-
-                      // No intersections.
-                      if (clean & 1) {
-                        segment = ringSegments[0];
-                        if ((m = segment.length - 1) > 0) {
-                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-                          sink.lineStart();
-                          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
-                          sink.lineEnd();
-                        }
-                        return;
-                      }
-
-                      // Rejoin connected segments.
-                      // TODO reuse ringBuffer.rejoin()?
-                      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
-
-                      segments.push(ringSegments.filter(validSegment));
-                    }
-
-                    return clip;
-                  };
-                };
-
-                function validSegment(segment) {
-                  return segment.length > 1;
-                }
-
-                // Intersections are sorted along the clip edge. For both antimeridian cutting
-                // and circle clipping, the same comparison is used.
-                function compareIntersection(a, b) {
-                  return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])
-                       - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);
-                }
-
-                var clipAntimeridian = clip(
-                  function() { return true; },
-                  clipAntimeridianLine,
-                  clipAntimeridianInterpolate,
-                  [-pi$4, -halfPi$3]
-                );
-
-                // Takes a line and cuts into visible segments. Return values: 0 - there were
-                // intersections or the line was empty; 1 - no intersections; 2 - there were
-                // intersections, and the first and last segments should be rejoined.
-                function clipAntimeridianLine(stream) {
-                  var lambda0 = NaN,
-                      phi0 = NaN,
-                      sign0 = NaN,
-                      clean; // no intersections
-
-                  return {
-                    lineStart: function() {
-                      stream.lineStart();
-                      clean = 1;
-                    },
-                    point: function(lambda1, phi1) {
-                      var sign1 = lambda1 > 0 ? pi$4 : -pi$4,
-                          delta = abs(lambda1 - lambda0);
-                      if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole
-                        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);
-                        stream.point(sign0, phi0);
-                        stream.lineEnd();
-                        stream.lineStart();
-                        stream.point(sign1, phi0);
-                        stream.point(lambda1, phi0);
-                        clean = 0;
-                      } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian
-                        if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies
-                        if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;
-                        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
-                        stream.point(sign0, phi0);
-                        stream.lineEnd();
-                        stream.lineStart();
-                        stream.point(sign1, phi0);
-                        clean = 0;
-                      }
-                      stream.point(lambda0 = lambda1, phi0 = phi1);
-                      sign0 = sign1;
-                    },
-                    lineEnd: function() {
-                      stream.lineEnd();
-                      lambda0 = phi0 = NaN;
-                    },
-                    clean: function() {
-                      return 2 - clean; // if intersections, rejoin first and last segments
-                    }
-                  };
-                }
-
-                function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
-                  var cosPhi0,
-                      cosPhi1,
-                      sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
-                  return abs(sinLambda0Lambda1) > epsilon$4
-                      ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
-                          - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
-                          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
-                      : (phi0 + phi1) / 2;
-                }
-
-                function clipAntimeridianInterpolate(from, to, direction, stream) {
-                  var phi;
-                  if (from == null) {
-                    phi = direction * halfPi$3;
-                    stream.point(-pi$4, phi);
-                    stream.point(0, phi);
-                    stream.point(pi$4, phi);
-                    stream.point(pi$4, 0);
-                    stream.point(pi$4, -phi);
-                    stream.point(0, -phi);
-                    stream.point(-pi$4, -phi);
-                    stream.point(-pi$4, 0);
-                    stream.point(-pi$4, phi);
-                  } else if (abs(from[0] - to[0]) > epsilon$4) {
-                    var lambda = from[0] < to[0] ? pi$4 : -pi$4;
-                    phi = direction * lambda / 2;
-                    stream.point(-lambda, phi);
-                    stream.point(0, phi);
-                    stream.point(lambda, phi);
-                  } else {
-                    stream.point(to[0], to[1]);
-                  }
-                }
-
-                var clipCircle = function(radius, delta) {
-                  var cr = cos$1(radius),
-                      smallRadius = cr > 0,
-                      notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case
-
-                  function interpolate(from, to, direction, stream) {
-                    circleStream(stream, radius, delta, direction, from, to);
-                  }
-
-                  function visible(lambda, phi) {
-                    return cos$1(lambda) * cos$1(phi) > cr;
-                  }
-
-                  // Takes a line and cuts into visible segments. Return values used for polygon
-                  // clipping: 0 - there were intersections or the line was empty; 1 - no
-                  // intersections 2 - there were intersections, and the first and last segments
-                  // should be rejoined.
-                  function clipLine(stream) {
-                    var point0, // previous point
-                        c0, // code for previous point
-                        v0, // visibility of previous point
-                        v00, // visibility of first point
-                        clean; // no intersections
-                    return {
-                      lineStart: function() {
-                        v00 = v0 = false;
-                        clean = 1;
-                      },
-                      point: function(lambda, phi) {
-                        var point1 = [lambda, phi],
-                            point2,
-                            v = visible(lambda, phi),
-                            c = smallRadius
-                              ? v ? 0 : code(lambda, phi)
-                              : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;
-                        if (!point0 && (v00 = v0 = v)) stream.lineStart();
-                        // Handle degeneracies.
-                        // TODO ignore if not clipping polygons.
-                        if (v !== v0) {
-                          point2 = intersect(point0, point1);
-                          if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
-                            point1[0] += epsilon$4;
-                            point1[1] += epsilon$4;
-                            v = visible(point1[0], point1[1]);
-                          }
-                        }
-                        if (v !== v0) {
-                          clean = 0;
-                          if (v) {
-                            // outside going in
-                            stream.lineStart();
-                            point2 = intersect(point1, point0);
-                            stream.point(point2[0], point2[1]);
-                          } else {
-                            // inside going out
-                            point2 = intersect(point0, point1);
-                            stream.point(point2[0], point2[1]);
-                            stream.lineEnd();
-                          }
-                          point0 = point2;
-                        } else if (notHemisphere && point0 && smallRadius ^ v) {
-                          var t;
-                          // If the codes for two points are different, or are both zero,
-                          // and there this segment intersects with the small circle.
-                          if (!(c & c0) && (t = intersect(point1, point0, true))) {
-                            clean = 0;
-                            if (smallRadius) {
-                              stream.lineStart();
-                              stream.point(t[0][0], t[0][1]);
-                              stream.point(t[1][0], t[1][1]);
-                              stream.lineEnd();
-                            } else {
-                              stream.point(t[1][0], t[1][1]);
-                              stream.lineEnd();
-                              stream.lineStart();
-                              stream.point(t[0][0], t[0][1]);
-                            }
-                          }
-                        }
-                        if (v && (!point0 || !pointEqual(point0, point1))) {
-                          stream.point(point1[0], point1[1]);
-                        }
-                        point0 = point1, v0 = v, c0 = c;
-                      },
-                      lineEnd: function() {
-                        if (v0) stream.lineEnd();
-                        point0 = null;
-                      },
-                      // Rejoin first and last segments if there were intersections and the first
-                      // and last points were visible.
-                      clean: function() {
-                        return clean | ((v00 && v0) << 1);
-                      }
-                    };
-                  }
-
-                  // Intersects the great circle between a and b with the clip circle.
-                  function intersect(a, b, two) {
-                    var pa = cartesian(a),
-                        pb = cartesian(b);
-
-                    // We have two planes, n1.p = d1 and n2.p = d2.
-                    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
-                    var n1 = [1, 0, 0], // normal
-                        n2 = cartesianCross(pa, pb),
-                        n2n2 = cartesianDot(n2, n2),
-                        n1n2 = n2[0], // cartesianDot(n1, n2),
-                        determinant = n2n2 - n1n2 * n1n2;
-
-                    // Two polar points.
-                    if (!determinant) return !two && a;
-
-                    var c1 =  cr * n2n2 / determinant,
-                        c2 = -cr * n1n2 / determinant,
-                        n1xn2 = cartesianCross(n1, n2),
-                        A = cartesianScale(n1, c1),
-                        B = cartesianScale(n2, c2);
-                    cartesianAddInPlace(A, B);
-
-                    // Solve |p(t)|^2 = 1.
-                    var u = n1xn2,
-                        w = cartesianDot(A, u),
-                        uu = cartesianDot(u, u),
-                        t2 = w * w - uu * (cartesianDot(A, A) - 1);
-
-                    if (t2 < 0) return;
-
-                    var t = sqrt$1(t2),
-                        q = cartesianScale(u, (-w - t) / uu);
-                    cartesianAddInPlace(q, A);
-                    q = spherical(q);
-
-                    if (!two) return q;
-
-                    // Two intersection points.
-                    var lambda0 = a[0],
-                        lambda1 = b[0],
-                        phi0 = a[1],
-                        phi1 = b[1],
-                        z;
-
-                    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
-
-                    var delta = lambda1 - lambda0,
-                        polar = abs(delta - pi$4) < epsilon$4,
-                        meridian = polar || delta < epsilon$4;
-
-                    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
-
-                    // Check that the first point is between a and b.
-                    if (meridian
-                        ? polar
-                          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)
-                          : phi0 <= q[1] && q[1] <= phi1
-                        : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
-                      var q1 = cartesianScale(u, (-w + t) / uu);
-                      cartesianAddInPlace(q1, A);
-                      return [q, spherical(q1)];
-                    }
-                  }
-
-                  // Generates a 4-bit vector representing the location of a point relative to
-                  // the small circle's bounding box.
-                  function code(lambda, phi) {
-                    var r = smallRadius ? radius : pi$4 - radius,
-                        code = 0;
-                    if (lambda < -r) code |= 1; // left
-                    else if (lambda > r) code |= 2; // right
-                    if (phi < -r) code |= 4; // below
-                    else if (phi > r) code |= 8; // above
-                    return code;
-                  }
-
-                  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);
-                };
-
-                var transform$1 = function(methods) {
-                  return {
-                    stream: transformer(methods)
-                  };
-                };
-
-                function transformer(methods) {
-                  return function(stream) {
-                    var s = new TransformStream;
-                    for (var key in methods) s[key] = methods[key];
-                    s.stream = stream;
-                    return s;
-                  };
-                }
-
-                function TransformStream() {}
-
-                TransformStream.prototype = {
-                  constructor: TransformStream,
-                  point: function(x, y) { this.stream.point(x, y); },
-                  sphere: function() { this.stream.sphere(); },
-                  lineStart: function() { this.stream.lineStart(); },
-                  lineEnd: function() { this.stream.lineEnd(); },
-                  polygonStart: function() { this.stream.polygonStart(); },
-                  polygonEnd: function() { this.stream.polygonEnd(); }
-                };
-
-                function fitExtent(projection, extent, object) {
-                  var w = extent[1][0] - extent[0][0],
-                      h = extent[1][1] - extent[0][1],
-                      clip = projection.clipExtent && projection.clipExtent();
-
-                  projection
-                      .scale(150)
-                      .translate([0, 0]);
-
-                  if (clip != null) projection.clipExtent(null);
-
-                  geoStream(object, projection.stream(boundsStream$1));
-
-                  var b = boundsStream$1.result(),
-                      k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
-                      x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
-                      y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
-
-                  if (clip != null) projection.clipExtent(clip);
-
-                  return projection
-                      .scale(k * 150)
-                      .translate([x, y]);
-                }
-
-                function fitSize(projection, size, object) {
-                  return fitExtent(projection, [[0, 0], size], object);
-                }
-
-                var maxDepth = 16;
-                var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
-
-                var resample = function(project, delta2) {
-                  return +delta2 ? resample$1(project, delta2) : resampleNone(project);
-                };
-
-                function resampleNone(project) {
-                  return transformer({
-                    point: function(x, y) {
-                      x = project(x, y);
-                      this.stream.point(x[0], x[1]);
-                    }
-                  });
-                }
-
-                function resample$1(project, delta2) {
-
-                  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
-                    var dx = x1 - x0,
-                        dy = y1 - y0,
-                        d2 = dx * dx + dy * dy;
-                    if (d2 > 4 * delta2 && depth--) {
-                      var a = a0 + a1,
-                          b = b0 + b1,
-                          c = c0 + c1,
-                          m = sqrt$1(a * a + b * b + c * c),
-                          phi2 = asin$1(c /= m),
-                          lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),
-                          p = project(lambda2, phi2),
-                          x2 = p[0],
-                          y2 = p[1],
-                          dx2 = x2 - x0,
-                          dy2 = y2 - y0,
-                          dz = dy * dx2 - dx * dy2;
-                      if (dz * dz / d2 > delta2 // perpendicular projected distance
-                          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
-                          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
-                        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
-                        stream.point(x2, y2);
-                        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
-                      }
-                    }
-                  }
-                  return function(stream) {
-                    var lambda00, x00, y00, a00, b00, c00, // first point
-                        lambda0, x0, y0, a0, b0, c0; // previous point
-
-                    var resampleStream = {
-                      point: point,
-                      lineStart: lineStart,
-                      lineEnd: lineEnd,
-                      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
-                      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
-                    };
-
-                    function point(x, y) {
-                      x = project(x, y);
-                      stream.point(x[0], x[1]);
-                    }
-
-                    function lineStart() {
-                      x0 = NaN;
-                      resampleStream.point = linePoint;
-                      stream.lineStart();
-                    }
-
-                    function linePoint(lambda, phi) {
-                      var c = cartesian([lambda, phi]), p = project(lambda, phi);
-                      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
-                      stream.point(x0, y0);
-                    }
-
-                    function lineEnd() {
-                      resampleStream.point = point;
-                      stream.lineEnd();
-                    }
-
-                    function ringStart() {
-                      lineStart();
-                      resampleStream.point = ringPoint;
-                      resampleStream.lineEnd = ringEnd;
-                    }
-
-                    function ringPoint(lambda, phi) {
-                      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
-                      resampleStream.point = linePoint;
-                    }
-
-                    function ringEnd() {
-                      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
-                      resampleStream.lineEnd = lineEnd;
-                      lineEnd();
-                    }
-
-                    return resampleStream;
-                  };
-                }
-
-                var transformRadians = transformer({
-                  point: function(x, y) {
-                    this.stream.point(x * radians, y * radians);
-                  }
-                });
-
-                function projection(project) {
-                  return projectionMutator(function() { return project; })();
-                }
-
-                function projectionMutator(projectAt) {
-                  var project,
-                      k = 150, // scale
-                      x = 480, y = 250, // translate
-                      dx, dy, lambda = 0, phi = 0, // center
-                      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
-                      theta = null, preclip = clipAntimeridian, // clip angle
-                      x0 = null, y0, x1, y1, postclip = identity$7, // clip extent
-                      delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
-                      cache,
-                      cacheStream;
-
-                  function projection(point) {
-                    point = projectRotate(point[0] * radians, point[1] * radians);
-                    return [point[0] * k + dx, dy - point[1] * k];
-                  }
-
-                  function invert(point) {
-                    point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
-                    return point && [point[0] * degrees$1, point[1] * degrees$1];
-                  }
-
-                  function projectTransform(x, y) {
-                    return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
-                  }
-
-                  projection.stream = function(stream) {
-                    return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
-                  };
-
-                  projection.clipAngle = function(_) {
-                    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
-                  };
-
-                  projection.clipExtent = function(_) {
-                    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
-                  };
-
-                  projection.scale = function(_) {
-                    return arguments.length ? (k = +_, recenter()) : k;
-                  };
-
-                  projection.translate = function(_) {
-                    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
-                  };
-
-                  projection.center = function(_) {
-                    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
-                  };
-
-                  projection.rotate = function(_) {
-                    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
-                  };
-
-                  projection.precision = function(_) {
-                    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);
-                  };
-
-                  projection.fitExtent = function(extent, object) {
-                    return fitExtent(projection, extent, object);
-                  };
-
-                  projection.fitSize = function(size, object) {
-                    return fitSize(projection, size, object);
-                  };
-
-                  function recenter() {
-                    projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
-                    var center = project(lambda, phi);
-                    dx = x - center[0] * k;
-                    dy = y + center[1] * k;
-                    return reset();
-                  }
-
-                  function reset() {
-                    cache = cacheStream = null;
-                    return projection;
-                  }
-
-                  return function() {
-                    project = projectAt.apply(this, arguments);
-                    projection.invert = project.invert && invert;
-                    return recenter();
-                  };
-                }
-
-                function conicProjection(projectAt) {
-                  var phi0 = 0,
-                      phi1 = pi$4 / 3,
-                      m = projectionMutator(projectAt),
-                      p = m(phi0, phi1);
-
-                  p.parallels = function(_) {
-                    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
-                  };
-
-                  return p;
-                }
-
-                function cylindricalEqualAreaRaw(phi0) {
-                  var cosPhi0 = cos$1(phi0);
-
-                  function forward(lambda, phi) {
-                    return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
-                  }
-
-                  forward.invert = function(x, y) {
-                    return [x / cosPhi0, asin$1(y * cosPhi0)];
-                  };
-
-                  return forward;
-                }
-
-                function conicEqualAreaRaw(y0, y1) {
-                  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
-
-                  // Are the parallels symmetrical around the Equator?
-                  if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0);
-
-                  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n;
-
-                  function project(x, y) {
-                    var r = sqrt$1(c - 2 * n * sin$1(y)) / n;
-                    return [r * sin$1(x *= n), r0 - r * cos$1(x)];
-                  }
-
-                  project.invert = function(x, y) {
-                    var r0y = r0 - y;
-                    return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
-                  };
-
-                  return project;
-                }
-
-                var conicEqualArea = function() {
-                  return conicProjection(conicEqualAreaRaw)
-                      .scale(155.424)
-                      .center([0, 33.6442]);
-                };
-
-                var albers = function() {
-                  return conicEqualArea()
-                      .parallels([29.5, 45.5])
-                      .scale(1070)
-                      .translate([480, 250])
-                      .rotate([96, 0])
-                      .center([-0.6, 38.7]);
-                };
-
-                // The projections must have mutually exclusive clip regions on the sphere,
-                // as this will avoid emitting interleaving lines and polygons.
-                function multiplex(streams) {
-                  var n = streams.length;
-                  return {
-                    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
-                    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
-                    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
-                    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
-                    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
-                    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
-                  };
-                }
-
-                // A composite projection for the United States, configured by default for
-                // 960×500. The projection also works quite well at 960×600 if you change the
-                // scale to 1285 and adjust the translate accordingly. The set of standard
-                // parallels for each region comes from USGS, which is published here:
-                // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
-                var albersUsa = function() {
-                  var cache,
-                      cacheStream,
-                      lower48 = albers(), lower48Point,
-                      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
-                      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
-                      point, pointStream = {point: function(x, y) { point = [x, y]; }};
-
-                  function albersUsa(coordinates) {
-                    var x = coordinates[0], y = coordinates[1];
-                    return point = null,
-                        (lower48Point.point(x, y), point)
-                        || (alaskaPoint.point(x, y), point)
-                        || (hawaiiPoint.point(x, y), point);
-                  }
-
-                  albersUsa.invert = function(coordinates) {
-                    var k = lower48.scale(),
-                        t = lower48.translate(),
-                        x = (coordinates[0] - t[0]) / k,
-                        y = (coordinates[1] - t[1]) / k;
-                    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
-                        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
-                        : lower48).invert(coordinates);
-                  };
-
-                  albersUsa.stream = function(stream) {
-                    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
-                  };
-
-                  albersUsa.precision = function(_) {
-                    if (!arguments.length) return lower48.precision();
-                    lower48.precision(_), alaska.precision(_), hawaii.precision(_);
-                    return reset();
-                  };
-
-                  albersUsa.scale = function(_) {
-                    if (!arguments.length) return lower48.scale();
-                    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
-                    return albersUsa.translate(lower48.translate());
-                  };
-
-                  albersUsa.translate = function(_) {
-                    if (!arguments.length) return lower48.translate();
-                    var k = lower48.scale(), x = +_[0], y = +_[1];
-
-                    lower48Point = lower48
-                        .translate(_)
-                        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
-                        .stream(pointStream);
-
-                    alaskaPoint = alaska
-                        .translate([x - 0.307 * k, y + 0.201 * k])
-                        .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
-                        .stream(pointStream);
-
-                    hawaiiPoint = hawaii
-                        .translate([x - 0.205 * k, y + 0.212 * k])
-                        .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
-                        .stream(pointStream);
-
-                    return reset();
-                  };
-
-                  albersUsa.fitExtent = function(extent, object) {
-                    return fitExtent(albersUsa, extent, object);
-                  };
-
-                  albersUsa.fitSize = function(size, object) {
-                    return fitSize(albersUsa, size, object);
-                  };
-
-                  function reset() {
-                    cache = cacheStream = null;
-                    return albersUsa;
-                  }
-
-                  return albersUsa.scale(1070);
-                };
-
-                function azimuthalRaw(scale) {
-                  return function(x, y) {
-                    var cx = cos$1(x),
-                        cy = cos$1(y),
-                        k = scale(cx * cy);
-                    return [
-                      k * cy * sin$1(x),
-                      k * sin$1(y)
-                    ];
-                  }
-                }
-
-                function azimuthalInvert(angle) {
-                  return function(x, y) {
-                    var z = sqrt$1(x * x + y * y),
-                        c = angle(z),
-                        sc = sin$1(c),
-                        cc = cos$1(c);
-                    return [
-                      atan2(x * sc, z * cc),
-                      asin$1(z && y * sc / z)
-                    ];
-                  }
-                }
-
-                var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
-                  return sqrt$1(2 / (1 + cxcy));
-                });
-
-                azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
-                  return 2 * asin$1(z / 2);
-                });
-
-                var azimuthalEqualArea = function() {
-                  return projection(azimuthalEqualAreaRaw)
-                      .scale(124.75)
-                      .clipAngle(180 - 1e-3);
-                };
-
-                var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
-                  return (c = acos(c)) && c / sin$1(c);
-                });
-
-                azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
-                  return z;
-                });
-
-                var azimuthalEquidistant = function() {
-                  return projection(azimuthalEquidistantRaw)
-                      .scale(79.4188)
-                      .clipAngle(180 - 1e-3);
-                };
-
-                function mercatorRaw(lambda, phi) {
-                  return [lambda, log$1(tan((halfPi$3 + phi) / 2))];
-                }
-
-                mercatorRaw.invert = function(x, y) {
-                  return [x, 2 * atan(exp(y)) - halfPi$3];
-                };
-
-                var mercator = function() {
-                  return mercatorProjection(mercatorRaw)
-                      .scale(961 / tau$4);
-                };
-
-                function mercatorProjection(project) {
-                  var m = projection(project),
-                      scale = m.scale,
-                      translate = m.translate,
-                      clipExtent = m.clipExtent,
-                      clipAuto;
-
-                  m.scale = function(_) {
-                    return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();
-                  };
-
-                  m.translate = function(_) {
-                    return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();
-                  };
-
-                  m.clipExtent = function(_) {
-                    if (!arguments.length) return clipAuto ? null : clipExtent();
-                    if (clipAuto = _ == null) {
-                      var k = pi$4 * scale(),
-                          t = translate();
-                      _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
-                    }
-                    clipExtent(_);
-                    return m;
-                  };
-
-                  return m.clipExtent(null);
-                }
-
-                function tany(y) {
-                  return tan((halfPi$3 + y) / 2);
-                }
-
-                function conicConformalRaw(y0, y1) {
-                  var cy0 = cos$1(y0),
-                      n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),
-                      f = cy0 * pow$1(tany(y0), n) / n;
-
-                  if (!n) return mercatorRaw;
-
-                  function project(x, y) {
-                    if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }
-                    else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }
-                    var r = f / pow$1(tany(y), n);
-                    return [r * sin$1(n * x), f - r * cos$1(n * x)];
-                  }
-
-                  project.invert = function(x, y) {
-                    var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);
-                    return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];
-                  };
-
-                  return project;
-                }
-
-                var conicConformal = function() {
-                  return conicProjection(conicConformalRaw)
-                      .scale(109.5)
-                      .parallels([30, 30]);
-                };
-
-                function equirectangularRaw(lambda, phi) {
-                  return [lambda, phi];
-                }
-
-                equirectangularRaw.invert = equirectangularRaw;
-
-                var equirectangular = function() {
-                  return projection(equirectangularRaw)
-                      .scale(152.63);
-                };
-
-                function conicEquidistantRaw(y0, y1) {
-                  var cy0 = cos$1(y0),
-                      n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
-                      g = cy0 / n + y0;
-
-                  if (abs(n) < epsilon$4) return equirectangularRaw;
-
-                  function project(x, y) {
-                    var gy = g - y, nx = n * x;
-                    return [gy * sin$1(nx), g - gy * cos$1(nx)];
-                  }
-
-                  project.invert = function(x, y) {
-                    var gy = g - y;
-                    return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)];
-                  };
-
-                  return project;
-                }
-
-                var conicEquidistant = function() {
-                  return conicProjection(conicEquidistantRaw)
-                      .scale(131.154)
-                      .center([0, 13.9389]);
-                };
-
-                function gnomonicRaw(x, y) {
-                  var cy = cos$1(y), k = cos$1(x) * cy;
-                  return [cy * sin$1(x) / k, sin$1(y) / k];
-                }
-
-                gnomonicRaw.invert = azimuthalInvert(atan);
-
-                var gnomonic = function() {
-                  return projection(gnomonicRaw)
-                      .scale(144.049)
-                      .clipAngle(60);
-                };
-
-                function scaleTranslate(k, tx, ty) {
-                  return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({
-                    point: function(x, y) {
-                      this.stream.point(x * k + tx, y * k + ty);
-                    }
-                  });
-                }
-
-                var identity$8 = function() {
-                  var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate
-                      x0 = null, y0, x1, y1, clip = identity$7, // clip extent
-                      cache,
-                      cacheStream,
-                      projection;
-
-                  function reset() {
-                    cache = cacheStream = null;
-                    return projection;
-                  }
-
-                  return projection = {
-                    stream: function(stream) {
-                      return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
-                    },
-                    clipExtent: function(_) {
-                      return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
-                    },
-                    scale: function(_) {
-                      return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k;
-                    },
-                    translate: function(_) {
-                      return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
-                    },
-                    fitExtent: function(extent, object) {
-                      return fitExtent(projection, extent, object);
-                    },
-                    fitSize: function(size, object) {
-                      return fitSize(projection, size, object);
-                    }
-                  };
-                };
-
-                function orthographicRaw(x, y) {
-                  return [cos$1(y) * sin$1(x), sin$1(y)];
-                }
-
-                orthographicRaw.invert = azimuthalInvert(asin$1);
-
-                var orthographic = function() {
-                  return projection(orthographicRaw)
-                      .scale(249.5)
-                      .clipAngle(90 + epsilon$4);
-                };
-
-                function stereographicRaw(x, y) {
-                  var cy = cos$1(y), k = 1 + cos$1(x) * cy;
-                  return [cy * sin$1(x) / k, sin$1(y) / k];
-                }
-
-                stereographicRaw.invert = azimuthalInvert(function(z) {
-                  return 2 * atan(z);
-                });
-
-                var stereographic = function() {
-                  return projection(stereographicRaw)
-                      .scale(250)
-                      .clipAngle(142);
-                };
-
-                function transverseMercatorRaw(lambda, phi) {
-                  return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];
-                }
-
-                transverseMercatorRaw.invert = function(x, y) {
-                  return [-y, 2 * atan(exp(x)) - halfPi$3];
-                };
-
-                var transverseMercator = function() {
-                  var m = mercatorProjection(transverseMercatorRaw),
-                      center = m.center,
-                      rotate = m.rotate;
-
-                  m.center = function(_) {
-                    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
-                  };
-
-                  m.rotate = function(_) {
-                    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
-                  };
-
-                  return rotate([0, 0, 90])
-                      .scale(159.155);
-                };
-
-                exports.version = version;
-                exports.bisect = bisectRight;
-                exports.bisectRight = bisectRight;
-                exports.bisectLeft = bisectLeft;
-                exports.ascending = ascending;
-                exports.bisector = bisector;
-                exports.descending = descending;
-                exports.deviation = deviation;
-                exports.extent = extent;
-                exports.histogram = histogram;
-                exports.thresholdFreedmanDiaconis = freedmanDiaconis;
-                exports.thresholdScott = scott;
-                exports.thresholdSturges = sturges;
-                exports.max = max;
-                exports.mean = mean;
-                exports.median = median;
-                exports.merge = merge;
-                exports.min = min;
-                exports.pairs = pairs;
-                exports.permute = permute;
-                exports.quantile = threshold;
-                exports.range = range;
-                exports.scan = scan;
-                exports.shuffle = shuffle;
-                exports.sum = sum;
-                exports.ticks = ticks;
-                exports.tickStep = tickStep;
-                exports.transpose = transpose;
-                exports.variance = variance;
-                exports.zip = zip;
-                exports.entries = entries;
-                exports.keys = keys;
-                exports.values = values;
-                exports.map = map$1;
-                exports.set = set;
-                exports.nest = nest;
-                exports.randomUniform = uniform;
-                exports.randomNormal = normal;
-                exports.randomLogNormal = logNormal;
-                exports.randomBates = bates;
-                exports.randomIrwinHall = irwinHall;
-                exports.randomExponential = exponential;
-                exports.easeLinear = linear;
-                exports.easeQuad = quadInOut;
-                exports.easeQuadIn = quadIn;
-                exports.easeQuadOut = quadOut;
-                exports.easeQuadInOut = quadInOut;
-                exports.easeCubic = cubicInOut;
-                exports.easeCubicIn = cubicIn;
-                exports.easeCubicOut = cubicOut;
-                exports.easeCubicInOut = cubicInOut;
-                exports.easePoly = polyInOut;
-                exports.easePolyIn = polyIn;
-                exports.easePolyOut = polyOut;
-                exports.easePolyInOut = polyInOut;
-                exports.easeSin = sinInOut;
-                exports.easeSinIn = sinIn;
-                exports.easeSinOut = sinOut;
-                exports.easeSinInOut = sinInOut;
-                exports.easeExp = expInOut;
-                exports.easeExpIn = expIn;
-                exports.easeExpOut = expOut;
-                exports.easeExpInOut = expInOut;
-                exports.easeCircle = circleInOut;
-                exports.easeCircleIn = circleIn;
-                exports.easeCircleOut = circleOut;
-                exports.easeCircleInOut = circleInOut;
-                exports.easeBounce = bounceOut;
-                exports.easeBounceIn = bounceIn;
-                exports.easeBounceOut = bounceOut;
-                exports.easeBounceInOut = bounceInOut;
-                exports.easeBack = backInOut;
-                exports.easeBackIn = backIn;
-                exports.easeBackOut = backOut;
-                exports.easeBackInOut = backInOut;
-                exports.easeElastic = elasticOut;
-                exports.easeElasticIn = elasticIn;
-                exports.easeElasticOut = elasticOut;
-                exports.easeElasticInOut = elasticInOut;
-                exports.polygonArea = area;
-                exports.polygonCentroid = centroid;
-                exports.polygonHull = hull;
-                exports.polygonContains = contains;
-                exports.polygonLength = length$1;
-                exports.path = path;
-                exports.quadtree = quadtree;
-                exports.queue = queue;
-                exports.arc = arc;
-                exports.area = area$1;
-                exports.line = line;
-                exports.pie = pie;
-                exports.radialArea = radialArea;
-                exports.radialLine = radialLine$1;
-                exports.symbol = symbol;
-                exports.symbols = symbols;
-                exports.symbolCircle = circle;
-                exports.symbolCross = cross$1;
-                exports.symbolDiamond = diamond;
-                exports.symbolSquare = square;
-                exports.symbolStar = star;
-                exports.symbolTriangle = triangle;
-                exports.symbolWye = wye;
-                exports.curveBasisClosed = basisClosed;
-                exports.curveBasisOpen = basisOpen;
-                exports.curveBasis = basis;
-                exports.curveBundle = bundle;
-                exports.curveCardinalClosed = cardinalClosed;
-                exports.curveCardinalOpen = cardinalOpen;
-                exports.curveCardinal = cardinal;
-                exports.curveCatmullRomClosed = catmullRomClosed;
-                exports.curveCatmullRomOpen = catmullRomOpen;
-                exports.curveCatmullRom = catmullRom;
-                exports.curveLinearClosed = linearClosed;
-                exports.curveLinear = curveLinear;
-                exports.curveMonotoneX = monotoneX;
-                exports.curveMonotoneY = monotoneY;
-                exports.curveNatural = natural;
-                exports.curveStep = step;
-                exports.curveStepAfter = stepAfter;
-                exports.curveStepBefore = stepBefore;
-                exports.stack = stack;
-                exports.stackOffsetExpand = expand;
-                exports.stackOffsetNone = none;
-                exports.stackOffsetSilhouette = silhouette;
-                exports.stackOffsetWiggle = wiggle;
-                exports.stackOrderAscending = ascending$1;
-                exports.stackOrderDescending = descending$2;
-                exports.stackOrderInsideOut = insideOut;
-                exports.stackOrderNone = none$1;
-                exports.stackOrderReverse = reverse;
-                exports.color = color;
-                exports.rgb = rgb;
-                exports.hsl = hsl;
-                exports.lab = lab;
-                exports.hcl = hcl;
-                exports.cubehelix = cubehelix;
-                exports.interpolate = interpolate;
-                exports.interpolateArray = array$1;
-                exports.interpolateDate = date;
-                exports.interpolateNumber = interpolateNumber;
-                exports.interpolateObject = object;
-                exports.interpolateRound = interpolateRound;
-                exports.interpolateString = interpolateString;
-                exports.interpolateTransformCss = interpolateTransformCss;
-                exports.interpolateTransformSvg = interpolateTransformSvg;
-                exports.interpolateZoom = interpolateZoom;
-                exports.interpolateRgb = interpolateRgb;
-                exports.interpolateRgbBasis = rgbBasis;
-                exports.interpolateRgbBasisClosed = rgbBasisClosed;
-                exports.interpolateHsl = hsl$2;
-                exports.interpolateHslLong = hslLong;
-                exports.interpolateLab = lab$1;
-                exports.interpolateHcl = hcl$2;
-                exports.interpolateHclLong = hclLong;
-                exports.interpolateCubehelix = cubehelix$2;
-                exports.interpolateCubehelixLong = cubehelixLong;
-                exports.interpolateBasis = basis$2;
-                exports.interpolateBasisClosed = basisClosed$1;
-                exports.quantize = quantize;
-                exports.dispatch = dispatch;
-                exports.dsvFormat = dsv;
-                exports.csvParse = csvParse;
-                exports.csvParseRows = csvParseRows;
-                exports.csvFormat = csvFormat;
-                exports.csvFormatRows = csvFormatRows;
-                exports.tsvParse = tsvParse;
-                exports.tsvParseRows = tsvParseRows;
-                exports.tsvFormat = tsvFormat;
-                exports.tsvFormatRows = tsvFormatRows;
-                exports.request = request;
-                exports.html = html;
-                exports.json = json;
-                exports.text = text;
-                exports.xml = xml;
-                exports.csv = csv$1;
-                exports.tsv = tsv$1;
-                exports.now = now;
-                exports.timer = timer;
-                exports.timerFlush = timerFlush;
-                exports.timeout = timeout$1;
-                exports.interval = interval$1;
-                exports.timeInterval = newInterval;
-                exports.timeMillisecond = millisecond;
-                exports.timeMilliseconds = milliseconds;
-                exports.timeSecond = second;
-                exports.timeSeconds = seconds;
-                exports.timeMinute = minute;
-                exports.timeMinutes = minutes;
-                exports.timeHour = hour;
-                exports.timeHours = hours;
-                exports.timeDay = day;
-                exports.timeDays = days;
-                exports.timeWeek = sunday;
-                exports.timeWeeks = sundays;
-                exports.timeSunday = sunday;
-                exports.timeSundays = sundays;
-                exports.timeMonday = monday;
-                exports.timeMondays = mondays;
-                exports.timeTuesday = tuesday;
-                exports.timeTuesdays = tuesdays;
-                exports.timeWednesday = wednesday;
-                exports.timeWednesdays = wednesdays;
-                exports.timeThursday = thursday;
-                exports.timeThursdays = thursdays;
-                exports.timeFriday = friday;
-                exports.timeFridays = fridays;
-                exports.timeSaturday = saturday;
-                exports.timeSaturdays = saturdays;
-                exports.timeMonth = month;
-                exports.timeMonths = months;
-                exports.timeYear = year;
-                exports.timeYears = years;
-                exports.utcMillisecond = millisecond;
-                exports.utcMilliseconds = milliseconds;
-                exports.utcSecond = second;
-                exports.utcSeconds = seconds;
-                exports.utcMinute = utcMinute;
-                exports.utcMinutes = utcMinutes;
-                exports.utcHour = utcHour;
-                exports.utcHours = utcHours;
-                exports.utcDay = utcDay;
-                exports.utcDays = utcDays;
-                exports.utcWeek = utcSunday;
-                exports.utcWeeks = utcSundays;
-                exports.utcSunday = utcSunday;
-                exports.utcSundays = utcSundays;
-                exports.utcMonday = utcMonday;
-                exports.utcMondays = utcMondays;
-                exports.utcTuesday = utcTuesday;
-                exports.utcTuesdays = utcTuesdays;
-                exports.utcWednesday = utcWednesday;
-                exports.utcWednesdays = utcWednesdays;
-                exports.utcThursday = utcThursday;
-                exports.utcThursdays = utcThursdays;
-                exports.utcFriday = utcFriday;
-                exports.utcFridays = utcFridays;
-                exports.utcSaturday = utcSaturday;
-                exports.utcSaturdays = utcSaturdays;
-                exports.utcMonth = utcMonth;
-                exports.utcMonths = utcMonths;
-                exports.utcYear = utcYear;
-                exports.utcYears = utcYears;
-                exports.formatLocale = formatLocale;
-                exports.formatDefaultLocale = defaultLocale;
-                exports.formatSpecifier = formatSpecifier;
-                exports.precisionFixed = precisionFixed;
-                exports.precisionPrefix = precisionPrefix;
-                exports.precisionRound = precisionRound;
-                exports.isoFormat = formatIso;
-                exports.isoParse = parseIso;
-                exports.timeFormatLocale = formatLocale$1;
-                exports.timeFormatDefaultLocale = defaultLocale$1;
-                exports.scaleBand = band;
-                exports.scalePoint = point$4;
-                exports.scaleIdentity = identity$4;
-                exports.scaleLinear = linear$2;
-                exports.scaleLog = log;
-                exports.scaleOrdinal = ordinal;
-                exports.scaleImplicit = implicit;
-                exports.scalePow = pow;
-                exports.scaleSqrt = sqrt;
-                exports.scaleQuantile = quantile$$1;
-                exports.scaleQuantize = quantize$1;
-                exports.scaleThreshold = threshold$1;
-                exports.scaleTime = time;
-                exports.scaleUtc = utcTime;
-                exports.schemeCategory10 = category10;
-                exports.schemeCategory20b = category20b;
-                exports.schemeCategory20c = category20c;
-                exports.schemeCategory20 = category20;
-                exports.scaleSequential = sequential;
-                exports.interpolateCubehelixDefault = cubehelix$3;
-                exports.interpolateRainbow = rainbow$1;
-                exports.interpolateWarm = warm;
-                exports.interpolateCool = cool;
-                exports.interpolateViridis = viridis;
-                exports.interpolateMagma = magma;
-                exports.interpolateInferno = inferno;
-                exports.interpolatePlasma = plasma;
-                exports.creator = creator;
-                exports.customEvent = customEvent;
-                exports.local = local;
-                exports.matcher = matcher$1;
-                exports.mouse = mouse;
-                exports.namespace = namespace;
-                exports.namespaces = namespaces;
-                exports.select = select;
-                exports.selectAll = selectAll;
-                exports.selection = selection;
-                exports.selector = selector;
-                exports.selectorAll = selectorAll;
-                exports.touch = touch;
-                exports.touches = touches;
-                exports.window = window;
-                exports.active = active;
-                exports.interrupt = interrupt;
-                exports.transition = transition;
-                exports.axisTop = axisTop;
-                exports.axisRight = axisRight;
-                exports.axisBottom = axisBottom;
-                exports.axisLeft = axisLeft;
-                exports.cluster = cluster;
-                exports.hierarchy = hierarchy;
-                exports.pack = index;
-                exports.packSiblings = siblings;
-                exports.packEnclose = enclose;
-                exports.partition = partition;
-                exports.stratify = stratify;
-                exports.tree = tree;
-                exports.treemap = index$1;
-                exports.treemapBinary = binary;
-                exports.treemapDice = treemapDice;
-                exports.treemapSlice = treemapSlice;
-                exports.treemapSliceDice = sliceDice;
-                exports.treemapSquarify = squarify;
-                exports.treemapResquarify = resquarify;
-                exports.forceCenter = center$1;
-                exports.forceCollide = collide;
-                exports.forceLink = link;
-                exports.forceManyBody = manyBody;
-                exports.forceSimulation = simulation;
-                exports.forceX = x$3;
-                exports.forceY = y$3;
-                exports.drag = drag;
-                exports.dragDisable = dragDisable;
-                exports.dragEnable = yesdrag;
-                exports.voronoi = voronoi;
-                exports.zoom = zoom;
-                exports.zoomIdentity = identity$6;
-                exports.zoomTransform = transform;
-                exports.brush = brush;
-                exports.brushX = brushX;
-                exports.brushY = brushY;
-                exports.brushSelection = brushSelection;
-                exports.chord = chord;
-                exports.ribbon = ribbon;
-                exports.geoAlbers = albers;
-                exports.geoAlbersUsa = albersUsa;
-                exports.geoArea = area$2;
-                exports.geoAzimuthalEqualArea = azimuthalEqualArea;
-                exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
-                exports.geoAzimuthalEquidistant = azimuthalEquidistant;
-                exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
-                exports.geoBounds = bounds;
-                exports.geoCentroid = centroid$1;
-                exports.geoCircle = circle$1;
-                exports.geoClipExtent = extent$1;
-                exports.geoConicConformal = conicConformal;
-                exports.geoConicConformalRaw = conicConformalRaw;
-                exports.geoConicEqualArea = conicEqualArea;
-                exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
-                exports.geoConicEquidistant = conicEquidistant;
-                exports.geoConicEquidistantRaw = conicEquidistantRaw;
-                exports.geoDistance = distance;
-                exports.geoEquirectangular = equirectangular;
-                exports.geoEquirectangularRaw = equirectangularRaw;
-                exports.geoGnomonic = gnomonic;
-                exports.geoGnomonicRaw = gnomonicRaw;
-                exports.geoGraticule = graticule;
-                exports.geoGraticule10 = graticule10;
-                exports.geoIdentity = identity$8;
-                exports.geoInterpolate = interpolate$2;
-                exports.geoLength = length$2;
-                exports.geoMercator = mercator;
-                exports.geoMercatorRaw = mercatorRaw;
-                exports.geoOrthographic = orthographic;
-                exports.geoOrthographicRaw = orthographicRaw;
-                exports.geoPath = index$3;
-                exports.geoProjection = projection;
-                exports.geoProjectionMutator = projectionMutator;
-                exports.geoRotation = rotation;
-                exports.geoStereographic = stereographic;
-                exports.geoStereographicRaw = stereographicRaw;
-                exports.geoStream = geoStream;
-                exports.geoTransform = transform$1;
-                exports.geoTransverseMercator = transverseMercator;
-                exports.geoTransverseMercatorRaw = transverseMercatorRaw;
-
-                Object.defineProperty(exports, '__esModule', { value: true });
-
-                })));
-
-
-                //aigner: HERE IS WHERE IT ALL STARTS!!!
-                },{}],2:[function(require,module,exports){
-                    
-
-
-                    
-                var d3 = require('d3');
-
-                var PULSE_DURATION = 700;
-                var SUB_ANIM_DELAY = 200;
-                var ACTIVE_COLOR = d3.rgb("seagreen");
-
-                function Animation(xdsms, rootId, delay) {
-                  this.rootId = rootId;
-                  if (typeof (rootId) === 'undefined') {
-                    this.rootId = 'root';
-                  }
-                  this.root = xdsms[this.rootId];
-                  this.xdsms = xdsms;
-                  this.duration = PULSE_DURATION;
-                  this.initialDelay = delay || 0;
-                }
-
-                Animation.prototype._pulse = function(delay, toBeSelected, option) {
-                  var sel = d3.select("svg." + this.rootId)
-                              .selectAll(toBeSelected)
-                              .transition().delay(delay);
-                  if (option !== "out") {
-                    sel = sel.transition().duration(200)
-                            .style('stroke-width', '8px')
-                            .style('stroke', ACTIVE_COLOR)
-                            .style('fill', function(d) {
-                              if (d.id) {
-                                return ACTIVE_COLOR.brighter();
-                              }});
-                  }
-                  if (option !== "in") {
-                    sel.transition().duration(3 * PULSE_DURATION)
-                            .style('stroke-width', null)
-                            .style('stroke', null)
-                            .style('fill', null);
-                  }
-                };
-
-                Animation.prototype._animate = function() {
-                  var self = this;
-                  var delay = this.initialDelay;
-                  var animDelay = SUB_ANIM_DELAY;
-                  var graph = self.xdsms[self.rootId].graph;
-                  
-                  var title = d3.select("svg." + self.rootId).select("g.title");
-                  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
-                  d3.select("svg." + self.rootId).select("rect.border")
-                    .transition().delay(delay)
-                      .style("stroke-width", '5px').duration(200)
-                    .transition().duration(1000)
-                      .style("stroke", 'black').style("stroke-width", '0px');
-
-                  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
-                    var offsets = [];
-                    nodesAtStep.forEach(function(nodeId) {
-                      var elapsed = delay + n * PULSE_DURATION;
-                      if (n > 0) {
-                        nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
-                          var from = graph.idxOf(prevNodeId);
-                          var to = graph.idxOf(nodeId);
-                          self._pulse(elapsed,"polyline.link_" + from + "_" + to);
-                        });
-                      }
-                      //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
-                      var gnode = "g." + nodeId;
-                      var nodeSel = d3.select("svg." + self.rootId).select(gnode);
-                      var scnId = graph.getNode(nodeId).getScenarioId();
-                      if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
-                      {
-                          self._pulse(elapsed, gnode + " > rect", "in");
-                          var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
-                          var offset = anim._animate();
-                          offsets.push(offset);
-                          self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
-                      } 
-                      else 
-                      {
-                          self._pulse(elapsed, gnode + " > rect");
-                      }
-                    }, this);
-
-                    if (offsets.length > 0) {
-                      delay += Math.max.apply(null, offsets);
-                    }
-                    delay += animDelay;
-                  }, this);
-                    
-                  title.select("text").transition()
-                    .delay(graph.nodesByStep.length * PULSE_DURATION + delay)
-                    .style("fill", null);
-
-                  return graph.nodesByStep.length * PULSE_DURATION;
-                };
-
-                Animation.prototype.run = function() {
-                  this._animate();
-                };
-
-                module.exports = Animation;
-
-                },{"d3":1}],3:[function(require,module,exports){
-                var UID = "_U_";
-                var MULTI_TYPE = "_multi";
-
-                //aigner: Node() constructor additionally gets the "xdsm"
-                function Node(xdsm, id, name, type, metadata) {
-                    
-                  var splitUndef = name.split("undefined: ")
-                  if (splitUndef.length>1) {name=splitUndef[1]}
-                  else {name=splitUndef[0]}
-                  
-                  if (typeof (name) === 'undefined') {
-                    name = id;
-                  }
-                  if (typeof (type) === 'undefined') {
-                    type = 'analysis';
-                  }
-                  this.xdsm = xdsm;
-                  this.id = id;
-                  this.name = name;
-                  this.metadata = metadata;
-                  this.isMulti = (type.search(/_multi$/) >= 0);
-                  this.type = this.isMulti ?
-                    type.substr(0, type.length - MULTI_TYPE.length) : type;
-                }
-
-                Node.prototype.isMdo = function() {
-                  return this.type === "mdo";
-                };
-
-                Node.prototype.getScenarioId = function() {
-                  if (this.isMdo()) {
-                    var idxscn = this.name.indexOf("_scn-");
-                    if (idxscn === -1) {
-                      console.log("Warning: MDO Scenario not found. " +
-                                  "Bad type or name for node: " + JSON.stringify(this));
-                      return null;
-                    }
-                    return this.name.substr(idxscn + 1);
-                  }
-                  return null;
-                };
-
-                function Edge(from, to, name, row, col, isMulti) {
-                  this.id = "link_" + from + "_" + to;
-                  this.name = name;
-                  this.row = row;
-                  this.col = col;
-                  this.iotype = row < col ? "in" : "out";
-                  this.io = {
-                    fromU: (from === UID),
-                    toU: (to === UID)
-                  };
-                  this.from = from;
-                  this.to = to;
-                  this.isMulti = isMulti;
-                }
-
-                Edge.prototype.isIO = function() {
-                  return this.io.fromU || this.io.toU;
-                };
-
-                //aigner: Function creates the xdsm graph
-                function Graph(mdo, refname) {
-                  this.nodes = [new Node(UID, UID, UID, "user",[])];
-                  this.edges = [];
-                  this.chains = [];
-                  this.refname = refname || "";
-                  
-                  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
-                  var numbering = Graph.new_number(mdo.workflow);
-                  //var numbering = Graph.number(mdo.workflow);
-                  var numPrefixes = numbering.toNum;
-                  this.nodesByStep = numbering.toNode;
-
-                  mdo.nodes.forEach(function(item) {
-                    name = document.createElement("TEXTAREA");
-                    name = numPrefixes[item.id] + ": " + item.name;
-                    this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
-                  }, this);
-
-                  this.ids = this.nodes.map(function(elt) {
-                    return elt.id;
-                  });
-                  
-                  mdo.edges.forEach(function(item) {
-                    var idA = this.idxOf(item.from);
-                    var idB = this.idxOf(item.to);
-                    
-                    var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
-                    this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
-                  }, this);
-
-                  
-                  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
-                  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
-                  // var echain = Graph.expand(mdo.workflow); 
-                  // echain.forEach(function(leafChain) {
-                    // if (leafChain.length < 2) {
-                      // throw new Error("Bad process chain (" + leafChain.length + "elt)");
-                    // } else {
-                      // this.chains.push([]);
-                      // var ids = this.nodes.map(function(elt) {
-                        // return elt.id;
-                      // });
-                      // leafChain.forEach(function(item, j) {
-                        // if (j !== 0) {
-                          // var idA = ids.indexOf(leafChain[j - 1]);
-                          // if (idA < 0) {
-                            // throw new Error("Process chain element (" +
-                                            // leafChain[j - 1] + ") not found");
-                          // }
-                          // var idB = ids.indexOf(leafChain[j]);
-                          // if (idB < 0) {
-                            // throw new Error("Process chain element (" +
-                                            // leafChain[j] + ") not found");
-                          // }
-                          // if (idA !== idB) {
-                            // this.chains[this.chains.length - 1].push([idA, idB]);
-                          // }
-                        // }
-                      // }, this);
-                    // }
-                  // }, this);
-                  
-                  
-                }
-
-                Graph.prototype.idxOf = function(nodeId) {
-                  return this.ids.indexOf(nodeId);
-                };
-                Graph.prototype.getNode = function(nodeId) {
-                  return this.nodes[this.ids.indexOf(nodeId)];
-                };
-
-                function _expand(workflow) {
-                  var ret = [];
-                  var prev;
-                  workflow.forEach(function(item) {
-                    if (item instanceof Array) {
-                      if (item[0].hasOwnProperty('parallel')) {
-                        if (prev) {
-                          ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
-                              function(elt) {
-                                return [prev].concat(_expand([elt]), prev);
-                              }));
-                        } else {
-                          throw new Error("Bad workflow structure : " +
-                              "cannot parallel loop without previous starting point.");
-                        }
-                      } else if (prev) {
-                        ret = ret.concat(_expand(item), prev);
-                      } else {
-                        ret = ret.concat(_expand(item));
-                      }
-                      prev = ret[ret.length - 1];
-                    } else if (item.hasOwnProperty('parallel')) {
-                      if (prev) {
-                        ret = ret.slice(0, ret.length - 1).concat(
-                            item.parallel.map(function(elt) {
-                              return [prev].concat(_expand([elt]));
-                            }));
-                      } else {
-                        ret = ret.concat(item.parallel.map(
-                            function(elt) {
-                              return _expand([elt]);
-                            }));
-                      }
-                      prev = undefined;
-                    } else {
-                      var i = ret.length - 1;
-                      var flagParallel = false;
-                      while (i >= 0 && (ret[i] instanceof Array)) {
-                        ret[i] = ret[i].concat(item);
-                        i -= 1;
-                        flagParallel = true;
-                      }
-                      if (!flagParallel) {
-                        ret.push(item);
-                      }
-                      prev = item;
-                    }
-                  }, this);
-                  return ret;
-                }
-
-                Graph.expand = function(item) {
-                  var expanded = _expand(item);
-                  var result = [];
-                  var current = [];
-                  expanded.forEach(function(elt) {
-                    if (elt instanceof Array) {
-                      if (current.length > 0) {
-                        current.push(elt[0]);
-                        result.push(current);
-                        current = [];
-                      }
-                      result.push(elt);
-                    } else {
-                      if (result.length > 0 && current.length === 0) {
-                        var lastChain = result[result.length - 1];
-                        var lastElt = lastChain[lastChain.length - 1];
-                        current.push(lastElt);
-                      }
-                      current.push(elt);
-                    }
-                  }, this);
-                  if (current.length > 0) {
-                    result.push(current);
-                  }
-                  return result;
-                };
-
-                Graph.new_expand = function(workflow,nodes) {
-                    var ids = nodes.map(function(elt) {
-                        return elt.id;
-                    });
-                    var result_tmp = [];
-                    for (var i=0; i < workflow.length; i++)
-                    {
-                        var stepNumber = workflow[i].step_number
-                        var edges = workflow[i].edges;
-                        for (var j=0; j < edges.length; j++)
-                        {
-                            var fromNode = edges[j][0];
-                            var toNode = edges[j][1];			
-                            var fromId = ids.indexOf(fromNode)+1;
-                            var toId = ids.indexOf(toNode)+1;
-                            result_tmp.push([fromId,toId]);
-                        }
-                    }
-                    var result = [];
-                    result.push(result_tmp)
-                    return result;
-                };
-
-                Graph.number = function(workflow, num) {
-                  num = (typeof num === 'undefined') ? 0 : num;
-                  var toNum = {};
-                  var toNode = [];
-
-                  function setStep(step, nodeId) {
-                    if (step in toNode) {
-                      toNode[step].push(nodeId);
-                    } else {
-                      toNode[step] = [nodeId];
-                    }
-                  }
-
-                  function setNum(nodeId, beg, end) {
-                    if (end === undefined) {
-                      num = String(beg);
-                      setStep(beg, nodeId);
-                    } else {
-                      num = end + "-" + beg;
-                      setStep(end, nodeId);
-                    }
-                    if (nodeId in toNum) {
-                      toNum[nodeId] += "," + num;
-                    } else {
-                      toNum[nodeId] = num;
-                    }
-                  }
-
-                  function _number(wks, num) {
-                    var ret = 0;
-                    if (wks instanceof Array) {
-                      if (wks.length === 0) {
-                        ret = num;
-                      } else if (wks.length === 1) {
-                        ret = _number(wks[0], num);
-                      } else {
-                        var head = wks[0];
-                        var tail = wks.slice(1);
-                        var beg = _number(head, num);
-                        if (tail[0] instanceof Array) {
-                          var end = _number(tail[0], beg);
-                          setNum(head, beg, end);
-                          beg = end + 1;
-                          tail.shift();
-                        }
-                        ret = _number(tail, beg);
-                      }
-                    } else if ((wks instanceof Object) && 'parallel' in wks) {
-                      var nums = wks.parallel.map(function(branch) {
-                        return _number(branch, num);
-                      });
-                      ret = Math.max.apply(null, nums);
-                    } else {
-                      setNum(wks, num);
-                      ret = num + 1;
-                    }
-                    return ret;
-                  }
-
-                  _number(workflow, num);
-                  // console.log('toNodes=', JSON.stringify(toNode));
-                  // console.log('toNum=',JSON.stringify(toNum));
-                  return {toNum: toNum, toNode: toNode};
-                };
-
-                //aigner: New numbering for the workflow nodes
-                Graph.new_number = function(workflow, num) {
-                    num = (typeof num === 'undefined') ? 0 : num;
-                    var toNum = {};
-                    var toNode = [];
-                    
-                    for (var i=0; i < workflow.length; i++)
-                    {
-                        //aigner: Number the nodes with respect to the defined process steps
-                        //--> toNum
-                        //##########################################
-                        for (var j=0; j < workflow[i].process_step_blocks.length; j++)
-                        {
-                            var proc_id_to = workflow[i].process_step_blocks[j];
-                            if (proc_id_to)
-                            {
-
-                                if (!toNum[proc_id_to])
-                                {
-                                    toNum[proc_id_to] = workflow[i].step_number;
-                                }
-                                else
-                                {
-                                    toNum[proc_id_to] += "," + workflow[i].step_number;
-                                }
-                            }
-                        }
-                        for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
-                        {
-                            var conv_id_to = workflow[i].converger_step_blocks[j];
-                            if (conv_id_to)
-                            {
-                                toNum[conv_id_to] += "," + workflow[i].step_number;
-                                var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
-                                //aigner: CAUTION --> hard coded exception for coordinator
-                                if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
-                            }
-                        }
-                        //##########################################		
-                        //--> toNode
-                        //##########################################
-                        var stepNumber = workflow[i].step_number
-                        var nodeId;
-                        if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
-                        else
-                        {
-                            var nodeIds = [];
-                            for (var j=0; j<workflow[i].edges.length ;j++)
-                            {
-                                nodeIds.push(workflow[i].edges[j][1]);
-                            }
-                            nodeId = nodeIds;
-                        }
-                        toNode[stepNumber] = nodeId;
-                        //##########################################
-                    }	
-                    return {toNum: toNum, toNode: toNode};
-                };
-
-                module.exports = Graph;
-
-                },{}],4:[function(require,module,exports){
-                function Labelizer() {}
-
-                Labelizer.strParse = function(str) {
-                  if (str === "") {
-                    return [{base: '', sub: undefined, sup: undefined}];
-                  }
-
-                  //console.log("STR-->")
-                  //console.log(str);
-                  //aigner: Space sign added
-                  var lstr = str.split(',');
-                  var underscores = /_/g;
-                  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
-
-                  var res = lstr.map(function(s) {
-                    var base;
-                    var sub;
-                    var sup;
-                    
-                    //aigner: Modification. xpath is split after each "/"
-                    var s_split = s.split("/");
-                    s = s_split[s_split.length-1];
-
-                    if ((s.match(underscores) || []).length > 1) {
-                      var mu = s.match(/(.+)^(.+)/);
-                      if (mu) {
-                        return {base: mu[1], sub: undefined, sup: mu[2]};
-                      }
-                      return {base: s, sub: undefined, sup: undefined};
-                    }
-                    var m = s.match(rg);
-                    if (m) {
-                      base = (m[1] ? m[1] : "") + m[2];
-                      if (m[3]) {
-                        sub = m[3].substring(1);
-                      }
-                      if (m[4]) {
-                        sup = m[4].substring(1);
-                      }
-                    } else {
-                      throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
-                    }
-                    return {base: base, sub: sub, sup: sup};
-                  }, this);
-                 
-                  return res;
-                };
-
-                Labelizer.labelize = function() {
-                  var ellipsis = 0;
-
-                  //aigner: createLabel modified. Hide variable names if too long.
-                  function createLabel(selection) 
-                  {
-                    selection.each(function(d) {
-                        //console.log("Labelize-->");
-                        //console.log(d);
-                      var tokens = Labelizer.strParse(d.name);
-                      var text = selection.append("text");
-
-                      var className = selection._groups[0][0].getAttribute("class");
-
-                      if (className.includes("node"))
-                      {
-                        tokens.every(function(token, i, ary)
-                        {
-                            var offsetSub = 0;
-                            var offsetSup = 0;
-                            //aigner: If the node is too big, it will not be shown at first, only when hovering
-                            if (ellipsis < 1 || i < 15) 
-                            {
-                                text.append("tspan").text(token.base);
-                                if (token.sub) 
-                                {
-                                offsetSub = 10;
-                                text.append("tspan")
-                                  .attr("class", "sub")
-                                  .attr("dy", offsetSub)
-                                  .text(token.sub);
-                                }
-                                if (token.sup) {
-                                    offsetSup = -10;
-                                    text.append("tspan")
-                                      .attr("class", "sup")
-                                      .attr("dx", -5)
-                                      .attr("dy", -offsetSub + offsetSup)
-                                      .text(token.sup);
-                                    offsetSub = 0;
-                                }
-                            } else 
-                            {
-                                text.append("tspan")
-                                    .attr("dy", -offsetSub - offsetSup)
-                                    .text("...");
-                                selection.classed("ellipsized", true);
-                                return false;
-                            }
-                            if (i < ary.length - 1) 
-                            {
-                                  text.append("tspan")
-                                    .attr("dy", -offsetSub - offsetSup)
-                                    .text(", ");
-                            }
-                            return true;
-                        }, this);
-                      }
-                      else if(className.includes("edge"))
-                      {	  
-                            var offsetSub = 0;
-                            var offsetSup = 0;
-                            //aigner: If there are more than 5 variables in an edge, they are not shown!
-                            tokens.every(function(token, i, ary)
-                            {           			
-                                if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
-                                else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
-                                else{text_tmp = "conn."}
-                                //if (ary.length>1){text_tmp = text_tmp+"s"};
-                                text.append("tspan")
-                                .attr("dy", -offsetSub - offsetSup)
-                                .text(ary.length + " " + text_tmp);                    
-                                
-                                selection.classed("ellipsized", true);
-                                return false;
-                            }, this);
-                      }
-                    });
-                  }
-
-                  createLabel.ellipsis = function(value) {  
-                    if (!arguments.length) {
-                      return ellipsis;
-                    }
-                    ellipsis = value;
-                    return createLabel;
-                  };
-
-                  return createLabel;
-                };
-
-                Labelizer.tooltipize = function() {
-                  var text = "";
-
-                  function createTooltip(selection) {
-                    var tokens = Labelizer.strParse(text);
-                    var html = [];
-                    tokens.forEach(function(token) {
-                      var item = token.base;
-                      if (token.sub) {
-                        item += "<sub>" + token.sub + "</sub>";
-                      }
-                      if (token.sup) {
-                        item += "<sup>" + token.sup + "</sup>";
-                      }
-                      html.push(item);
-                    }, this);
-                    selection.html(html.join(", "));
-                  }
-
-                  createTooltip.text = function(value) {
-                    if (!arguments.length) {
-                      return text;
-                    }
-                    text = value;
-                    return createTooltip;
-                  };
-
-                  return createTooltip;
-                };
-
-                module.exports = Labelizer;
-
-                },{}],5:[function(require,module,exports){
-                var d3 = require('d3');
-                var Labelizer = require('./labelizer.js');
-
-                var WIDTH = 1000;
-                var HEIGHT = 500;
-                var X_ORIG = 70;
-                var Y_ORIG = 20;
-                var PADDING = 20;
-                var CELL_W = 250;
-                var CELL_H = 75;
-                var MULTI_OFFSET = 3;
-
-                function Cell(x, y, width, height) {
-                  this.x = x;
-                  this.y = y;
-                  this.width = width;
-                  this.height = height;
-                }
-
-                function Xdsm(graph, svgid, tooltip) {
-                  this.graph = graph;
-                  this.tooltip = tooltip;
-                  this.svg = d3.select(".xdsm")
-                               .append("svg")
-                             .attr("width", WIDTH)
-                             .attr("height", HEIGHT)
-                             .attr("class", svgid);
-
-                  this.grid = [];
-                  this.nodes = [];
-                  this.edges = [];
-                }
-
-                Xdsm.prototype.draw = function(graphName) {
-                  var self = this;
-
-                  if (self.graph.refname) {
-                    var ref = self.svg.append('g').classed('title', true);
-
-                    var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
-                        
-                    //ref.append("text").text(graphName);
-                    var bbox = ref.nodes()[0].getBBox();
-                    ref.insert("rect", "text")
-                        .attr('x', bbox.x)
-                        .attr('y', bbox.y)
-                        .attr('width', bbox.width)
-                        .attr('height', bbox.height);
-
-                    ref.attr('transform',
-                             'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
-                  }
-
-                  self.nodes = self._createTextGroup("node");
-                  self.edges = self._createTextGroup("edge");
-
-                  // Workflow
-                  self._createWorkflow();
-
-                  // Layout texts
-                  self._layoutText(self.nodes);
-                  self._layoutText(self.edges);
-
-                  // Rectangles for nodes
-                  self.nodes.each(function(d, i) {
-                    var that = d3.select(this);
-                    that.call(self._customRect.bind(self), d, i, 0);
-                    if (d.isMulti) {
-                      that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
-                      that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
-                    }
-                  });
-
-                  // Trapezium for edges
-                  self.edges.each(function(d, i) {
-                    var that = d3.select(this);
-                    that.call(self._customTrapz.bind(self), d, i, 0);
-                    if (d.isMulti) {
-                      that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
-                      that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
-                    }
-                  });
-
-                  // Dataflow
-                  self._createDataflow(self.edges);
-                    
-                  //aigner: set svg size
-                  var w = CELL_W * (self.graph.nodes.length + 1);
-                  var h = CELL_H * (self.graph.nodes.length + 1);
-                  self.svg.attr("width", w).attr("height", h);
-
-                  var bordercolor = 'black';
-                  self.svg.append("rect")
-                            .classed("border", true)
-                            .attr("x", 4)
-                            .attr("y", 4)
-                            .attr("height", h - 4)
-                            .attr("width", w - 4)
-                            .style("stroke", bordercolor)
-                            .style("fill", "none")
-                            .style("stroke-width", 0);
-                            
-                  //aigner: PlayButton for animation
-                  var playButton = self.svg.append("g").attr("class", "playButton")
-                      .attr("transform", "translate("+ 10 +","+ 10 +")")
-                      
-                  playButton
-                    .append("rect")
-                      .attr("class", "playButton_rect")
-                      .attr("width", 50)
-                      .attr("height", 50)
-                      .attr("rx", 4)
-                      .style("fill", "#555555");
-                      
-                  playButton
-                    .append("path")
-                      .attr("class", "playButton_triangle")
-                      .attr("d", "M15 10 L15 40 L35 25 Z")
-                      .style("fill", "white");
-                      
-                  playButton.append("text")
-                      .attr("y",20)
-                      .attr("x",60)
-                      .text("Play Workflow")
-
-                  //aigner: Hide playbutton if there is no workflow process
-                  if(self.graph.nodesByStep.length<1)
-                  {
-                      playButton.attr("visibility","hidden")
-                  }
-                  playButton.append("svg:title").text("Click to play workflow");
-                };
-
-                Xdsm.prototype._createTextGroup = function(kind) {
-                  var self = this;
-
-                  var group = self.svg.append('g').attr("class", kind + "s");
-
-                  var textGroups =
-                    group.selectAll("." + kind)
-                      .data(this.graph[kind + "s"])
-                    .enter()
-                      .append("g").attr("class", function(d) {
-                        var klass = kind === "node" ? d.type : "dataInter";
-                        if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
-                          klass = "dataIO";
-                        }
-                        return d.id + " " + kind + " " + klass;
-                      }).each(function() {
-                        var labelize = Labelizer.labelize().ellipsis(5);
-                        d3.select(this).call(labelize);
-                      });
-
-                  d3.selectAll(".ellipsized")
-                    .on("mouseover", function(d) {
-                        d3.select(this).style("cursor", "pointer")
-                        self.tooltip.transition().duration(200).style("opacity", 0.9);
-                        var pipeData = d.name.split(",");
-                        var pipeVariables=[];
-                        for (var i=0; i<pipeData.length; i++)
-                        {
-                            if (pipeData[i].includes("/"))
-                            {
-                                var splitPipeData = pipeData[i].split("/");
-                                pipeVariables.push(splitPipeData[splitPipeData.length-1]);
-                            }
-                        }
-                        
-
-                        var pruned_pipeVars = {};
-                        var tooltipText="";
-                        pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
-                        for(var keyName in pruned_pipeVars) {
-                            var textTmp;
-                            var value = pruned_pipeVars[keyName]
-                            if (value>1){textTmp = String(keyName+"("+value+")")}
-                            else{textTmp=String(keyName)}
-                            if (tooltipText==""){tooltipText+=textTmp}
-                            else{tooltipText+=","+textTmp}
-                        }
-                        
-                        var tooltipize = Labelizer.tooltipize().text(tooltipText);
-                        self.tooltip.call(tooltipize)
-                          .style("width", "200px")
-                          .style("left", (d3.event.pageX) + "px")
-                          .style("top", (d3.event.pageY - 28) + "px");
-                    })
-                    .on("mouseout", function() {
-                        self.tooltip.transition().duration(500).style("opacity", 0);
-                    });
-
-                  return textGroups;
-                };
-
-                Xdsm.prototype._createWorkflow = function() {
-                  //  console.log(JSON.stringify(this.graph.chains));
-                  var workflow = this.svg.insert("g", ":first-child")
-                                    .attr("class", "workflow");
-                  workflow.selectAll("g")
-                    .data(this.graph.chains)
-                  .enter()
-                    .insert('g').attr("class", "workflow-chain")
-                    .selectAll('polyline')
-                      .data(function(d) { return d; })  // eslint-disable-line brace-style
-                    .enter()
-                      .append("polyline")
-                        .attr("class", function(d) {
-                          return "link_" + d[0] + "_" + d[1];
-                        })
-                        .attr("points", function(d) {
-                          var w = CELL_W * Math.abs(d[0] - d[1]);
-                          var h = CELL_H * Math.abs(d[0] - d[1]);
-                          var points = [];
-                          if (d[0] < d[1]) {
-                            if (d[0] !== 0) {
-                              points.push((-w) + ",0");
-                            }
-                            points.push("0,0");
-                            if (d[1] !== 0) {
-                              points.push("0," + h);
-                            }
-                          } else {
-                            if (d[0] !== 0) {
-                              points.push(w + ",0");
-                            }
-                            points.push("0,0");
-                            if (d[1] !== 0) {
-                              points.push("0," + (-h));
-                            }
-                          }
-                          return points.join(" ");
-                        })
-                      .attr("transform", function(d) {
-                        var max = Math.max(d[0], d[1]);
-                        var min = Math.min(d[0], d[1]);
-                        var w;
-                        var h;
-                        if (d[0] < d[1]) {
-                          w = CELL_W * max + X_ORIG;
-                          h = CELL_H * min + Y_ORIG;
-                        } else {
-                          w = CELL_W * min + X_ORIG;
-                          h = CELL_H * max + Y_ORIG;
-                        }
-                        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-                      });
-                };
-
-                Xdsm.prototype._createDataflow = function(edges) {
-                  var dataflow = this.svg.insert("g", ":first-child")
-                                   .attr("class", "dataflow");
-
-                  edges.each(function(d, i) {
-                    dataflow.insert("polyline", ":first-child")
-                      .attr("points", function() {
-                        var w = CELL_W * Math.abs(d.col - d.row);
-                        var h = CELL_H * Math.abs(d.col - d.row);
-                        var points = [];
-                        if (d.iotype === "in") {
-                          if (!d.io.fromU) {
-                            points.push((-w) + ",0");
-                          }
-                          points.push("0,0");
-                          if (!d.io.toU) {
-                            points.push("0," + h);
-                          }
-                        } else {
-                          if (!d.io.fromU) {
-                            points.push(w + ",0");
-                          }
-                          points.push("0,0");
-                          if (!d.io.toU) {
-                            points.push("0," + (-h));
-                          }
-                        }
-                        return points.join(" ");
-                      }).attr("transform", function() {
-                        var m = (d.col === undefined) ? i : d.col;
-                        var n = (d.row === undefined) ? i : d.row;
-                        var w = CELL_W * m + X_ORIG;
-                        var h = CELL_H * n + Y_ORIG;
-                        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-                      });
-                  });
-                };
-
-                Xdsm.prototype._layoutText = function(items) {
-                  var grid = this.grid;
-                  items.each(function(d, i) {
-                    var item = d3.select(this);
-                    if (grid[i] === undefined) {
-                      grid[i] = new Array(items.length);
-                    }
-                    item.select("text").each(function(d, j) {
-                      var that = d3.select(this);
-                      var data = item.data()[0];
-                      var m = (data.row === undefined) ? i : data.row;
-                      var n = (data.col === undefined) ? i : data.col;
-                      var bbox = that.nodes()[j].getBBox();
-                      grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
-                      that.attr("x", function() {
-                        return grid[m][n].x;
-                      }).attr("y", function() {
-                        return grid[m][n].y;
-                      }).attr("width", function() {
-                        return grid[m][n].width;
-                      }).attr("height", function() {
-                        return grid[m][n].height;
-                      });
-                    });
-                  });
-
-                  items.attr("transform", function(d, i) {
-                    var m = (d.col === undefined) ? i : d.col;
-                    var n = (d.row === undefined) ? i : d.row;
-                    var w = CELL_W * m + X_ORIG;
-                    var h = CELL_H * n + Y_ORIG;
-                    return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
-                  });
-                };
-
-                Xdsm.prototype._customRect = function(node, d, i, offset) {
-                  var grid = this.grid;
-                  node.insert("rect", ":first-child").attr("x", function() {
-                    return grid[i][i].x + offset - PADDING;
-                  }).attr("y", function() {
-                    return -grid[i][i].height * 2 / 3 - PADDING - offset;
-                  }).attr("width", function() {
-                    return grid[i][i].width + (PADDING * 2);
-                  }).attr("height", function() {
-                    return grid[i][i].height + (PADDING * 2);
-                  }).attr("rx", function() {
-                    var rounded = d.type === 'optimization' ||
-                                  d.type === 'mda' ||
-                                  d.type === 'doe' ||
-                                  d.type === 'converger';
-                    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
-                  }).attr("ry", function() {
-                    var rounded = d.type === 'optimization' ||
-                                  d.type === 'mda' ||
-                                  d.type === 'doe' ||
-                                  d.type === 'converger';
-                    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
-                  });
-                };
-
-                Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
-                  var grid = this.grid;
-                  edge.insert("polygon", ":first-child").attr("points", function(d) {
-                    var pad = 5;
-                    var w = grid[d.row][d.col].width;
-                    var h = grid[d.row][d.col].height;
-                    var topleft = (-pad - w / 2 + offset) + ", " +
-                                  (-pad - h * 2 / 3 - offset);
-                    var topright = (w / 2 + pad + offset + 5) + ", " +
-                                   (-pad - h * 2 / 3 - offset);
-                    var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
-                                   (pad + h / 3 - offset);
-                    var botleft = (-pad - w / 2 + offset - 5) + ", " +
-                                  (pad + h / 3 - offset);
-                    var tpz = [topleft, topright, botright, botleft].join(" ");
-                    return tpz;
-                  });
-                };
-
-                module.exports = Xdsm;
-
-                },{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
-                /*
-                 * XDSMjs
-                 * Copyright 2016 Rémi Lafage
-                 */
-                "use strict";
-
-
-
-
-                var d3 = require('d3');
-                var Graph = require('./src/graph');
-                var Xdsm = require('./src/xdsm');
-                var Animation = require('./src/animation');
-
-
-                //aigner: NEW!
-                //#####################################################################//
-                //aigner: functions for drawing expand- and collapse-symbols
-                function drawExpandSymbol(aCircle, line1, line2)
-                {        
-                     aCircle = aCircle
-                        .attr("r", 10)
-                        .style("stroke", "black")
-                        .style("stroke-width", 2)
-                        .style("fill", "#99CC00")
-                        .style("fill-opacity", .6)
-                    line1 = line1
-                        .attr("x1", parseFloat(aCircle.attr("cx"))-5)
-                        .attr("y1", parseFloat(aCircle.attr("cy")))
-                        .attr("x2", parseFloat(aCircle.attr("cx"))+5)
-                        .attr("y2", parseFloat(aCircle.attr("cy")))
-                        .style("stroke", "black")
-                        .style("stroke-width", 2);
-                    line2 = line2
-                        .attr("x1", parseFloat(aCircle.attr("cx")))
-                        .attr("y1", parseFloat(aCircle.attr("cy"))-5)
-                        .attr("x2", parseFloat(aCircle.attr("cx")))
-                        .attr("y2", parseFloat(aCircle.attr("cy"))+5)
-                        .style("stroke", "black")
-                        .style("stroke-width", 2);
-                }
-                function drawRemoveSymbol(anXdsm, aCircle, aMinus)
-                {        
-                     var xOffset=150;
-                     var yOffset=12;
-                     aCircle = aCircle
-                        .attr("cx", anXdsm.svg.attr("width")-xOffset)
-                        .attr("cy", yOffset)
-                        .attr("r", 10)
-                        .classed("remCircle",true)
-                    aMinus = aMinus
-                        .attr("x1", anXdsm.svg.attr("width")-xOffset+5)
-                        .attr("y1", yOffset)
-                        .attr("x2", anXdsm.svg.attr("width")-xOffset-5)
-                        .attr("y2", yOffset)
-                        .classed("remMinus",true)
-                }
-                function drawTreeRemoveSymbol(aRemoveSymbol)
-                {
-                    aRemoveSymbol = aRemoveSymbol
-                        .attr("class", "treeRemoveSymbol")
-                        .attr("transform", "translate(38,12)")
-                    var circle = aRemoveSymbol.append("circle");
-                    var minus = aRemoveSymbol.append("line");
-                    var cx = -20;
-                    var cy = 12;
-                    circle = circle
-                        .attr("cx", cx+5)
-                        .attr("cy", cy)
-                        .attr("r", 10)
-                        .classed("remCircle",true)
-                    minus = minus
-                        .attr("x1", cx)
-                        .attr("y1", cy)
-                        .attr("x2", cx+10)
-                        .attr("y2", cy)
-                        .classed("remMinus",true)
-                    aRemoveSymbol
-                        .on("mouseover", function(){
-                            d3.select(this).style("cursor", "pointer")
-                            circle.style("fill", "red").style("fill-opacity", .8);
-                            })
-                        .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-                }
-
-                //aigner: Update of the sub workflows
-                function update_subXdsm(xdsms, refName)
-                {
-                    var playButton = d3.select(".xdsm").select("."+refName).select(".playButton");
-                    var rect = playButton.select(".playButton_rect");
-                    playButton.on("mouseover",function(){
-                            d3.select(this).style("cursor", "pointer")
-                            rect.style("fill","#3399FF");
-                        })
-                        .on("mousedown", function()
-                        {
-                            rect.style("fill","#3399FF");
-                            var anim = new Animation(xdsms, refName);
-                            anim.run();
-                        })
-                        .on("mouseup", function(){rect.style("fill","#4B4B4B");})
-                        .on("mouseout", function(){rect.style("fill","#555555");})
-                }
-                //d3-context-menu for right-click-option
-                d3.contextMenu = function (menu, openCallback) {
-
-                    // create the div element that will hold the context menu
-                    d3.selectAll('.d3-context-menu').data([1])
-                        .enter()
-                        .append('div')
-                        .attr('class', 'd3-context-menu');
-
-                    // close menu
-                    d3.select('body').on('click.d3-context-menu', function() {
-                        d3.select('.d3-context-menu').style('display', 'none');
-                    });
-
-                    // this gets executed when a contextmenu event occurs
-                    return function(data, index) {	
-                        var elm = this;
-
-                        d3.selectAll('.d3-context-menu').html('');
-                        var list = d3.selectAll('.d3-context-menu').append('ul');
-                            list.selectAll('li').data(menu).enter()
-                            .append('li')
-                            .html(function(d) {
-                                return d.title;
-                            })
-                            .on('mousedown', function(d, i) {
-                                d.onMouseDown(elm, data, index);
-                            })
-                            .on('mouseup', function(d, i) {
-                                d.onMouseUp(elm, data, index);
-                                d3.select('.d3-context-menu').style('display', 'none');
-                            })
-                            .on('mouseenter',function(d,i){
-                                d.onMouseOver(elm,data,index);
-                                if(d.childrenItems.length>0 )
-                                     {
-                                      d3.select(this).selectAll("ul").remove(); 
-                                      d3.select(this)
-                                        .append("ul")
-                                        .selectAll("li")
-                                           .data(d.childrenItems)
-                                            .enter().append("li")
-                                              .text(function(d) { return d.title; })
-                                         .on("mouseenter", function(d,i){
-                                                d.onMouseOver(elm,data,index);
-                                            })
-                                         .on('click',  function(d, i) {
-                                                d.onMouseClick(elm, d, index);
-                                            })
-                                         .on('mouseleave',function(d,i){
-                                            
-                                            });
-                                     }
-                                 else
-                                     return false;
-                            })
-                            .on('mouseleave',function(d,i){
-                                d3.select(this).selectAll("ul").style('display', 'none')                  
-                            });
-                        
-                          
-
-                        // the openCallback allows an action to fire before the menu is displayed
-                        // an example usage would be closing a tooltip
-                        if (openCallback) openCallback(data, index);
-
-                        // display context menu
-                        d3.select('.d3-context-menu')
-                            .style('left', (d3.event.pageX - 2) + 'px')
-                            .style('top', (d3.event.pageY - 2) + 'px')
-                            .style('display', 'block');
-
-                        d3.event.preventDefault();
-                    };
-                };
-                //aigner: Move to front function
-                d3.selection.prototype.moveToFront = function() {  
-                  return this.each(function(){
-                    this.parentNode.appendChild(this);
-                  });
-                };
-                //aigner: Include function
-                function include(arr,obj) {
-                        return (arr.indexOf(obj) != -1);
-                }
-
-                //aigner: Function creates a table
-                function tabulate(aTable,data,columns) {
-                    var thead = aTable.append('thead');
-                    var	tbody = aTable.append('tbody');  
-
-                    // create a row for each object in the data
-                    var rows = tbody.selectAll('tr')
-                      .data(data)
-                      .enter()
-                      .append('tr');
-
-                    // create a cell in each row for each column
-                    var cells = rows.selectAll('td')
-                      .data(function (row) {
-                        return columns.map(function (column) {
-                          return {column: column, value: row[column]};
-                        });
-                      })
-                      .enter()
-                      .append('td')
-                        .html(function (d) { return d.value; });
-
-                    return aTable;
-                }
-
-                function loader(config) {
-                  return function() {
-                    var radius = Math.min(config.width, config.height) / 2;
-                    var tau = 2 * Math.PI;
-
-                    var arc = d3.svg.arc()
-                            .innerRadius(radius*0.5)
-                            .outerRadius(radius*0.9)
-                            .startAngle(0);
-
-                    var svg = d3.select(config.container).append("svg")
-                        .attr("id", config.id)
-                        .attr("width", config.width)
-                        .attr("height", config.height)
-                      .append("g")
-                        .attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")")
-
-                    var background = svg.append("path")
-                            .datum({endAngle: 0.33*tau})
-                            .style("fill", "#4D4D4D")
-                            .attr("d", arc)
-                            .call(spin, 1500)
-
-                    function spin(selection, duration) {
-                        selection.transition()
-                            .ease("linear")
-                            .duration(duration)
-                            .attrTween("transform", function() {
-                                return d3.interpolateString("rotate(0)", "rotate(360)");
-                            });
-
-                        setTimeout(function() { spin(selection, duration); }, duration);
-                    }
-
-                    function transitionFunction(path) {
-                        path.transition()
-                            .duration(7500)
-                            .attrTween("stroke-dasharray", tweenDash)
-                            .each("end", function() { d3.select(this).call(transition); });
-                    }
-
-                  };
-                }
-
-
-                var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
-                
-                //aigner: NEW!
-                //aigner: Here, the data is read and the XDSM is created
-                //#####################################################################//
-                function startDataModel(data) 
-                {				                                  
-                    d3.select("body").append("div").attr("class","modelViewerDiv")	
-                    //################################################################################################//	
-                    var headerDiv = d3.select(".modelViewerDiv").append("div").attr("class","panel panel-primary")
-                    headerDiv.append("div").attr("class","panel-heading text-center")
-                        .append("h3")
-                        .attr("class","panel-title")
-                        .style("font-family","Arial")
-                        .style("font-size","20pt")
-                        .text("VISTOMS Data Model Viewer")
-                    //################################################################################################//	
-                    
-                    
-                    //aigner: Data Model Expand Button
-                    //##########################################################
-                    var dataModelDiv = d3.select(".modelViewerDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
-                    var ul = dataModelDiv.append("ul")
-                    var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
-                    dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
-                        .attr("align","left")
-                        .style("margin-left","6px")
-                        .style("margin-right","-10px")
-                        .style("margin-top","10px")
-                        .style("margin-bottom","0px")
-                        .attr("height","20")
-                        .attr("width","20")
-                    dropdown1.append("a").text("View Data Model")
-                    dropdown1.on("click", function()
-                    {		
-                        showFullTree()
-                    })
-                    
-                    //aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
-                    dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
-                    //##########################################################
-                    
-                    //aigner: Tree option menu to select which kind of tree view the user wants to see
-                    //#####################################################################//
-                    var emptyArray;
-                    function showFullTree()
-                    {
-                        //expandSymbolDiv.remove();
-                        var treeLayoutdiv = d3.select(".modelViewerDiv").append("div").attr("class","treeDiv")
-                                                        .style("left",(d3.event.pageX) + "px")
-                                                        .style("top",(d3.event.pageY - 28) + "px")
-                                                        .style("position", "absolute")
-                        var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-                        var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-                        var name = data.modelName;
-                        maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name);
-                        //Remove Symbol is created
-                        var removeSymbol = treeLayout.append("g");
-                        drawTreeRemoveSymbol(removeSymbol);
-                        removeSymbol.on("mousedown", function(d)
-                        {
-                            treeLayoutdiv.remove();
-                        })
-                    }
-                    //#####################################################################//
-
-                    
-                        
-                    function clean_tree(objArray)
-                    {
-                        for (var i = 0; i < objArray.length; ++i) 
-                        {
-                            var obj = objArray[i];
-                            if (obj.children)
-                            {
-                                if (obj.children.length==0)
-                                {
-                                    objArray.splice(i, 1);
-                                    i--;
-                                }
-                                clean_tree(obj.children);
-                            }
-                        }
-                    }
-                    function countElements(node, counter) 
-                    {
-                        counter ++;
-                        if (node.children)
-                        {
-                            if (node.children.length !== 0)
-                            {
-                                node.children.forEach(function(n)
-                                {
-                                    counter = countElements(n, counter);
-                                });
-                            }
-                        }
-                        return counter;
-                    }
-                    
-                    
-                    function maketreeLayout(pipeData, layout, svg, div, aName)
-                    {			
-                        //aigner: here the tree layout begins
-                        //Drag Function for treeLayout
-                        var xPos_init = d3.event.pageX - 2;
-                        var yPos_init = d3.event.pageY - 2;
-                        var xOffset_tmp;
-                        var yOffset_tmp;
-                        var drag = div.call(d3.drag()
-                            .on("start", dragstarted)
-                            .on("drag", dragged)
-                            .on("end", dragended));
-                        function dragstarted() {
-                          d3.select(this).style("cursor", "grabbing")
-                          d3.select(this).raise().classed("active", true);
-                          xOffset_tmp = xPos_init-d3.event.x;
-                          yOffset_tmp = yPos_init-d3.event.y;
-                        }
-                        function dragged() {
-                             d3.select(this).classed("active", false)
-                                .style("left",(d3.event.x+xOffset_tmp) + "px")
-                                .style("top",(d3.event.y+yOffset_tmp) + "px")
-                        }
-                        function dragended() {
-                          d3.select(this).style("cursor", "grab")
-                          d3.select(this).classed("active", false);
-                          xPos_init = d3.event.x+xOffset_tmp;
-                          yPos_init = d3.event.y+yOffset_tmp;
-                        }
-                        createTree()
-                        
-                        function createTree()
-                        {
-                            var schema = data.schema;
-                            var treeData = (JSON.parse(JSON.stringify(schema)));				
-                            //aigner: Here, the minimalized tree is created!
-                            //Transferred variables: 
-                            //1) parentXPath --> xPath until current nodes
-                            //2) objArray --> Array of current nodes
-                            //3) xPathList --> Array of actually used pipeLine data
-                            
-                            if (pipeData)
-                            {
-                                prune_tree("/"+treeData.name+"/", treeData.children, pipeData);
-                                //aigner: count all descendants of a node
-                                var firstEl = pipeData.split("/")[1];
-                                if(firstEl != treeData.name)
-                                {
-                                    var cleanOperations = countElements(treeData,0)
-                                    for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
-                                }
-                            }
-                            
-                            // Set the dimensions and margins of the diagram
-                            var margin = {top: 20, right: 90, bottom: 20, left: 90},
-                                width = 960 - margin.left - margin.right,
-                                height = 500 - margin.top - margin.bottom;
-
-                            // append the svg object to the body of the page
-                            // appends a 'group' element to 'svg'
-                            // moves the 'group' element to the top left margin
-                            var offset_tmp = 60;
-                            svg = svg.attr("width", width + margin.right + margin.left+offset_tmp)
-                                     .attr("height", height + margin.top + margin.bottom+offset_tmp);
-                            div = div.attr("width", width + margin.right + margin.left+offset_tmp)
-                                     .attr("height", height + margin.top + margin.bottom+offset_tmp);
-                            layout = layout
-                                .attr("width", width + margin.right + margin.left)
-                                .attr("height", height + margin.top + margin.bottom);
-                            var name;
-                            var rect = layout.append("rect")
-                                    .attr("class","treeFrame")
-                                    .attr("width", 0)
-                                    .attr("height", 70)
-                                    .attr("transform", "translate("
-                                      + String(10) + "," + String(10) + ")")
-                                    .attr("fill", "white")
-                                    .attr("stroke", "darkgrey")
-                                    .attr("stroke-width", 0)
-                                    .attr("fill-opacity", 0.8)
-                            //aigner: Put remove button on top of the rect
-                            d3.selectAll(".treeRemoveSymbol").moveToFront();
-                            
-                            //aigner: Exit, if no tree data is available!
-                            if (!treeData.children || treeData.children.length==0)
-                            {
-                                var newText = layout.append('text')
-                                .attr("dx", 40)
-                                .attr("dy", 55)
-                                .style("font-family", "Arial")
-                                .style("font-size", "32pt")
-                                .style("font-weight", "bold")
-                                .html(function (d) {
-                                    return 'No tree view available! &#8594; Please check data for consistency!';
-                                });
-                                
-                                var newWidth;
-                                rect.attr("width",  function(d) {
-                                    newWidth = this.parentNode.getBBox().width+20;
-                                    return newWidth;}) 
-                                div = div.attr("width", newWidth+30)
-                                svg = svg.attr("width", newWidth+30)
-                                return;
-                            }
-                            
-                            var newText = layout.append('text')
-                                .attr("dx", 40)
-                                .attr("dy", 30)
-                                .style("font-family", "Arial")
-                                .style("font-size", "12pt")
-                                .style("font-weight", "bold")
-                                .text(aName);
-                            
-                            // Calculate total nodes, max label length
-                            var totalNodes = 0;
-                            var maxLabelLength = 0;
-                            
-                            var i = 0,
-                                duration = 500,
-                                root;
-
-                            // declares a tree layout and assigns the size
-                            var treemap = d3.tree().size([height, width]);
-
-                            // Assigns parent, children, height, depth
-                            root = d3.hierarchy(treeData, function(d) { return d.children; });
-                            root.x0 = height / 2;
-                            root.y0 = 0;
-                            
-                            // Append a group which holds all nodes and which the zoom Listener can act upon.
-                            var svgGroup_xOff = root.data.name.length*10
-                            var svgGroup = layout.append("g")
-                                .attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
-                            
-                                
-                            // Collapse root initially
-                            collapse(root);
-                            update(root);
-
-                            // Collapse the node and all it's children
-                            function collapse(d) {
-                              if(d.children) {
-                                d._children = d.children
-                                d._children.forEach(collapse)
-                                d.children = null
-                              }
-                            }
-                            // Collapse the node and all it's children
-                            function expand(d) {
-                              if(d._children) {
-                                d.children = d._children
-                                d.children.forEach(expand)
-                                d._children = null
-                              }
-                            }
-                            // Toggle children on click.
-                            function click(d) 
-                            {
-                                if (d.children) {
-                                    d._children = d.children;
-                                    d.children = null;
-                                } else 
-                                {
-                                    d.children = d._children;
-                                    d._children = null;
-                                }
-                                update(d);
-                            }
-                            // Collapse/expand entire tree on double-click
-                            function dblclick(d) 
-                            {
-                                if(d.children) 
-                                {
-                                    collapse(d);
-                                }
-                                else if(d._children)
-                                {
-                                    expand(d);
-                                }
-                                update(d);
-                            }	
-                            
-                            function update(source) 
-                            {
-                                var levelWidth = [1];
-                                var getLevelWidth = function(level, n) 
-                                {
-                                    if (n.children && n.children.length > 0) {
-                                        if (levelWidth.length <= level + 1) levelWidth.push(0);
-                                        
-                                        //establish maxLabelLength
-                                        maxLabelLength = Math.max(n.data.name.length, maxLabelLength);
-                                        
-                                        levelWidth[level + 1] += n.children.length;
-                                        n.children.forEach(function(d) {
-                                            getLevelWidth(level + 1, d);
-                                        });
-                                    }
-                                };
-                                getLevelWidth(0, root);
-                                var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
-                                //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour 
-                                
-                                layout = layout.attr("height", newHeight + margin.top + margin.bottom)
-                                svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom)
-                                treemap = treemap.size([newHeight, width]);
-                                
-                                
-                                // Assigns the x and y position for the nodes
-                                var treeData = treemap(root);
-
-                                // Compute the new tree layout.
-                                var nodes = treeData.descendants(),
-                                    links = treeData.descendants().slice(1);
-                                
-                                //aigner: count all descendants of a node
-                                function countDescendants(node, counter) 
-                                {
-                                    if (node._children)
-                                    {
-                                        node._children.forEach(function(n)
-                                        {
-                                            counter = countDescendants(n, counter);
-                                        });
-                                    }
-                                    else if (node.children)
-                                    {
-                                        node.children.forEach(function(n)
-                                        {
-                                            counter = countDescendants(n, counter);
-                                        });
-                                    }
-                                    else
-                                    {
-                                        counter ++;
-                                    }
-                                    return counter;
-                                }
-                                
-                                
-                                var depth_tmp = 0;
-                                var labelLength = [];
-                                labelLength.push(0);
-                                nodes.forEach(function(d) 
-                                {				
-                                    //aigner: If node is collapsed show number of ancestors
-                                    if (d._children)
-                                    {
-                                        d._childrenNum = countDescendants(d, 0);
-                                        d.data.text = d.data.name + " (" + d._childrenNum + ")";
-                                    }
-                                    else 
-                                    {
-                                        d.data.text = d.data.name
-                                    }
-                                    
-                                    //aigner: Find maximum labelLength for each level
-                                    if (d.depth>depth_tmp)
-                                    {
-                                        depth_tmp = d.depth;
-                                        labelLength.push(d.data.text.length);
-                                    }
-                                    else
-                                    {
-                                        if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);}
-                                    }
-                                });
-                                // Set widths between levels based on labelLength of each level.
-                                var y_tmp = 100;		
-                                var depth_tmp = 0;							
-                                nodes.forEach(function(d) 
-                                {
-                                    if (d.depth>depth_tmp)
-                                    {
-                                        depth_tmp = d.depth;
-                                        d.y = y_tmp+(labelLength[depth_tmp])*12+50;
-                                    }
-                                    else
-                                    {
-                                        d.y = y_tmp;
-                                    }
-                                    newWidth=d.y;
-                                    y_tmp = d.y;
-                                });
-                                
-                                
-                                function getTextWidth(text, font) 
-                                {
-                                    // re-use canvas object for better performance
-                                    var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
-                                    var context = canvas.getContext("2d");
-                                    context.font = font;
-                                    var metrics = context.measureText(text);
-                                    return metrics.width;
-                                }					
-                                newWidth=Math.max(newWidth,getTextWidth(aName,"Arial 12pt"));
-                                
-                                //aigner: Adjust height and width of the frame
-                                div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-                                div = div.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
-                                    .on("mousedown", function(d) {
-                                        //d3.select(this).moveToFront();
-                                    })
-                                svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
-                                svg = svg.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
-                                rect = rect.attr("height", newHeight + margin.top + margin.bottom)
-                                rect = rect.attr("width", newWidth + margin.top + margin.bottom+400+maxLabelLength*15)
-                                
-                                
-                                // ****************** Nodes section ***************************
-                                // Update the nodes...
-                                var node = svgGroup.selectAll('g.treeNode')
-                                  .data(nodes, function(d) {return d.id || (d.id = ++i); });
-                                
-                                var dblclick_timer = false;
-                                // Enter any new modes at the parent's previous position.
-                                var nodeEnter = node.enter().append('g')
-                                  .attr('class', 'treeNode')
-                                  .attr("transform", function(d) {
-                                    return "translate(" + source.y0 + "," + source.x0 + ")";
-                                })
-                                .on("mousedown", function(d) {
-                                    //prevent tree from expanding on right click!
-                                    if (d3.event.which != 3)
-                                    {
-                                        // if double click timer is active, this click is the double click
-                                        if ( dblclick_timer )
-                                        {
-                                            clearTimeout(dblclick_timer)
-                                            dblclick_timer = false
-                                            // double click code code comes here
-                                            //console.log("DOUBLE CLICK")
-                                            dblclick(d);
-                                        }
-                                        // otherwise, what to do after single click (double click has timed out)
-                                        else dblclick_timer = setTimeout( function(){
-                                            dblclick_timer = false
-                                            // single click code code comes here
-                                            //console.log("SINGLE CLICK")
-                                            click(d);
-                                        }, 250)
-                                    }
-                                    
-                                })
-                                
-                                // Add Circle for the nodes
-                                nodeEnter.append('circle')
-                                  .attr('class', 'treeNode')
-                                  .attr('r', 4.5)
-                                  .style("fill", function(d) {
-                                        if (d._children)
-                                        {
-                                            if(aName.includes("Input")){return '#ea9999'}
-                                            else if(aName.includes("Output")){return '#d6ea99'}
-                                            else {return "lightsteelblue"}
-                                        }
-                                        else {return "#fff"}
-                                  })
-                                  .style("stroke", function(d) {
-                                        if(aName.includes("Input")){
-                                            //console.log(d);
-                                            return '#CC0000'}
-                                        else if(aName.includes("Output")){
-                                            //console.log(d);
-                                            return '#99CC00'}
-                                  });
-
-                                // Add labels for the nodes
-                                nodeEnter.append('text')
-                                  .attr('class', 'nodeText')
-                                  .attr("dy", ".35em")
-                                  .attr("x", function(d) {
-                                      return d.children || d._children ? -13 : 13;
-                                  })
-                                  .attr("text-anchor", function(d) {
-                                      return d.children || d._children ? "end" : "start";
-                                  })
-                                  //.text(function(d) { return d.data.text; });
-                                  
-                                  
-                                // Function to download data to a file
-                                function download(filename, text) {
-                                    var element = document.createElement('a');
-                                    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
-                                    element.setAttribute('download', filename);
-
-                                    element.style.display = 'none';
-                                    document.body.appendChild(element);
-
-                                    element.click();
-
-                                    document.body.removeChild(element);
-                                }
-                                
-                                //Highlight function, that shows usage of a node in the XDSM
-                                function highlight(data,aText)
-                                {
-                                    aText = "/"+data.data.name+aText;
-                                    if (data.parent){highlight(data.parent,aText)}
-                                    else
-                                    {
-                                        scenarioKeys.forEach(function(k)
-                                        {
-                                            var xdsm_tmp;
-                                            xdsm_tmp = xdsms[k];
-                                            if (xdsm_tmp)
-                                            {
-                                                xdsm_tmp.svg.selectAll(".edge").each(function(p) 
-                                                {
-                                                    var firstElement_tmp = p.name.split("/")[1]
-                                                    var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-                                                    if (include(p.name,text_fromFirst))
-                                                    {
-                                                        var highlightEdge = d3.select(this).select("polygon");
-                                                        highlightEdge
-                                                            .style("stroke-width",5.)
-                                                            .style("stroke","#CC0000")
-                                                        d3.selectAll(".treeFrame")
-                                                            .attr("fill-opacity", 0.5)
-                                                            .attr("stroke-opacity", 0.5);
-                                                        d3.selectAll(".nodeText").style("fill-opacity",0.5);
-                                                    }
-                                                })
-                                            }
-                                        })
-                                    }
-                                }
-                                
-                                //Unhighlight function again
-                                function unhighlight(data,aText)
-                                {
-                                    aText = "/"+data.data.name+aText;
-                                    if (data.parent){unhighlight(data.parent,aText)}
-                                    else
-                                    {
-                                        scenarioKeys.forEach(function(k)
-                                        {
-                                            var xdsm_tmp;
-                                            xdsm_tmp = xdsms[k];
-                                            if (xdsm_tmp)
-                                            {
-                                                xdsm_tmp.svg.selectAll(".edge").each(function(p) 
-                                                {
-                                                    var firstElement_tmp = p.name.split("/")[1]
-                                                    var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
-                                                    if (include(p.name,text_fromFirst))
-                                                    {
-                                                        var highlightEdge = d3.select(this).select("polygon");
-                                                        highlightEdge
-                                                            .style("stroke-width",1.)
-                                                            .style("stroke","black");
-                                                        d3.selectAll(".treeFrame")
-                                                            .attr("fill-opacity", 0.8)
-                                                            .attr("stroke-opacity", 0.8);
-                                                        d3.selectAll(".nodeText").style("fill-opacity",1);
-                                                    }
-                                                })
-                                            }
-                                        })
-                                    }
-                                }							
-                                  
-                                
-                                function showVariableTable(aVariable)
-                                {						
-                                    var varTableDiv = d3.select(".modelViewerDiv").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name)
-                                        .style('left', (d3.event.pageX - 2) + 'px')
-                                        .style('top', (d3.event.pageY - 2) + 'px')
-                                        .style("position", "absolute")
-                                        .on("mousedown", function(d) {
-                                            d3.select(this).moveToFront();
-                                        })
-                                    var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
-                                    
-                                    //Drag Function for variable table
-                                    var xPos_init = d3.event.pageX - 2;
-                                    var yPos_init = d3.event.pageY - 2;
-                                    var xOffset_tmp;
-                                    var yOffset_tmp;
-                                    var drag = varTableDiv.call(d3.drag()
-                                        .on("start", dragstarted)
-                                        .on("drag", dragged)
-                                        .on("end", dragended));
-                                    function dragstarted() {
-                                      d3.select(this).raise().classed("active", true);
-                                      xOffset_tmp = xPos_init-d3.event.x;
-                                      yOffset_tmp = yPos_init-d3.event.y;
-                                    }
-                                    function dragged() {
-                                         d3.select(this).classed("active", false)
-                                            .style("left",(d3.event.x+xOffset_tmp) + "px")
-                                            .style("top",(d3.event.y+yOffset_tmp) + "px")
-                                    }
-                                    function dragended() {
-                                      d3.select(this).classed("active", false);
-                                      xPos_init = d3.event.x+xOffset_tmp;
-                                      yPos_init = d3.event.y+yOffset_tmp;
-                                    }
-                                    
-                                    var headLine = "Node Information (" + aName + ")";
-                                    var tabRemoveSVG = varTableGroup.append("svg")
-                                        .attr("width",String(headLine.length*9.5+"pt"))
-                                        .attr("height",26)
-                                    tabRemoveSVG.append("rect")
-                                        .attr("width", "100%")
-                                        .attr("height", "100%")
-                                        .attr("fill", "white");
-                                    var tabRemoveSymbol = tabRemoveSVG.append("g");
-                                    tabRemoveSymbol = tabRemoveSymbol
-                                        .attr("class", "tabRemoveSymbol")
-                                        .attr("transform", "translate(26,0)")
-                                    var circle = tabRemoveSymbol.append("circle")
-                                        .classed("remCircle",true)
-                                    var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
-                                    var cx = -20;
-                                    var cy = 12;
-                                    circle = circle
-                                        .attr("cx", cx+5)
-                                        .attr("cy", cy)
-                                        .attr("r", 10)
-                                    minus = minus
-                                        .attr("x1", cx)
-                                        .attr("y1", cy)
-                                        .attr("x2", cx+10)
-                                        .attr("y2", cy)
-                                        
-                                    
-                                    tabRemoveSVG.append("text").attr("class","tabRemoveText")
-                                        .attr("transform", "translate(26,20)")
-                                        .attr("fill", "black")
-                                        .style("font-family", "Arial")
-                                        .style("font-size", "16pt")
-                                        .style("font-weight", "bold")
-                                        .text(headLine);
-                                    
-                                    
-                                    tabRemoveSymbol
-                                        .on("mouseover", function(){
-                                            d3.select(this).style("cursor", "pointer")
-                                            circle.style("fill", "red").style("fill-opacity", .8);
-                                            })
-                                        .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
-                                    tabRemoveSymbol.on("mousedown", function(d)
-                                    {
-                                        varTableDiv.remove();
-                                    })
-                                    
-                                    
-                                    
-                                    var data = [];
-                                    // render the table(s)
-                                    data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" })
-                                    
-                                    function getNodeXPath(strWrapper,aNode) 
-                                    {
-                                      strWrapper.val = "/"+aNode.data.name+strWrapper.val;
-                                      if (!aNode.parent) 
-                                      {
-                                        return strWrapper;
-                                      }
-                                      else 
-                                      {
-                                        
-                                        return getNodeXPath(strWrapper, aNode.parent);
-                                      }
-                                    }
-                                    var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
-                                    data.push({ "name" : "xPath", "value" : xPath_tmp })
-                                    if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })}
-                                    if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })}
-                                    if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })}
-                                    if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })}
-                                    else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
-                                    if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })}
-                                    var table = varTableGroup.append('table');
-                                    tabulate(table,data,['name', 'value']); // 2 column table
-                                }
-                                
-                               
-                                //menu --> functions for right click options
-                                var nodeMenu = [
-                                {
-                                    title: 'Show node information',
-                                    onMouseDown: function(elm, d, i) {
-                                        showVariableTable(d);
-                                    },
-                                    onMouseUp: function(elm, d, i) {},
-                                    onMouseOver: function(elm, d, i) {},
-                                    childrenItems: []
-                                },
-                                {
-                                    title: 'Copy x-path to clipboard',
-                                    onMouseDown: function(elm, d, i) {
-                                        function copyToClipboard(text) 
-                                        {
-                                            window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
-                                        }
-                                        function copyXPathToClipboard(data,aText)
-                                        {
-                                            aText = "/"+data.data.name+aText;
-                                            if (data.parent){copyXPathToClipboard(data.parent,aText)}
-                                            else{copyToClipboard(aText);}
-                                        }
-                                        var copyText="";
-                                        copyXPathToClipboard(d,copyText);
-                                        d3.select('.d3-context-menu').style('display', 'none');
-                                    },
-                                    onMouseUp: function(elm, d, i) {
-                                    },
-                                    onMouseOver: function(elm, d, i) {
-                                    },
-                                    childrenItems: []
-                                },
-                                {
-                                    title: 'Download full tree as XML-file',
-                                    onMouseDown: function(elm, d, i) {
-                                        //Begin xml structure with the first element
-                                        var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">";
-                                        //Create a new xml document
-                                        var parser = new DOMParser();
-                                        var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-                                        //Get initial xPath of the tree and pass it to the function "writeTreeToXML"
-                                        var initialXPath = "/"+nodes[0].data.name;								
-                                        writeTreeToXML(nodes[0],xmlDocument,initialXPath);
-                                        //remove all attributes dummyID
-                                        removeAttributeInAllElements(xmlDocument,'dummyID');
-                                        //Make the xml document a string
-                                        var serializer = new XMLSerializer();
-                                        var xmlString = serializer.serializeToString(xmlDocument);
-                                        xmlString = vkbeautify.xml(xmlString);														
-                                        //Download a document with the xml-schema
-                                        download(aName+'_full.xml',xmlString);						
-                                    },
-                                    onMouseUp: function(elm, d, i) {
-                                    },
-                                    onMouseOver: function(elm, d, i) {
-                                    },
-                                    childrenItems: []
-                                },
-                                {
-                                    title: 'Download tree as XML-file from current node',
-                                    onMouseDown: function(elm, d, i) {
-                                        var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
-                                        var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
-                                        //Create a new xml document
-                                        var parser = new DOMParser();
-                                        var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
-                                        //Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
-                                        writeTreeToXML(d,xmlDocument,initialXPath);
-                                        //remove all attributes dummyID
-                                        removeAttributeInAllElements(xmlDocument,'dummyID');
-                                        //Make the xml document a string
-                                        var serializer = new XMLSerializer();
-                                        xmlString = serializer.serializeToString(xmlDocument);
-                                        xmlString = vkbeautify.xml(xmlString);														
-                                        //Download a document with the xml-schema
-                                        download(aName+"_"+d.data.name+'.xml',xmlString);						
-                                    },
-                                    onMouseUp: function(elm, d, i) {
-                                    },
-                                    onMouseOver: function(elm, d, i) {
-                                    },
-                                    childrenItems: []
-                                }
-                                ]
-                                
-                                //Function writeTreeToXML goes through tree nodes and puts the into an xml document
-                                function writeTreeToXML(aNode,anXMLDoc,anXPath)
-                                {
-                                    //Variable "children" 
-                                    //--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
-                                    var children;
-                                    if (aNode._children){children = aNode._children;}
-                                    else if (aNode.children){children = aNode.children;}
-                                    
-                                    //Get current xml element with its xPath
-                                    var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
-                                    if (element != null) {element.value = '...';}
-                                    
-                                    //If a node has children (collapsed or expanded), loop through them
-                                    if (children)
-                                    {
-                                        for (var i=0; i < children.length;i++)
-                                        {
-                                            //Name of the new XML element --> childName
-                                            var child = children[i];
-                                            var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
-                                            var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
-                                            var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
-                                            
-                                            //The children are appended to the xPath --> newXPath
-                                            var newXPath = anXPath+"/"+cleanChildName[0];
-                                            
-                                            //If childName contains a uID, make the uID an attribute
-                                            if (childName[1])
-                                            {
-                                                if (parseInt(childName[1]))
-                                                {
-                                                    var dummyID = childName[1];
-                                                    newNode.setAttribute("dummyID", dummyID)
-                                                    newXPath = newXPath+"[@dummyID='"+dummyID+"']";
-                                                }
-                                                else
-                                                {
-                                                    var uID = childName[1];
-                                                    newNode.setAttribute("uID", uID)
-                                                    newXPath = newXPath+"[@uID='"+uID+"']";
-                                                }
-                                            }
-                                            if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
-                                            
-                                            //Append the newNode to the xml structure
-                                            element.appendChild(newNode);
-                                            
-                                            
-                                            
-                                            ////aigner: Sorting of XML elements according to "uID"
-                                            // var items = element.children;
-                                            // var itemsArr = [];
-                                            // for (var j in items) {
-                                                // if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
-                                                    // itemsArr.push(items[j]);
-                                                // }
-                                            // }
-                                            // itemsArr.sort(function(a,b){
-                                                // if (a.getAttribute("uID") < b.getAttribute("uID"))
-                                                    // return -1;
-                                                // if (a.getAttribute("uID") > b.getAttribute("uID"))
-                                                    // return 1;
-                                                // return 0;
-                                                // });
-
-                                            // for (j = 0; j < itemsArr.length; ++j) {
-                                              // element.appendChild(itemsArr[j]);
-                                            // }
-                                            
-                                            //call function writeTreeToXML recursively for all children
-                                            writeTreeToXML(child,anXMLDoc,newXPath)
-                                        }
-                                    }
-                                    else
-                                    {
-                                        if (aNode.data.value){element.innerHTML = String(aNode.data.value);}
-                                        else{element.innerHTML = " ";}
-                                    }
-                                    //return the xml document
-                                    return anXMLDoc;
-                                }
-                                
-                                function removeAttributeInAllElements(aDocument,attribute)
-                                {
-                                  var matchingElements = [];
-                                  var allElements = aDocument.getElementsByTagName('*');
-                                  for (var i = 0, n = allElements.length; i < n; i++)
-                                  {
-                                    if (allElements[i].getAttribute(attribute) !== null)
-                                    {
-                                        allElements[i].removeAttribute(attribute);
-                                    }
-                                  }
-                                  return matchingElements;
-                                }
-                                
-                                function putAncestorsInXMLString(strWrapper, aNode)
-                                {
-                                    //Name of the new XML element
-                                    var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-                                    var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-                                    //If nodeName contains a uID, make the uID an attribute
-                                    if (nodeName[1])
-                                    {
-                                        var uID = nodeName[1];
-                                        strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-                                    }
-                                    else
-                                    {
-                                        strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
-                                    }
-                                    var aParent = aNode.parent;
-                                    if (aParent)
-                                    {
-                                        return putAncestorsInXMLString(strWrapper, aParent);
-                                    }
-                                    else 
-                                    {
-                                        return strWrapper;
-                                    }
-                                }
-                                
-                                function putAncestorsInXPath(strWrapper, aNode)
-                                {
-                                    //Name of the new XML element
-                                    var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
-                                    var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
-                                    //If nodeName contains a uID, make the uID an attribute
-                                    if (nodeName[1])
-                                    {
-                                        var uID = nodeName[1];
-                                        strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
-                                    }
-                                    else
-                                    {
-                                        strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
-                                    }
-                                    var aParent = aNode.parent;
-                                    if (aParent)
-                                    {
-                                        return putAncestorsInXPath(strWrapper, aParent);
-                                    }
-                                    else 
-                                    {
-                                        return strWrapper;
-                                    }
-                                }
-                                  
-                                nodeEnter = nodeEnter
-                                .on('contextmenu', d3.contextMenu(nodeMenu));
-                                
-                                nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
-                                
-                                
-
-                                // UPDATE
-                                var nodeUpdate = nodeEnter.merge(node);
-
-                                // Transition to the proper position for the node
-                                nodeUpdate.transition()
-                                .duration(duration)
-                                .attr("transform", function(d) { 
-                                    return "translate(" + d.y + "," + d.x + ")";
-                                 });
-
-                                // Update the node attributes and style
-                                nodeUpdate.select('circle.treeNode')
-                                .attr('r', 4.5)
-                                .style("fill", function(d) {
-                                        if (d._children)
-                                        {
-                                            if(aName.includes("Input")){return '#ea9999'}
-                                            else if(aName.includes("Output")){return '#d6ea99'}
-                                            else {return "lightsteelblue"}
-                                        }
-                                        else {return "#fff"}
-                                  })
-                                .attr('cursor', 'pointer');
-                                
-                                nodeUpdate.select('text')
-                                .text(function(d) { return d.data.text; });
-
-
-                                // Remove any exiting nodes
-                                var nodeExit = node.exit().transition()
-                                  .duration(duration)
-                                  .attr("transform", function(d) {
-                                      return "translate(" + source.y + "," + source.x + ")";
-                                  })
-                                  .remove();
-
-                                // ****************** links section ***************************
-
-                                // Update the links...
-                                var link = svgGroup.selectAll('path.treeLink')
-                                  .data(links, function(d) { return d.id; });
-
-                                // Enter any new links at the parent's previous position.
-                                var linkEnter = link.enter().insert('path', "g")
-                                  .attr("class", "treeLink")
-                                  .attr('d', function(d){
-                                    var o = {x: source.x0, y: source.y0}
-                                    return diagonal(o, o)
-                                  });
-
-                                // UPDATE
-                                var linkUpdate = linkEnter.merge(link);
-
-                                // Transition back to the parent element position
-                                linkUpdate.transition()
-                                  .duration(duration)
-                                  .attr('d', function(d){ return diagonal(d, d.parent) });
-
-                                // Remove any exiting links
-                                var linkExit = link.exit().transition()
-                                  .duration(duration)
-                                  .attr('d', function(d) {
-                                    var o = {x: source.x, y: source.y}
-                                    return diagonal(o, o)
-                                  })
-                                  .remove();
-
-                                // Store the old positions for transition.
-                                nodes.forEach(function(d){
-                                d.x0 = d.x;
-                                d.y0 = d.y;
-                                });
-
-                                // Creates a curved (diagonal) path from parent to the child nodes
-                                function diagonal(s, d) {
-                                return "M" + s.y + "," + s.x
-                                      + "C" + (s.y + d.y) / 2 + "," + s.x
-                                      + " " + (s.y + d.y) / 2 + "," + d.x
-                                      + " " + d.y + "," + d.x;
-                                }
-                            }
-                        }
-                    }
-                }
-                startDataModel(theData,"01");
-
-                ////aigner: Unused funcktions --> Could be helpful at some point
-                ////aigner: clone function, so that original object is not overwritten but deep copied
-                // function clone(obj) {
-                    // if (null == obj || "object" != typeof obj) return obj;
-                    // var copy = obj.constructor();
-                    // for (var attr in obj) {
-                        // if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
-                    // }
-                    // return copy;
-                // }
-                ////aigner: cleanArray Function
-                // function cleanArray(actual) 
-                // {
-                    // var newArray = new Array();
-                    // for (var i = 0; i < actual.length; i++) 
-                    // {
-                        // if (actual[i]) 
-                        // {
-                            // newArray.push(actual[i]);
-                        // }
-                    // }
-                    // return newArray;
-                // }
-                //#####################################################################//
-
-
-                },{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
-            }
-		
-		
-		
-		
-		</script>
-    </body>
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+<meta name="format-detection" content="telephone=no">
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-status-bar-style" content="default">
+<style>
+*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
+
+a:link {
+	color:#555;
+	text-decoration: underline;
+}
+a:visited {color:#999;}
+
+.wordWrap {
+    word-wrap: break-word;      /* IE 5.5-7 */
+    white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */
+    white-space: pre-wrap;      /* current browsers */
+	width: 800px;
+    margin-top: 16px;
+	color:#555555;
+	margin:20px 10px;
+	font-family:Arial;
+	font-size:12pt;
+}
+
+
+/*
+* XDSMjs
+* Copyright 2016 Rémi Lafage
+*/
+
+/* Component types */
+.xdsm .user {
+visibility: hidden;
+}
+
+.xdsm .coordinator {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .converger {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .doe {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .rcganalysis {
+fill: #E5DEB3;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .precouplinganalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .preiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .coupledanalysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postcouplinganalysis {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .consistencyconstraintfunction {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .lp_optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .analysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mdo {
+fill: #FFCCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .function {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mda {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .metamodel {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Title */
+.xdsm g.title text {
+display: block;
+font-size: 2em;
+margin-top: 0.67em;
+margin-bottom: 0.67em;
+margin-left: 0;
+margin-right: 0;
+font-family:Arial;
+}
+.xdsm g.title rect {
+fill: none;
+}
+
+
+/* Text Default */
+.xdsm text {
+fill: black;
+stroke: none;
+font-size: 16pt;
+font-family:Arial;
+}
+.xdsm tspan.sub {
+font-size: small;
+font-family:Arial;
+}
+.xdsm tspan.sup {
+font-size: small;
+font-family:Arial;
+}
+
+/* Data */
+.xdsm .dataInter polygon {
+fill: #E5E5E5;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .dataIO polygon {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Dataflow */
+.xdsm g.dataflow {
+fill: none;
+stroke: grey;
+stroke-width: 8px;
+}
+
+/* Workflow */
+.xdsm g.workflow {
+fill: none;
+stroke: black;
+stroke-width: 2px;
+}
+
+/* Tooltip */
+div.tooltip {
+position: absolute;
+text-align: center;
+font-size: 16pt;
+padding: 10px;
+background: lightsteelblue;
+border: 0px;
+border-radius: 8px;
+pointer-events: none;
+}
+
+div.treeDiv {
+position: absolute;
+}
+
+div.contextDiv {
+position: absolute;
+}
+
+sub, sup {
+/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
+font-size: 75%;
+/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
+line-height: 0;
+/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
+position: relative;
+/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
+vertical-align: baseline;
+}
+
+sup {
+/* Move the superscripted text up */
+top: -0.5em;
+}
+
+sub {
+/* Move the subscripted text down, but only half as far down as the superscript moved up */
+bottom: -0.5em;
+}
+
+
+/*Edge Bundles Styles*/
+/*##############################################################*/
+.edgeBundlesNode {
+  fill: #aaa;
+}
+
+.edgeBundlesNode:hover {
+  fill: #555555;
+}
+
+.edgeBundlesLink {
+  stroke: #3399FF;
+  stroke-opacity: 0.4;
+  stroke-width: 2px;
+  fill: none;
+  
+}
+
+.invisibleLink {
+  stroke: #000;
+  stroke-opacity: 0;
+  stroke-width: 15px;
+  fill: none;
+}
+.invisibleLink:hover {
+  stroke: #3399FF;
+  stroke-opacity: 1.0;
+  stroke-width: 5px;
+  fill: none;
+}
+
+.edgeBundlesNode:hover,
+.edgeBundlesNode--source,
+.edgeBundlesNode--target {
+  font-weight: 700;
+}
+
+.edgeBundlesNode--source {
+  fill: #99CC00;
+}
+
+.edgeBundlesNode--target {
+  fill: #CC0000;
+}
+
+.edgeBundlesLink--target,
+.edgeBundlesLink--source{
+  stroke-width: 5px;
+}
+
+.edgeBundlesLink--source {
+  stroke: #CC0000;
+  stroke-opacity: .5;
+}
+
+.edgeBundlesLink--target {
+  stroke: #99CC00;
+  stroke-opacity: .5;
+}
+
+.sankeyNode rect {
+  cursor: grab;
+  shape-rendering: crispEdges;
+}
+
+.sankeyNode text {
+  pointer-events: none;
+  text-shadow: 1px 1px 2px #fff;
+  font-size: 0.8em;
+  font-family: sans-serif;
+}
+
+#tooltip {
+  position: absolute;
+  pointer-events: none;
+  font-size: 0.7em;
+  font-family: sans-serif;
+  padding: 3px;
+  width: auto;
+  height: auto;
+  background-color: #F2F2F2;
+  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4);
+  -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4);
+  box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4);
+  pointer-events: none;
+}
+
+.value {
+  white-space: pre-line;
+  margin: 0;
+}
+
+/* Aigner: New styles for tree layout */
+.treeNode {
+cursor: pointer;
+}
+
+.overlay{
+background-color:#FFF;
+}
+
+.treeNode circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.treeNode text {
+font-size:16pt; 
+font-family:Arial;
+}
+
+.treeLink {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	width: 300px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #3399FF;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 290px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #3399FF;
+	color: #fefefe;
+}
+
+.button {
+fill: #555555;
+stroke: white;
+stroke-width: 1.5;
+}
+
+.copyRightText {
+font-family: Arial;
+font-size: 12pt;
+fill: #555555;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #555555;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+
+.dataModelDiv {
+	position:relative;
+	top: 0px;
+	left: 10px;
+	background-color: none;
+}
+.dataModelDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 16pt;
+    padding-top: 5px;
+    padding-right: 12px;
+    padding-bottom: 5px;
+    padding-left: 16px;
+    display:inline-block;
+}
+.dataModelDiv ul {
+  display:  inline-block;
+  margin: 0;
+  padding: 0;
+  background-color: #555555;
+  border-radius: 5px;
+  border-style: solid; 
+  border-width: 2px;
+  border-color: #555555;
+}
+.dataModelDiv ul li {display: inline-block;}
+.dataModelDiv ul li:hover {
+	background: #888;
+}
+.dataModelDiv ul li:hover ul {display: block;}
+.dataModelDiv ul li ul {
+  position: absolute;
+  align: right;
+  left: 150px;
+  top: 0px;
+  min-width: 180px;
+  display: none;
+}
+.dataModelDiv ul li ul li { 
+  background: #555555; 
+  display: block;
+}
+.dataModelDiv ul li ul li a {
+	display:block !important
+} 
+.dataModelDiv ul li ul li:hover {background: #3399FF;}
+
+table {
+	width: 800px;
+	table-layout:fixed;
+}
+
+
+
+
+table, th, td {
+	font-family: Arial;
+    font-size: 16pt;
+	background-color: white;
+    border: 2pt solid darkgrey;
+    border-collapse: collapse;
+	text-align: left;
+	word-wrap:break-word;
+}
+}
+th, td {
+    padding-top: 6px;
+    padding-right: 20px;
+    padding-bottom: 6px;
+    padding-left: 20px;
+	min-width: 100px;
+	max-width: 400px;
+}
+
+.remCircle {
+	stroke: black;
+	stroke-width: 2;
+	fill: red;
+	fill-opacity: .6
+}
+.remMinus {
+	stroke: black;
+	stroke-width: 2;
+}
+
+</style>
+<head>
+    <meta charset="utf-8">
+    <title>VISTOMS (Visualization Tool for MDO Systems)</title>
+</head>
+<body>
+    <script>	
+			(function() {
+			/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+			!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+			a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d));
+			},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+			function createShiftArr(step) {
+
+				var space = '    ';
+				
+				if ( isNaN(parseInt(step)) ) {  // argument is string
+					space = step;
+				} else { // argument is integer
+					switch(step) {
+						case 1: space = ' '; break;
+						case 2: space = '  '; break;
+						case 3: space = '   '; break;
+						case 4: space = '    '; break;
+						case 5: space = '     '; break;
+						case 6: space = '      '; break;
+						case 7: space = '       '; break;
+						case 8: space = '        '; break;
+						case 9: space = '         '; break;
+						case 10: space = '          '; break;
+						case 11: space = '           '; break;
+						case 12: space = '            '; break;
+					}
+				}
+
+				var shift = ['\n']; // array of shifts
+				for(ix=0;ix<100;ix++){
+					shift.push(shift[ix]+space); 
+				}
+				return shift;
+			}
+
+			function vkbeautify(){
+				this.step = '    '; // 4 spaces
+				this.shift = createShiftArr(this.step);
+			};
+
+			vkbeautify.prototype.xml = function(text,step) {
+
+				var ar = text.replace(/>\s{0,}</g,"><")
+							 .replace(/</g,"~::~<")
+							 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+							 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+							 .split('~::~'),
+					len = ar.length,
+					inComment = false,
+					deep = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;
+
+					for(ix=0;ix<len;ix++) {
+						// start comment or <![CDATA[...]]> or <!DOCTYPE //
+						if(ar[ix].search(/<!/) > -1) { 
+							str += shift[deep]+ar[ix];
+							inComment = true; 
+							// end comment  or <![CDATA[...]]> //
+							if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+								inComment = false; 
+							}
+						} else 
+						// end comment  or <![CDATA[...]]> //
+						if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+							str += ar[ix];
+							inComment = false; 
+						} else 
+						// <elm></elm> //
+						if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+							/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+							str += ar[ix];
+							if(!inComment) deep--;
+						} else
+						 // <elm> //
+						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+							str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+						} else 
+						 // <elm>...</elm> //
+						if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+						} else 
+						// </elm> //
+						if(ar[ix].search(/<\//) > -1) { 
+							str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+						} else 
+						// <elm/> //
+						if(ar[ix].search(/\/>/) > -1 ) { 
+							str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+						} else 
+						// <? xml ... ?> //
+						if(ar[ix].search(/<\?/) > -1) { 
+							str += shift[deep]+ar[ix];
+						} else 
+						// xmlns //
+						if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+							str += shift[deep]+ar[ix];
+						} 
+						
+						else {
+							str += ar[ix];
+						}
+					}
+					
+				return  (str[0] == '\n') ? str.slice(1) : str;
+			}
+
+			vkbeautify.prototype.json = function(text,step) {
+
+				var step = step ? step : this.step;
+				
+				if (typeof JSON === 'undefined' ) return text; 
+				
+				if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+				if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+					
+				return text; // text is not string nor object
+			}
+
+			vkbeautify.prototype.css = function(text, step) {
+
+				var ar = text.replace(/\s{1,}/g,' ')
+							.replace(/\{/g,"{~::~")
+							.replace(/\}/g,"~::~}~::~")
+							.replace(/\;/g,";~::~")
+							.replace(/\/\*/g,"~::~/*")
+							.replace(/\*\//g,"*/~::~")
+							.replace(/~::~\s{0,}~::~/g,"~::~")
+							.split('~::~'),
+					len = ar.length,
+					deep = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;
+					
+					for(ix=0;ix<len;ix++) {
+
+						if( /\{/.exec(ar[ix]))  { 
+							str += shift[deep++]+ar[ix];
+						} else 
+						if( /\}/.exec(ar[ix]))  { 
+							str += shift[--deep]+ar[ix];
+						} else
+						if( /\*\\/.exec(ar[ix]))  { 
+							str += shift[deep]+ar[ix];
+						}
+						else {
+							str += shift[deep]+ar[ix];
+						}
+					}
+					return str.replace(/^\n{1,}/,'');
+			}
+
+			//----------------------------------------------------------------------------
+
+			function isSubquery(str, parenthesisLevel) {
+				return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+			}
+
+			function split_sql(str, tab) {
+
+				return str.replace(/\s{1,}/g," ")
+
+							.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+							.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+							.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+							.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+							.replace(/ END /ig,"~::~"+tab+"END ")
+							.replace(/ FROM /ig,"~::~FROM ")
+							.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+							.replace(/ HAVING /ig,"~::~HAVING ")
+							//.replace(/ SET /ig," SET~::~")
+							.replace(/ IN /ig," IN ")
+							
+							.replace(/ JOIN /ig,"~::~JOIN ")
+							.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+							.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+							.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+							.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+							
+							.replace(/ ON /ig,"~::~"+tab+"ON ")
+							.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+							.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+							.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+							.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+							.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+							
+							.replace(/ THEN /ig," THEN~::~"+tab+"")
+							.replace(/ UNION /ig,"~::~UNION~::~")
+							.replace(/ USING /ig,"~::~USING ")
+							.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+							.replace(/ WHERE /ig,"~::~WHERE ")
+							.replace(/ WITH /ig,"~::~WITH ")
+							
+							//.replace(/\,\s{0,}\(/ig,",~::~( ")
+							//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+							.replace(/ ALL /ig," ALL ")
+							.replace(/ AS /ig," AS ")
+							.replace(/ ASC /ig," ASC ")	
+							.replace(/ DESC /ig," DESC ")	
+							.replace(/ DISTINCT /ig," DISTINCT ")
+							.replace(/ EXISTS /ig," EXISTS ")
+							.replace(/ NOT /ig," NOT ")
+							.replace(/ NULL /ig," NULL ")
+							.replace(/ LIKE /ig," LIKE ")
+							.replace(/\s{0,}SELECT /ig,"SELECT ")
+							.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+							.replace(/ SET /ig," SET ")
+										
+							.replace(/~::~{1,}/g,"~::~")
+							.split('~::~');
+			}
+
+			vkbeautify.prototype.sql = function(text,step) {
+
+				var ar_by_quote = text.replace(/\s{1,}/g," ")
+										.replace(/\'/ig,"~::~\'")
+										.split('~::~'),
+					len = ar_by_quote.length,
+					ar = [],
+					deep = 0,
+					tab = this.step,//+this.step,
+					inComment = true,
+					inQuote = false,
+					parenthesisLevel = 0,
+					str = '',
+					ix = 0,
+					shift = step ? createShiftArr(step) : this.shift;;
+
+					for(ix=0;ix<len;ix++) {
+						if(ix%2) {
+							ar = ar.concat(ar_by_quote[ix]);
+						} else {
+							ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+						}
+					}
+					
+					len = ar.length;
+					for(ix=0;ix<len;ix++) {
+						
+						parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+						
+						if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+						} 
+						
+						if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+							ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+						} 
+						
+						if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+							deep++;
+							str += shift[deep]+ar[ix];
+						} else 
+						if( /\'/.exec(ar[ix]) )  { 
+							if(parenthesisLevel<1 && deep) {
+								deep--;
+							}
+							str += ar[ix];
+						}
+						else  { 
+							str += shift[deep]+ar[ix];
+							if(parenthesisLevel<1 && deep) {
+								deep--;
+							}
+						} 
+						var junk = 0;
+					}
+
+					str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+					return str;
+			}
+
+
+			vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+				var str = preserveComments ? text
+										   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+												 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+				return  str.replace(/>\s{0,}</g,"><"); 
+			}
+
+			vkbeautify.prototype.jsonmin = function(text) {
+
+				if (typeof JSON === 'undefined' ) return text; 
+				
+				return JSON.stringify(JSON.parse(text), null, 0); 
+							
+			}
+
+			vkbeautify.prototype.cssmin = function(text, preserveComments) {
+				
+				var str = preserveComments ? text
+										   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+				return str.replace(/\s{1,}/g,' ')
+						  .replace(/\{\s{1,}/g,"{")
+						  .replace(/\}\s{1,}/g,"}")
+						  .replace(/\;\s{1,}/g,";")
+						  .replace(/\/\*\s{1,}/g,"/*")
+						  .replace(/\*\/\s{1,}/g,"*/");
+			}
+
+			vkbeautify.prototype.sqlmin = function(text) {
+				return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+			}
+
+			window.vkbeautify = new vkbeautify();
+
+			})();
+
+
+			/*!
+			 * Bootstrap v3.3.7 (http://getbootstrap.com)
+			 * Copyright 2011-2016 Twitter, Inc.
+			 * Licensed under the MIT license
+			 */
+			if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
+			this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
+
+
+			/**
+			 * bootbox.js v4.4.0
+			 *
+			 * http://bootboxjs.com/license.txt
+			 */
+			!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d.call(c,a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"<div class='bootbox modal' tabindex='-1' role='dialog'><div class='modal-dialog'><div class='modal-content'><div class='modal-body'><div class='bootbox-body'></div></div></div></div></div>",header:"<div class='modal-header'><h4 class='modal-title'></h4></div>",footer:"<div class='modal-footer'></div>",closeButton:"<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>&times;</button>",form:"<form class='bootbox-form'></form>",inputs:{text:"<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",textarea:"<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",email:"<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",select:"<select class='bootbox-input bootbox-input-select form-control'></select>",checkbox:"<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",date:"<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",time:"<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",number:"<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",password:"<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"}},o={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback.call(this):!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,!1)},a.buttons.confirm.callback=function(){return a.callback.call(this,!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback.call(this,c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!b.isArray(k))throw new Error("Please pass an array of input options");if(!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("<optgroup/>").attr("label",d.group)),e=o[d.group]),e.append("<option value='"+d.value+"'>"+d.text+"</option>")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("<div/>"),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),a.maxlength&&h.attr("maxlength",a.maxlength),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var d=b(n.dialog),f=d.find(".modal-dialog"),i=d.find(".modal-body"),j=a.buttons,k="",l={onEscape:a.onEscape};if(b.fn.modal===c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(g(j,function(a,b){k+="<button data-bb-handler='"+a+"' type='button' class='btn "+b.className+"'>"+b.label+"</button>",l[a]=b.callback}),i.find(".bootbox-body").html(a.message),a.animate===!0&&d.addClass("fade"),a.className&&d.addClass(a.className),"large"===a.size?f.addClass("modal-lg"):"small"===a.size&&f.addClass("modal-sm"),a.title&&i.before(n.header),a.closeButton){var m=b(n.closeButton);a.title?d.find(".modal-header").prepend(m):m.css("margin-top","-10px").prependTo(i)}return a.title&&d.find(".modal-title").html(a.title),k.length&&(i.after(n.footer),d.find(".modal-footer").html(k)),d.on("hidden.bs.modal",function(a){a.target===this&&d.remove()}),d.on("shown.bs.modal",function(){d.find(".btn-primary:first").focus()}),"static"!==a.backdrop&&d.on("click.dismiss.bs.modal",function(a){d.children(".modal-backdrop").length&&(a.currentTarget=d.children(".modal-backdrop").get(0)),a.target===a.currentTarget&&d.trigger("escape.close.bb")}),d.on("escape.close.bb",function(a){l.onEscape&&e(a,d,l.onEscape)}),d.on("click",".modal-footer button",function(a){var c=b(this).data("bb-handler");e(a,d,l[c])}),d.on("click",".bootbox-close-button",function(a){e(a,d,l.onEscape)}),d.on("keyup",function(a){27===a.which&&d.trigger("escape.close.bb")}),b(a.container).append(d),d.modal({backdrop:a.backdrop?"static":!1,keyboard:!1,show:!1}),a.show&&d.modal("show"),d},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.addLocale=function(a,c){return b.each(["OK","CANCEL","CONFIRM"],function(a,b){if(!c[b])throw new Error("Please supply a translation for '"+b+"'")}),q[a]={OK:c.OK,CANCEL:c.CANCEL,CONFIRM:c.CONFIRM},p},p.removeLocale=function(a){return delete q[a],p},p.setLocale=function(a){return p.setDefaults("locale",a)},p.init=function(c){return a(c||b)},p});
+			
+			/*!
+			 * Bowser - a browser detector
+			 * https://github.com/ded/bowser
+			 * MIT License | (c) Dustin Diaz 2015
+			 */
+			//#################################################################################################
+			!function (root, name, definition) {
+			  if (typeof module != 'undefined' && module.exports) module.exports = definition()
+			  else if (typeof define == 'function' && define.amd) define(name, definition)
+			  else root[name] = definition()
+			}(this, 'bowser', function () {
+			  /**
+				* See useragents.js for examples of navigator.userAgent
+				*/
+
+			  var t = true
+
+			  function detect(ua) {
+
+				function getFirstMatch(regex) {
+				  var match = ua.match(regex);
+				  return (match && match.length > 1 && match[1]) || '';
+				}
+
+				function getSecondMatch(regex) {
+				  var match = ua.match(regex);
+				  return (match && match.length > 1 && match[2]) || '';
+				}
+
+				var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
+				  , likeAndroid = /like android/i.test(ua)
+				  , android = !likeAndroid && /android/i.test(ua)
+				  , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
+				  , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
+				  , chromeos = /CrOS/.test(ua)
+				  , silk = /silk/i.test(ua)
+				  , sailfish = /sailfish/i.test(ua)
+				  , tizen = /tizen/i.test(ua)
+				  , webos = /(web|hpw)os/i.test(ua)
+				  , windowsphone = /windows phone/i.test(ua)
+				  , samsungBrowser = /SamsungBrowser/i.test(ua)
+				  , windows = !windowsphone && /windows/i.test(ua)
+				  , mac = !iosdevice && !silk && /macintosh/i.test(ua)
+				  , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
+				  , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
+				  , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
+				  , tablet = /tablet/i.test(ua)
+				  , mobile = !tablet && /[^-]mobi/i.test(ua)
+				  , xbox = /xbox/i.test(ua)
+				  , result
+
+				if (/opera/i.test(ua)) {
+				  //  an old Opera
+				  result = {
+					name: 'Opera'
+				  , opera: t
+				  , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				} else if (/opr|opios/i.test(ua)) {
+				  // a new Opera
+				  result = {
+					name: 'Opera'
+					, opera: t
+					, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (/SamsungBrowser/i.test(ua)) {
+				  result = {
+					name: 'Samsung Internet for Android'
+					, samsungBrowser: t
+					, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/coast/i.test(ua)) {
+				  result = {
+					name: 'Opera Coast'
+					, coast: t
+					, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/yabrowser/i.test(ua)) {
+				  result = {
+					name: 'Yandex Browser'
+				  , yandexbrowser: t
+				  , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/ucbrowser/i.test(ua)) {
+				  result = {
+					  name: 'UC Browser'
+					, ucbrowser: t
+					, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/mxios/i.test(ua)) {
+				  result = {
+					name: 'Maxthon'
+					, maxthon: t
+					, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/epiphany/i.test(ua)) {
+				  result = {
+					name: 'Epiphany'
+					, epiphany: t
+					, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/puffin/i.test(ua)) {
+				  result = {
+					name: 'Puffin'
+					, puffin: t
+					, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
+				  }
+				}
+				else if (/sleipnir/i.test(ua)) {
+				  result = {
+					name: 'Sleipnir'
+					, sleipnir: t
+					, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (/k-meleon/i.test(ua)) {
+				  result = {
+					name: 'K-Meleon'
+					, kMeleon: t
+					, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
+				  }
+				}
+				else if (windowsphone) {
+				  result = {
+					name: 'Windows Phone'
+				  , windowsphone: t
+				  }
+				  if (edgeVersion) {
+					result.msedge = t
+					result.version = edgeVersion
+				  }
+				  else {
+					result.msie = t
+					result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/msie|trident/i.test(ua)) {
+				  result = {
+					name: 'Internet Explorer'
+				  , msie: t
+				  , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
+				  }
+				} else if (chromeos) {
+				  result = {
+					name: 'Chrome'
+				  , chromeos: t
+				  , chromeBook: t
+				  , chrome: t
+				  , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+				  }
+				} else if (/chrome.+? edge/i.test(ua)) {
+				  result = {
+					name: 'Microsoft Edge'
+				  , msedge: t
+				  , version: edgeVersion
+				  }
+				}
+				else if (/vivaldi/i.test(ua)) {
+				  result = {
+					name: 'Vivaldi'
+					, vivaldi: t
+					, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (sailfish) {
+				  result = {
+					name: 'Sailfish'
+				  , sailfish: t
+				  , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/seamonkey\//i.test(ua)) {
+				  result = {
+					name: 'SeaMonkey'
+				  , seamonkey: t
+				  , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/firefox|iceweasel|fxios/i.test(ua)) {
+				  result = {
+					name: 'Firefox'
+				  , firefox: t
+				  , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
+				  }
+				  if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
+					result.firefoxos = t
+				  }
+				}
+				else if (silk) {
+				  result =  {
+					name: 'Amazon Silk'
+				  , silk: t
+				  , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/phantom/i.test(ua)) {
+				  result = {
+					name: 'PhantomJS'
+				  , phantom: t
+				  , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/slimerjs/i.test(ua)) {
+				  result = {
+					name: 'SlimerJS'
+					, slimer: t
+					, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
+				  result = {
+					name: 'BlackBerry'
+				  , blackberry: t
+				  , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (webos) {
+				  result = {
+					name: 'WebOS'
+				  , webos: t
+				  , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
+				  };
+				  /touchpad\//i.test(ua) && (result.touchpad = t)
+				}
+				else if (/bada/i.test(ua)) {
+				  result = {
+					name: 'Bada'
+				  , bada: t
+				  , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
+				  };
+				}
+				else if (tizen) {
+				  result = {
+					name: 'Tizen'
+				  , tizen: t
+				  , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
+				  };
+				}
+				else if (/qupzilla/i.test(ua)) {
+				  result = {
+					name: 'QupZilla'
+					, qupzilla: t
+					, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
+				  }
+				}
+				else if (/chromium/i.test(ua)) {
+				  result = {
+					name: 'Chromium'
+					, chromium: t
+					, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
+				  }
+				}
+				else if (/chrome|crios|crmo/i.test(ua)) {
+				  result = {
+					name: 'Chrome'
+					, chrome: t
+					, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+				  }
+				}
+				else if (android) {
+				  result = {
+					name: 'Android'
+					, version: versionIdentifier
+				  }
+				}
+				else if (/safari|applewebkit/i.test(ua)) {
+				  result = {
+					name: 'Safari'
+				  , safari: t
+				  }
+				  if (versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				}
+				else if (iosdevice) {
+				  result = {
+					name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
+				  }
+				  // WTF: version is not part of user agent in web apps
+				  if (versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				}
+				else if(/googlebot/i.test(ua)) {
+				  result = {
+					name: 'Googlebot'
+				  , googlebot: t
+				  , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
+				  }
+				}
+				else {
+				  result = {
+					name: getFirstMatch(/^(.*)\/(.*) /),
+					version: getSecondMatch(/^(.*)\/(.*) /)
+				 };
+			   }
+
+				// set webkit or gecko flag for browsers based on these engines
+				if (!result.msedge && /(apple)?webkit/i.test(ua)) {
+				  if (/(apple)?webkit\/537\.36/i.test(ua)) {
+					result.name = result.name || "Blink"
+					result.blink = t
+				  } else {
+					result.name = result.name || "Webkit"
+					result.webkit = t
+				  }
+				  if (!result.version && versionIdentifier) {
+					result.version = versionIdentifier
+				  }
+				} else if (!result.opera && /gecko\//i.test(ua)) {
+				  result.name = result.name || "Gecko"
+				  result.gecko = t
+				  result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
+				}
+
+				// set OS flags for platforms that have multiple browsers
+				if (!result.windowsphone && !result.msedge && (android || result.silk)) {
+				  result.android = t
+				} else if (!result.windowsphone && !result.msedge && iosdevice) {
+				  result[iosdevice] = t
+				  result.ios = t
+				} else if (mac) {
+				  result.mac = t
+				} else if (xbox) {
+				  result.xbox = t
+				} else if (windows) {
+				  result.windows = t
+				} else if (linux) {
+				  result.linux = t
+				}
+
+				function getWindowsVersion (s) {
+				  switch (s) {
+					case 'NT': return 'NT'
+					case 'XP': return 'XP'
+					case 'NT 5.0': return '2000'
+					case 'NT 5.1': return 'XP'
+					case 'NT 5.2': return '2003'
+					case 'NT 6.0': return 'Vista'
+					case 'NT 6.1': return '7'
+					case 'NT 6.2': return '8'
+					case 'NT 6.3': return '8.1'
+					case 'NT 10.0': return '10'
+					default: return undefined
+				  }
+				}
+				
+				// OS version extraction
+				var osVersion = '';
+				if (result.windows) {
+				  osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
+				} else if (result.windowsphone) {
+				  osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
+				} else if (result.mac) {
+				  osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
+				  osVersion = osVersion.replace(/[_\s]/g, '.');
+				} else if (iosdevice) {
+				  osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
+				  osVersion = osVersion.replace(/[_\s]/g, '.');
+				} else if (android) {
+				  osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
+				} else if (result.webos) {
+				  osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
+				} else if (result.blackberry) {
+				  osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
+				} else if (result.bada) {
+				  osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
+				} else if (result.tizen) {
+				  osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
+				}
+				if (osVersion) {
+				  result.osversion = osVersion;
+				}
+
+				// device type extraction
+				var osMajorVersion = !result.windows && osVersion.split('.')[0];
+				if (
+					 tablet
+				  || nexusTablet
+				  || iosdevice == 'ipad'
+				  || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
+				  || result.silk
+				) {
+				  result.tablet = t
+				} else if (
+					 mobile
+				  || iosdevice == 'iphone'
+				  || iosdevice == 'ipod'
+				  || android
+				  || nexusMobile
+				  || result.blackberry
+				  || result.webos
+				  || result.bada
+				) {
+				  result.mobile = t
+				}
+
+				// Graded Browser Support
+				// http://developer.yahoo.com/yui/articles/gbs
+				if (result.msedge ||
+					(result.msie && result.version >= 10) ||
+					(result.yandexbrowser && result.version >= 15) ||
+						(result.vivaldi && result.version >= 1.0) ||
+					(result.chrome && result.version >= 20) ||
+					(result.samsungBrowser && result.version >= 4) ||
+					(result.firefox && result.version >= 20.0) ||
+					(result.safari && result.version >= 6) ||
+					(result.opera && result.version >= 10.0) ||
+					(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
+					(result.blackberry && result.version >= 10.1)
+					|| (result.chromium && result.version >= 20)
+					) {
+				  result.a = t;
+				}
+				else if ((result.msie && result.version < 10) ||
+					(result.chrome && result.version < 20) ||
+					(result.firefox && result.version < 20.0) ||
+					(result.safari && result.version < 6) ||
+					(result.opera && result.version < 10.0) ||
+					(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
+					|| (result.chromium && result.version < 20)
+					) {
+				  result.c = t
+				} else result.x = t
+
+				return result
+			  }
+
+			  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
+
+			  bowser.test = function (browserList) {
+				for (var i = 0; i < browserList.length; ++i) {
+				  var browserItem = browserList[i];
+				  if (typeof browserItem=== 'string') {
+					if (browserItem in bowser) {
+					  return true;
+					}
+				  }
+				}
+				return false;
+			  }
+
+			  /**
+			   * Get version precisions count
+			   *
+			   * @example
+			   *   getVersionPrecision("1.10.3") // 3
+			   *
+			   * @param  {string} version
+			   * @return {number}
+			   */
+			  function getVersionPrecision(version) {
+				return version.split(".").length;
+			  }
+
+			  /**
+			   * Array::map polyfill
+			   *
+			   * @param  {Array} arr
+			   * @param  {Function} iterator
+			   * @return {Array}
+			   */
+			  function map(arr, iterator) {
+				var result = [], i;
+				if (Array.prototype.map) {
+				  return Array.prototype.map.call(arr, iterator);
+				}
+				for (i = 0; i < arr.length; i++) {
+				  result.push(iterator(arr[i]));
+				}
+				return result;
+			  }
+
+			  /**
+			   * Calculate browser version weight
+			   *
+			   * @example
+			   *   compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
+			   *   compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
+			   *   compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
+			   *   compareVersions(['1.10.2.1',  '1.0800.2']);     // -1
+			   *
+			   * @param  {Array<String>} versions versions to compare
+			   * @return {Number} comparison result
+			   */
+			  function compareVersions(versions) {
+				// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
+				var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
+				var chunks = map(versions, function (version) {
+				  var delta = precision - getVersionPrecision(version);
+
+				  // 2) "9" -> "9.0" (for precision = 2)
+				  version = version + new Array(delta + 1).join(".0");
+
+				  // 3) "9.0" -> ["000000000"", "000000009"]
+				  return map(version.split("."), function (chunk) {
+					return new Array(20 - chunk.length).join("0") + chunk;
+				  }).reverse();
+				});
+
+				// iterate in reverse order by reversed chunks array
+				while (--precision >= 0) {
+				  // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
+				  if (chunks[0][precision] > chunks[1][precision]) {
+					return 1;
+				  }
+				  else if (chunks[0][precision] === chunks[1][precision]) {
+					if (precision === 0) {
+					  // all version chunks are same
+					  return 0;
+					}
+				  }
+				  else {
+					return -1;
+				  }
+				}
+			  }
+
+			  /**
+			   * Check if browser is unsupported
+			   *
+			   * @example
+			   *   bowser.isUnsupportedBrowser({
+			   *     msie: "10",
+			   *     firefox: "23",
+			   *     chrome: "29",
+			   *     safari: "5.1",
+			   *     opera: "16",
+			   *     phantom: "534"
+			   *   });
+			   *
+			   * @param  {Object}  minVersions map of minimal version to browser
+			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+			   * @param  {String}  [ua] user agent string
+			   * @return {Boolean}
+			   */
+			  function isUnsupportedBrowser(minVersions, strictMode, ua) {
+				var _bowser = bowser;
+
+				// make strictMode param optional with ua param usage
+				if (typeof strictMode === 'string') {
+				  ua = strictMode;
+				  strictMode = void(0);
+				}
+
+				if (strictMode === void(0)) {
+				  strictMode = false;
+				}
+				if (ua) {
+				  _bowser = detect(ua);
+				}
+
+				var version = "" + _bowser.version;
+				for (var browser in minVersions) {
+				  if (minVersions.hasOwnProperty(browser)) {
+					if (_bowser[browser]) {
+					  if (typeof minVersions[browser] !== 'string') {
+						throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
+					  }
+
+					  // browser version and min supported version.
+					  return compareVersions([version, minVersions[browser]]) < 0;
+					}
+				  }
+				}
+
+				return strictMode; // not found
+			  }
+
+			  /**
+			   * Check if browser is supported
+			   *
+			   * @param  {Object} minVersions map of minimal version to browser
+			   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+			   * @param  {String}  [ua] user agent string
+			   * @return {Boolean}
+			   */
+			  function check(minVersions, strictMode, ua) {
+				return !isUnsupportedBrowser(minVersions, strictMode, ua);
+			  }
+
+			  bowser.isUnsupportedBrowser = isUnsupportedBrowser;
+			  bowser.compareVersions = compareVersions;
+			  bowser.check = check;
+
+			  /*
+			   * Set our detect method to the main bowser object so we can
+			   * reuse it to test other user agents.
+			   * This is needed to implement future tests.
+			   */
+			  bowser._detect = detect;
+
+			  return bowser
+			});
+			//#################################################################################################
+
+			!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+			r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+			return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.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(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+			shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+			if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
+
+			if (bowser.name=="Internet Explorer")
+			{
+			alert("OOPS! VISTOMS unfortunately does not work properly on " + bowser.name + ". Please use a different browser to see its awesome visualization features!")
+			}
+
+			function makeKadmosMenu(data)
+			{
+				var imageWidth = 200;
+				var imageHeight = 150;
+				var padding = 10;
+				var rectHeight = 70;
+				var imgSize = 40;
+				var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+				var visPackSvg = visPackDiv.append("svg")
+					.attr("class","visPackSvg")
+					.attr("width",imageWidth*5+40)
+					.attr("height",imageHeight+40)
+					.attr("transform", "translate("
+					  + String(10) + "," + String(10) + ")")			  
+				
+				var visPackFrame = visPackSvg.append("rect")
+					.attr("width",imageWidth*5+12)
+					.attr("height",imageHeight)
+					.attr("fill", "none")
+				
+				var imgs = visPackSvg.selectAll("image1").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("x",5)
+					.attr("xlink:href", fileReference.AGILE_Logo)
+					.attr("width", imageWidth)
+					.attr("height", imageHeight)
+					.attr("position", "relative")
+					
+				var imgs = visPackSvg.selectAll("image2").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("x",210)
+					.attr("y",-5)
+					.attr("xlink:href", fileReference.VISTOMS_Label)
+					.attr("width", "180pt")
+					.attr("height", "70pt")
+					
+					
+					
+				//Set general offset for Buttons, acknowledgements and so on
+				var offset_tmp = 645;	
+				
+				
+				//aigner: Make Acknowledgments, Help and Home buttons
+				//##########################################################
+				visPackSvg.append("rect")
+				.attr("transform", "translate("+ String(offset_tmp+17) + "," + String(0) + ")")
+				.attr("fill", "#555555")
+				.attr("width", 140)
+				.attr("height", 40)
+				
+				function makeButton(anId, aText,aPicFile, anOffset, aScale, picX, picY)
+				{
+					var buttonGroup = visPackSvg.append("a").classed("buttonGroup",true)
+					buttonGroup
+						.attr("class",anId)
+						.append("svg:title").text(aText)
+					var polygon = buttonGroup.append("polygon").classed("button",true)
+						.attr("points", "30,15 22.5,28.0 7.5,28 0,15 7.5,2 22.5,2")
+						.attr("transform", "translate("+ String(anOffset) + "," + String(2) + ") scale(1.2)")
+					buttonGroup.append("image")
+						.attr("xlink:href",aPicFile)
+						.attr("height",50)
+						.attr("width",50)
+						.attr("transform", "translate("+ String(anOffset+picX) + "," + String(picY) + ") scale("+aScale+")")
+					buttonGroup
+						.on("mouseover", function()
+						{
+							polygon.style("fill","#3399FF")
+							d3.select(this).style("cursor", "pointer")
+						})
+						.on("mouseleave", function()
+						{
+							polygon.style("fill","#555555")
+						})
+				}
+				///Home button
+				var distance = 45;
+				var currentOffset = offset_tmp+25;
+				makeButton("id_mainPage","Main Page",fileReference.Home, currentOffset, 0.45, 6.9,7.2);
+				d3.select(".id_mainPage").on("click",function()
+				{		
+					mainPage();
+                    dataModelScript();
+				})
+				//Contact button
+				currentOffset+=distance;
+				makeButton("id_contact","Contact the support team",fileReference.Contact, currentOffset, 0.45, 6.9, 9);
+				d3.select(".id_contact").on("click",function()
+				{				
+					sendMail("VISTOMS support");
+				})
+					
+				//Acknowledgements button
+				currentOffset+=distance;
+				makeButton("id_acknowledgements","Acknowledgements",fileReference.Acknowledgements, currentOffset, 0.45, 7, 8);
+				d3.select(".id_acknowledgements").on("click",function()
+				{
+					acknowledgements();
+                    dataModelScript();
+				})
+				
+				//##########################################################
+				
+				
+			
+			}
+			//#####################################################################//
+
+
+			function getTextWidth(text, font) 
+			{
+				// re-use canvas object for better performance
+				var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
+				var context = canvas.getContext("2d");
+				context.font = font;
+				var metrics = context.measureText(text);
+				return metrics.width;
+			}					
+
+
+			//#####################################################################//
+			function mainPage()
+			{	
+				clearView();
+				var introDiv = d3.select("body").append("div")
+					.attr("id","mainPage")
+					.classed("wordWrap",true)
+				
+				var theHeading = "Welcome to <b>VISTOMS</b>, the <b>VIS</b>ualization <b>TO</b>ol for <b>M</b>DO <b>S</b>ystems!\n";
+				introDiv.append("text")
+				.style("font-size","16pt")
+				.html(theHeading)
+				
+				
+				introDiv.append("text")
+					.style("font-size","8pt")
+					.html("\n\n\nCopyright 2016-2017 by Benedikt Aigner (RWTH Aachen) & Imco van Gent (TU Delft)")
+				
+				var introSvg = introDiv.append("svg")
+					.attr("width",500)
+					.attr("height",100)
+				var imgs = introSvg.selectAll("img").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("xlink:href", fileReference.RWTH_Logo)
+					.attr("width", "150")
+					.attr("height", "70")
+					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+					.on("click",function(){window.open("https://www.rwth-aachen.de/", '_blank');} )
+				var imgs = introSvg.selectAll("img").data([0]);
+					imgs.enter()
+					.append("svg:image")
+					.attr("xlink:href", fileReference.TUDelft_Logo)
+					.attr("x", 175)
+					.attr("y", 5)
+					.attr("width", "105")
+					.attr("height", "50")
+					.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+					.on("click",function(){window.open("https://www.tudelft.nl/en/", '_blank');} )
+
+			}
+			//#####################################################################//
+
+			//#####################################################################//
+			function acknowledgements()
+			{				
+				clearView();
+				var acknDiv = d3.select("body").append("div")
+					.attr("id","acknowledgements")
+					.classed("acknText", true)
+					.classed("wordWrap",true)
+				
+				var theHeading = "Acknowledgements";
+				acknDiv.append("text")
+				.style("font-size","16pt")
+				.html(theHeading)
+				
+				acknDiv.append("text")
+					.style("font-size","10pt")
+					.style("margin", "20px 10px")
+					.html("<br><br>Created by Benedikt Aigner and Imco van Gent for the "
+						+"<a href=\"http://www.agile-project.eu/\">AGILE Project</a> in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202."
+						+"<br>"
+						+"<br>"
+						+"<b>VISTOMS was created using the following open source packages:</b>"
+						+"<br>"
+						+"<a href=\"https://d3js.org/\">D3.js</a> package &copy 2015 by Mike Bostock released under the <a href=\"https://opensource.org/licenses/BSD-3-Clause\">BSD license</a>"
+						+"<br>"
+						+"<a href=\"https://github.com/OneraHub/XDSMjs\">XDSM.js </a> package &copy 2016 by R&eacutemi Lafage released under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>"
+						+"<br>"
+						+"<a href=\"https://github.com/Neilos/bihisankey\">BiHiSankey.js</a> package &copy 2015 by Neil Atkinson released under the <a href=\"https://opensource.org/licenses/MIT\">MIT License</a>"
+						+"<br>"
+						+"<br>"
+						+"<br>"
+						+"<font size=\"-2\">Rev. 07/31/2017</font>")
+			}
+			//#####################################################################//			
+			//aigner: Send mail function
+			//#####################################################################//
+			function sendMail(mailText) 
+			{
+				var link = "mailto:support@agile-project.eu"
+				window.location.href = link;
+			}
+			//#####################################################################//
+			
+			//aigner: Load entire MDO data
+			//###############################################################################################################################################################################################################//
+			//#####################################################################//
+			//#####################################################################//
+			//@Imco: here the references to all files are done
+			var fileReference = {
+				Acknowledgements : "REP__Acknowledgements__REP",
+				AGILE_Icon : "REP__AGILE_Icon__REP",
+				AGILE_Logo : "REP__AGILE_Logo__REP",
+				Contact : "REP__Contact__REP",
+				Home: "REP__Home__REP",
+				RWTH_Logo : "REP__RWTH_Logo__REP",
+				TUDelft_Logo : "REP__TUDelft_Logo__REP",
+				Tutorial : "REP__Tutorial__REP",
+				VISTOMS_Label : "REP__VISTOMS_Label__REP",
+			}
+			
+			//@Imco: Here is the sellar problem example data
+            //the "modelName" could for instance be the name of the CPACS XML file or the modelUID in the CPACS file
+            //the "schema" is just the variable categorization according to the CPACS schema that we always had. 
+			theData = REP__GRAPH_DATA__REP
+			function loadAllData(data)
+			{
+				makeKadmosMenu(data);
+				mainPage();
+                dataModelScript();
+			}
+			loadAllData(theData);
+			//#####################################################################//
+			//#####################################################################//
+			//###############################################################################################################################################################################################################//
+			
+			//aigner: Clear view function
+			//#####################################################################//
+			function clearView()
+			{
+				var visualizationScript = d3.select(".visualizationScript");
+				if (visualizationScript){visualizationScript.remove();}
+				var mainPage = document.getElementById("mainPage");
+                var xdsm = d3.select(".modelViewerDiv");							
+				if (xdsm){xdsm.remove();}
+				if (mainPage){mainPage.remove();}
+				var ackn = document.getElementById("acknowledgements");
+				if (ackn){ackn.remove();}
+			}
+			//#####################################################################//
+		
+            function dataModelScript()
+            {
+                (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+                // https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
+                (function (global, factory) {
+                  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+                  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+                  (factory((global.d3 = global.d3 || {})));
+                }(this, (function (exports) { 'use strict';
+
+                var version = "4.3.0";
+
+                var ascending = function(a, b) {
+                  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+                };
+
+                var bisector = function(compare) {
+                  if (compare.length === 1) compare = ascendingComparator(compare);
+                  return {
+                    left: function(a, x, lo, hi) {
+                      if (lo == null) lo = 0;
+                      if (hi == null) hi = a.length;
+                      while (lo < hi) {
+                        var mid = lo + hi >>> 1;
+                        if (compare(a[mid], x) < 0) lo = mid + 1;
+                        else hi = mid;
+                      }
+                      return lo;
+                    },
+                    right: function(a, x, lo, hi) {
+                      if (lo == null) lo = 0;
+                      if (hi == null) hi = a.length;
+                      while (lo < hi) {
+                        var mid = lo + hi >>> 1;
+                        if (compare(a[mid], x) > 0) hi = mid;
+                        else lo = mid + 1;
+                      }
+                      return lo;
+                    }
+                  };
+                };
+
+                function ascendingComparator(f) {
+                  return function(d, x) {
+                    return ascending(f(d), x);
+                  };
+                }
+
+                var ascendingBisect = bisector(ascending);
+                var bisectRight = ascendingBisect.right;
+                var bisectLeft = ascendingBisect.left;
+
+                var descending = function(a, b) {
+                  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+                };
+
+                var number = function(x) {
+                  return x === null ? NaN : +x;
+                };
+
+                var variance = function(array, f) {
+                  var n = array.length,
+                      m = 0,
+                      a,
+                      d,
+                      s = 0,
+                      i = -1,
+                      j = 0;
+
+                  if (f == null) {
+                    while (++i < n) {
+                      if (!isNaN(a = number(array[i]))) {
+                        d = a - m;
+                        m += d / ++j;
+                        s += d * (a - m);
+                      }
+                    }
+                  }
+
+                  else {
+                    while (++i < n) {
+                      if (!isNaN(a = number(f(array[i], i, array)))) {
+                        d = a - m;
+                        m += d / ++j;
+                        s += d * (a - m);
+                      }
+                    }
+                  }
+
+                  if (j > 1) return s / (j - 1);
+                };
+
+                var deviation = function(array, f) {
+                  var v = variance(array, f);
+                  return v ? Math.sqrt(v) : v;
+                };
+
+                var extent = function(array, f) {
+                  var i = -1,
+                      n = array.length,
+                      a,
+                      b,
+                      c;
+
+                  if (f == null) {
+                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
+                    while (++i < n) if ((b = array[i]) != null) {
+                      if (a > b) a = b;
+                      if (c < b) c = b;
+                    }
+                  }
+
+                  else {
+                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
+                    while (++i < n) if ((b = f(array[i], i, array)) != null) {
+                      if (a > b) a = b;
+                      if (c < b) c = b;
+                    }
+                  }
+
+                  return [a, c];
+                };
+
+                var array = Array.prototype;
+
+                var slice = array.slice;
+                var map = array.map;
+
+                var constant$1 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var identity = function(x) {
+                  return x;
+                };
+
+                var range = function(start, stop, step) {
+                  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+
+                  var i = -1,
+                      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+                      range = new Array(n);
+
+                  while (++i < n) {
+                    range[i] = start + i * step;
+                  }
+
+                  return range;
+                };
+
+                var e10 = Math.sqrt(50);
+                var e5 = Math.sqrt(10);
+                var e2 = Math.sqrt(2);
+
+                var ticks = function(start, stop, count) {
+                  var step = tickStep(start, stop, count);
+                  return range(
+                    Math.ceil(start / step) * step,
+                    Math.floor(stop / step) * step + step / 2, // inclusive
+                    step
+                  );
+                };
+
+                function tickStep(start, stop, count) {
+                  var step0 = Math.abs(stop - start) / Math.max(0, count),
+                      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+                      error = step0 / step1;
+                  if (error >= e10) step1 *= 10;
+                  else if (error >= e5) step1 *= 5;
+                  else if (error >= e2) step1 *= 2;
+                  return stop < start ? -step1 : step1;
+                }
+
+                var sturges = function(values) {
+                  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
+                };
+
+                var histogram = function() {
+                  var value = identity,
+                      domain = extent,
+                      threshold = sturges;
+
+                  function histogram(data) {
+                    var i,
+                        n = data.length,
+                        x,
+                        values = new Array(n);
+
+                    for (i = 0; i < n; ++i) {
+                      values[i] = value(data[i], i, data);
+                    }
+
+                    var xz = domain(values),
+                        x0 = xz[0],
+                        x1 = xz[1],
+                        tz = threshold(values, x0, x1);
+
+                    // Convert number of thresholds into uniform thresholds.
+                    if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
+
+                    // Remove any thresholds outside the domain.
+                    var m = tz.length;
+                    while (tz[0] <= x0) tz.shift(), --m;
+                    while (tz[m - 1] >= x1) tz.pop(), --m;
+
+                    var bins = new Array(m + 1),
+                        bin;
+
+                    // Initialize bins.
+                    for (i = 0; i <= m; ++i) {
+                      bin = bins[i] = [];
+                      bin.x0 = i > 0 ? tz[i - 1] : x0;
+                      bin.x1 = i < m ? tz[i] : x1;
+                    }
+
+                    // Assign data to bins by value, ignoring any outside the domain.
+                    for (i = 0; i < n; ++i) {
+                      x = values[i];
+                      if (x0 <= x && x <= x1) {
+                        bins[bisectRight(tz, x, 0, m)].push(data[i]);
+                      }
+                    }
+
+                    return bins;
+                  }
+
+                  histogram.value = function(_) {
+                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value;
+                  };
+
+                  histogram.domain = function(_) {
+                    return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain;
+                  };
+
+                  histogram.thresholds = function(_) {
+                    return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold;
+                  };
+
+                  return histogram;
+                };
+
+                var threshold = function(array, p, f) {
+                  if (f == null) f = number;
+                  if (!(n = array.length)) return;
+                  if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
+                  if (p >= 1) return +f(array[n - 1], n - 1, array);
+                  var n,
+                      h = (n - 1) * p,
+                      i = Math.floor(h),
+                      a = +f(array[i], i, array),
+                      b = +f(array[i + 1], i + 1, array);
+                  return a + (b - a) * (h - i);
+                };
+
+                var freedmanDiaconis = function(values, min, max) {
+                  values = map.call(values, number).sort(ascending);
+                  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
+                };
+
+                var scott = function(values, min, max) {
+                  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
+                };
+
+                var max = function(array, f) {
+                  var i = -1,
+                      n = array.length,
+                      a,
+                      b;
+
+                  if (f == null) {
+                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+                    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+                  }
+
+                  else {
+                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+                    while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
+                  }
+
+                  return a;
+                };
+
+                var mean = function(array, f) {
+                  var s = 0,
+                      n = array.length,
+                      a,
+                      i = -1,
+                      j = n;
+
+                  if (f == null) {
+                    while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
+                  }
+
+                  else {
+                    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
+                  }
+
+                  if (j) return s / j;
+                };
+
+                var median = function(array, f) {
+                  var numbers = [],
+                      n = array.length,
+                      a,
+                      i = -1;
+
+                  if (f == null) {
+                    while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
+                  }
+
+                  else {
+                    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
+                  }
+
+                  return threshold(numbers.sort(ascending), 0.5);
+                };
+
+                var merge = function(arrays) {
+                  var n = arrays.length,
+                      m,
+                      i = -1,
+                      j = 0,
+                      merged,
+                      array;
+
+                  while (++i < n) j += arrays[i].length;
+                  merged = new Array(j);
+
+                  while (--n >= 0) {
+                    array = arrays[n];
+                    m = array.length;
+                    while (--m >= 0) {
+                      merged[--j] = array[m];
+                    }
+                  }
+
+                  return merged;
+                };
+
+                var min = function(array, f) {
+                  var i = -1,
+                      n = array.length,
+                      a,
+                      b;
+
+                  if (f == null) {
+                    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+                    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+                  }
+
+                  else {
+                    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+                    while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
+                  }
+
+                  return a;
+                };
+
+                var pairs = function(array) {
+                  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
+                  while (i < n) pairs[i] = [p, p = array[++i]];
+                  return pairs;
+                };
+
+                var permute = function(array, indexes) {
+                  var i = indexes.length, permutes = new Array(i);
+                  while (i--) permutes[i] = array[indexes[i]];
+                  return permutes;
+                };
+
+                var scan = function(array, compare) {
+                  if (!(n = array.length)) return;
+                  var i = 0,
+                      n,
+                      j = 0,
+                      xi,
+                      xj = array[j];
+
+                  if (!compare) compare = ascending;
+
+                  while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
+
+                  if (compare(xj, xj) === 0) return j;
+                };
+
+                var shuffle = function(array, i0, i1) {
+                  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
+                      t,
+                      i;
+
+                  while (m) {
+                    i = Math.random() * m-- | 0;
+                    t = array[m + i0];
+                    array[m + i0] = array[i + i0];
+                    array[i + i0] = t;
+                  }
+
+                  return array;
+                };
+
+                var sum = function(array, f) {
+                  var s = 0,
+                      n = array.length,
+                      a,
+                      i = -1;
+
+                  if (f == null) {
+                    while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
+                  }
+
+                  else {
+                    while (++i < n) if (a = +f(array[i], i, array)) s += a;
+                  }
+
+                  return s;
+                };
+
+                var transpose = function(matrix) {
+                  if (!(n = matrix.length)) return [];
+                  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
+                    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+                      row[j] = matrix[j][i];
+                    }
+                  }
+                  return transpose;
+                };
+
+                function length(d) {
+                  return d.length;
+                }
+
+                var zip = function() {
+                  return transpose(arguments);
+                };
+
+                var prefix = "$";
+
+                function Map() {}
+
+                Map.prototype = map$1.prototype = {
+                  constructor: Map,
+                  has: function(key) {
+                    return (prefix + key) in this;
+                  },
+                  get: function(key) {
+                    return this[prefix + key];
+                  },
+                  set: function(key, value) {
+                    this[prefix + key] = value;
+                    return this;
+                  },
+                  remove: function(key) {
+                    var property = prefix + key;
+                    return property in this && delete this[property];
+                  },
+                  clear: function() {
+                    for (var property in this) if (property[0] === prefix) delete this[property];
+                  },
+                  keys: function() {
+                    var keys = [];
+                    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
+                    return keys;
+                  },
+                  values: function() {
+                    var values = [];
+                    for (var property in this) if (property[0] === prefix) values.push(this[property]);
+                    return values;
+                  },
+                  entries: function() {
+                    var entries = [];
+                    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
+                    return entries;
+                  },
+                  size: function() {
+                    var size = 0;
+                    for (var property in this) if (property[0] === prefix) ++size;
+                    return size;
+                  },
+                  empty: function() {
+                    for (var property in this) if (property[0] === prefix) return false;
+                    return true;
+                  },
+                  each: function(f) {
+                    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
+                  }
+                };
+
+                function map$1(object, f) {
+                  var map = new Map;
+
+                  // Copy constructor.
+                  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
+
+                  // Index array by numeric index or specified key function.
+                  else if (Array.isArray(object)) {
+                    var i = -1,
+                        n = object.length,
+                        o;
+
+                    if (f == null) while (++i < n) map.set(i, object[i]);
+                    else while (++i < n) map.set(f(o = object[i], i, object), o);
+                  }
+
+                  // Convert object to map.
+                  else if (object) for (var key in object) map.set(key, object[key]);
+
+                  return map;
+                }
+
+                var nest = function() {
+                  var keys = [],
+                      sortKeys = [],
+                      sortValues,
+                      rollup,
+                      nest;
+
+                  function apply(array, depth, createResult, setResult) {
+                    if (depth >= keys.length) return rollup != null
+                        ? rollup(array) : (sortValues != null
+                        ? array.sort(sortValues)
+                        : array);
+
+                    var i = -1,
+                        n = array.length,
+                        key = keys[depth++],
+                        keyValue,
+                        value,
+                        valuesByKey = map$1(),
+                        values,
+                        result = createResult();
+
+                    while (++i < n) {
+                      if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
+                        values.push(value);
+                      } else {
+                        valuesByKey.set(keyValue, [value]);
+                      }
+                    }
+
+                    valuesByKey.each(function(values, key) {
+                      setResult(result, key, apply(values, depth, createResult, setResult));
+                    });
+
+                    return result;
+                  }
+
+                  function entries(map, depth) {
+                    if (++depth > keys.length) return map;
+                    var array, sortKey = sortKeys[depth - 1];
+                    if (rollup != null && depth >= keys.length) array = map.entries();
+                    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
+                    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
+                  }
+
+                  return nest = {
+                    object: function(array) { return apply(array, 0, createObject, setObject); },
+                    map: function(array) { return apply(array, 0, createMap, setMap); },
+                    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
+                    key: function(d) { keys.push(d); return nest; },
+                    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
+                    sortValues: function(order) { sortValues = order; return nest; },
+                    rollup: function(f) { rollup = f; return nest; }
+                  };
+                };
+
+                function createObject() {
+                  return {};
+                }
+
+                function setObject(object, key, value) {
+                  object[key] = value;
+                }
+
+                function createMap() {
+                  return map$1();
+                }
+
+                function setMap(map, key, value) {
+                  map.set(key, value);
+                }
+
+                function Set() {}
+
+                var proto = map$1.prototype;
+
+                Set.prototype = set.prototype = {
+                  constructor: Set,
+                  has: proto.has,
+                  add: function(value) {
+                    value += "";
+                    this[prefix + value] = value;
+                    return this;
+                  },
+                  remove: proto.remove,
+                  clear: proto.clear,
+                  values: proto.keys,
+                  size: proto.size,
+                  empty: proto.empty,
+                  each: proto.each
+                };
+
+                function set(object, f) {
+                  var set = new Set;
+
+                  // Copy constructor.
+                  if (object instanceof Set) object.each(function(value) { set.add(value); });
+
+                  // Otherwise, assume it’s an array.
+                  else if (object) {
+                    var i = -1, n = object.length;
+                    if (f == null) while (++i < n) set.add(object[i]);
+                    else while (++i < n) set.add(f(object[i], i, object));
+                  }
+
+                  return set;
+                }
+
+                var keys = function(map) {
+                  var keys = [];
+                  for (var key in map) keys.push(key);
+                  return keys;
+                };
+
+                var values = function(map) {
+                  var values = [];
+                  for (var key in map) values.push(map[key]);
+                  return values;
+                };
+
+                var entries = function(map) {
+                  var entries = [];
+                  for (var key in map) entries.push({key: key, value: map[key]});
+                  return entries;
+                };
+
+                var uniform = function(min, max) {
+                  min = min == null ? 0 : +min;
+                  max = max == null ? 1 : +max;
+                  if (arguments.length === 1) max = min, min = 0;
+                  else max -= min;
+                  return function() {
+                    return Math.random() * max + min;
+                  };
+                };
+
+                var normal = function(mu, sigma) {
+                  var x, r;
+                  mu = mu == null ? 0 : +mu;
+                  sigma = sigma == null ? 1 : +sigma;
+                  return function() {
+                    var y;
+
+                    // If available, use the second previously-generated uniform random.
+                    if (x != null) y = x, x = null;
+
+                    // Otherwise, generate a new x and y.
+                    else do {
+                      x = Math.random() * 2 - 1;
+                      y = Math.random() * 2 - 1;
+                      r = x * x + y * y;
+                    } while (!r || r > 1);
+
+                    return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
+                  };
+                };
+
+                var logNormal = function() {
+                  var randomNormal = normal.apply(this, arguments);
+                  return function() {
+                    return Math.exp(randomNormal());
+                  };
+                };
+
+                var irwinHall = function(n) {
+                  return function() {
+                    for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
+                    return sum;
+                  };
+                };
+
+                var bates = function(n) {
+                  var randomIrwinHall = irwinHall(n);
+                  return function() {
+                    return randomIrwinHall() / n;
+                  };
+                };
+
+                var exponential = function(lambda) {
+                  return function() {
+                    return -Math.log(1 - Math.random()) / lambda;
+                  };
+                };
+
+                function linear(t) {
+                  return +t;
+                }
+
+                function quadIn(t) {
+                  return t * t;
+                }
+
+                function quadOut(t) {
+                  return t * (2 - t);
+                }
+
+                function quadInOut(t) {
+                  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+                }
+
+                function cubicIn(t) {
+                  return t * t * t;
+                }
+
+                function cubicOut(t) {
+                  return --t * t * t + 1;
+                }
+
+                function cubicInOut(t) {
+                  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+                }
+
+                var exponent = 3;
+
+                var polyIn = (function custom(e) {
+                  e = +e;
+
+                  function polyIn(t) {
+                    return Math.pow(t, e);
+                  }
+
+                  polyIn.exponent = custom;
+
+                  return polyIn;
+                })(exponent);
+
+                var polyOut = (function custom(e) {
+                  e = +e;
+
+                  function polyOut(t) {
+                    return 1 - Math.pow(1 - t, e);
+                  }
+
+                  polyOut.exponent = custom;
+
+                  return polyOut;
+                })(exponent);
+
+                var polyInOut = (function custom(e) {
+                  e = +e;
+
+                  function polyInOut(t) {
+                    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+                  }
+
+                  polyInOut.exponent = custom;
+
+                  return polyInOut;
+                })(exponent);
+
+                var pi = Math.PI;
+                var halfPi = pi / 2;
+
+                function sinIn(t) {
+                  return 1 - Math.cos(t * halfPi);
+                }
+
+                function sinOut(t) {
+                  return Math.sin(t * halfPi);
+                }
+
+                function sinInOut(t) {
+                  return (1 - Math.cos(pi * t)) / 2;
+                }
+
+                function expIn(t) {
+                  return Math.pow(2, 10 * t - 10);
+                }
+
+                function expOut(t) {
+                  return 1 - Math.pow(2, -10 * t);
+                }
+
+                function expInOut(t) {
+                  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
+                }
+
+                function circleIn(t) {
+                  return 1 - Math.sqrt(1 - t * t);
+                }
+
+                function circleOut(t) {
+                  return Math.sqrt(1 - --t * t);
+                }
+
+                function circleInOut(t) {
+                  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+                }
+
+                var b1 = 4 / 11;
+                var b2 = 6 / 11;
+                var b3 = 8 / 11;
+                var b4 = 3 / 4;
+                var b5 = 9 / 11;
+                var b6 = 10 / 11;
+                var b7 = 15 / 16;
+                var b8 = 21 / 22;
+                var b9 = 63 / 64;
+                var b0 = 1 / b1 / b1;
+
+                function bounceIn(t) {
+                  return 1 - bounceOut(1 - t);
+                }
+
+                function bounceOut(t) {
+                  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+                }
+
+                function bounceInOut(t) {
+                  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+                }
+
+                var overshoot = 1.70158;
+
+                var backIn = (function custom(s) {
+                  s = +s;
+
+                  function backIn(t) {
+                    return t * t * ((s + 1) * t - s);
+                  }
+
+                  backIn.overshoot = custom;
+
+                  return backIn;
+                })(overshoot);
+
+                var backOut = (function custom(s) {
+                  s = +s;
+
+                  function backOut(t) {
+                    return --t * t * ((s + 1) * t + s) + 1;
+                  }
+
+                  backOut.overshoot = custom;
+
+                  return backOut;
+                })(overshoot);
+
+                var backInOut = (function custom(s) {
+                  s = +s;
+
+                  function backInOut(t) {
+                    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+                  }
+
+                  backInOut.overshoot = custom;
+
+                  return backInOut;
+                })(overshoot);
+
+                var tau = 2 * Math.PI;
+                var amplitude = 1;
+                var period = 0.3;
+
+                var elasticIn = (function custom(a, p) {
+                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+                  function elasticIn(t) {
+                    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
+                  }
+
+                  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
+                  elasticIn.period = function(p) { return custom(a, p); };
+
+                  return elasticIn;
+                })(amplitude, period);
+
+                var elasticOut = (function custom(a, p) {
+                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+                  function elasticOut(t) {
+                    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
+                  }
+
+                  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
+                  elasticOut.period = function(p) { return custom(a, p); };
+
+                  return elasticOut;
+                })(amplitude, period);
+
+                var elasticInOut = (function custom(a, p) {
+                  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+                  function elasticInOut(t) {
+                    return ((t = t * 2 - 1) < 0
+                        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
+                        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
+                  }
+
+                  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
+                  elasticInOut.period = function(p) { return custom(a, p); };
+
+                  return elasticInOut;
+                })(amplitude, period);
+
+                var area = function(polygon) {
+                  var i = -1,
+                      n = polygon.length,
+                      a,
+                      b = polygon[n - 1],
+                      area = 0;
+
+                  while (++i < n) {
+                    a = b;
+                    b = polygon[i];
+                    area += a[1] * b[0] - a[0] * b[1];
+                  }
+
+                  return area / 2;
+                };
+
+                var centroid = function(polygon) {
+                  var i = -1,
+                      n = polygon.length,
+                      x = 0,
+                      y = 0,
+                      a,
+                      b = polygon[n - 1],
+                      c,
+                      k = 0;
+
+                  while (++i < n) {
+                    a = b;
+                    b = polygon[i];
+                    k += c = a[0] * b[1] - b[0] * a[1];
+                    x += (a[0] + b[0]) * c;
+                    y += (a[1] + b[1]) * c;
+                  }
+
+                  return k *= 3, [x / k, y / k];
+                };
+
+                // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
+                // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
+                // right, +y is up). Returns a positive value if ABC is counter-clockwise,
+                // negative if clockwise, and zero if the points are collinear.
+                var cross = function(a, b, c) {
+                  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
+                };
+
+                function lexicographicOrder(a, b) {
+                  return a[0] - b[0] || a[1] - b[1];
+                }
+
+                // Computes the upper convex hull per the monotone chain algorithm.
+                // Assumes points.length >= 3, is sorted by x, unique in y.
+                // Returns an array of indices into points in left-to-right order.
+                function computeUpperHullIndexes(points) {
+                  var n = points.length,
+                      indexes = [0, 1],
+                      size = 2;
+
+                  for (var i = 2; i < n; ++i) {
+                    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
+                    indexes[size++] = i;
+                  }
+
+                  return indexes.slice(0, size); // remove popped points
+                }
+
+                var hull = function(points) {
+                  if ((n = points.length) < 3) return null;
+
+                  var i,
+                      n,
+                      sortedPoints = new Array(n),
+                      flippedPoints = new Array(n);
+
+                  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
+                  sortedPoints.sort(lexicographicOrder);
+                  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
+
+                  var upperIndexes = computeUpperHullIndexes(sortedPoints),
+                      lowerIndexes = computeUpperHullIndexes(flippedPoints);
+
+                  // Construct the hull polygon, removing possible duplicate endpoints.
+                  var skipLeft = lowerIndexes[0] === upperIndexes[0],
+                      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
+                      hull = [];
+
+                  // Add upper hull in right-to-l order.
+                  // Then add lower hull in left-to-right order.
+                  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
+                  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
+
+                  return hull;
+                };
+
+                var contains = function(polygon, point) {
+                  var n = polygon.length,
+                      p = polygon[n - 1],
+                      x = point[0], y = point[1],
+                      x0 = p[0], y0 = p[1],
+                      x1, y1,
+                      inside = false;
+
+                  for (var i = 0; i < n; ++i) {
+                    p = polygon[i], x1 = p[0], y1 = p[1];
+                    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
+                    x0 = x1, y0 = y1;
+                  }
+
+                  return inside;
+                };
+
+                var length$1 = function(polygon) {
+                  var i = -1,
+                      n = polygon.length,
+                      b = polygon[n - 1],
+                      xa,
+                      ya,
+                      xb = b[0],
+                      yb = b[1],
+                      perimeter = 0;
+
+                  while (++i < n) {
+                    xa = xb;
+                    ya = yb;
+                    b = polygon[i];
+                    xb = b[0];
+                    yb = b[1];
+                    xa -= xb;
+                    ya -= yb;
+                    perimeter += Math.sqrt(xa * xa + ya * ya);
+                  }
+
+                  return perimeter;
+                };
+
+                var pi$1 = Math.PI;
+                var tau$1 = 2 * pi$1;
+                var epsilon = 1e-6;
+                var tauEpsilon = tau$1 - epsilon;
+
+                function Path() {
+                  this._x0 = this._y0 = // start of current subpath
+                  this._x1 = this._y1 = null; // end of current subpath
+                  this._ = [];
+                }
+
+                function path() {
+                  return new Path;
+                }
+
+                Path.prototype = path.prototype = {
+                  constructor: Path,
+                  moveTo: function(x, y) {
+                    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
+                  },
+                  closePath: function() {
+                    if (this._x1 !== null) {
+                      this._x1 = this._x0, this._y1 = this._y0;
+                      this._.push("Z");
+                    }
+                  },
+                  lineTo: function(x, y) {
+                    this._.push("L", this._x1 = +x, ",", this._y1 = +y);
+                  },
+                  quadraticCurveTo: function(x1, y1, x, y) {
+                    this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
+                  },
+                  bezierCurveTo: function(x1, y1, x2, y2, x, y) {
+                    this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
+                  },
+                  arcTo: function(x1, y1, x2, y2, r) {
+                    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+                    var x0 = this._x1,
+                        y0 = this._y1,
+                        x21 = x2 - x1,
+                        y21 = y2 - y1,
+                        x01 = x0 - x1,
+                        y01 = y0 - y1,
+                        l01_2 = x01 * x01 + y01 * y01;
+
+                    // Is the radius negative? Error.
+                    if (r < 0) throw new Error("negative radius: " + r);
+
+                    // Is this path empty? Move to (x1,y1).
+                    if (this._x1 === null) {
+                      this._.push(
+                        "M", this._x1 = x1, ",", this._y1 = y1
+                      );
+                    }
+
+                    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+                    else if (!(l01_2 > epsilon)) {}
+
+                    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+                    // Equivalently, is (x1,y1) coincident with (x2,y2)?
+                    // Or, is the radius zero? Line to (x1,y1).
+                    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+                      this._.push(
+                        "L", this._x1 = x1, ",", this._y1 = y1
+                      );
+                    }
+
+                    // Otherwise, draw an arc!
+                    else {
+                      var x20 = x2 - x0,
+                          y20 = y2 - y0,
+                          l21_2 = x21 * x21 + y21 * y21,
+                          l20_2 = x20 * x20 + y20 * y20,
+                          l21 = Math.sqrt(l21_2),
+                          l01 = Math.sqrt(l01_2),
+                          l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+                          t01 = l / l01,
+                          t21 = l / l21;
+
+                      // If the start tangent is not coincident with (x0,y0), line to.
+                      if (Math.abs(t01 - 1) > epsilon) {
+                        this._.push(
+                          "L", x1 + t01 * x01, ",", y1 + t01 * y01
+                        );
+                      }
+
+                      this._.push(
+                        "A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
+                      );
+                    }
+                  },
+                  arc: function(x, y, r, a0, a1, ccw) {
+                    x = +x, y = +y, r = +r;
+                    var dx = r * Math.cos(a0),
+                        dy = r * Math.sin(a0),
+                        x0 = x + dx,
+                        y0 = y + dy,
+                        cw = 1 ^ ccw,
+                        da = ccw ? a0 - a1 : a1 - a0;
+
+                    // Is the radius negative? Error.
+                    if (r < 0) throw new Error("negative radius: " + r);
+
+                    // Is this path empty? Move to (x0,y0).
+                    if (this._x1 === null) {
+                      this._.push(
+                        "M", x0, ",", y0
+                      );
+                    }
+
+                    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+                    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+                      this._.push(
+                        "L", x0, ",", y0
+                      );
+                    }
+
+                    // Is this arc empty? We’re done.
+                    if (!r) return;
+
+                    // Is this a complete circle? Draw two arcs to complete the circle.
+                    if (da > tauEpsilon) {
+                      this._.push(
+                        "A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
+                        "A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
+                      );
+                    }
+
+                    // Otherwise, draw an arc!
+                    else {
+                      if (da < 0) da = da % tau$1 + tau$1;
+                      this._.push(
+                        "A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
+                      );
+                    }
+                  },
+                  rect: function(x, y, w, h) {
+                    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
+                  },
+                  toString: function() {
+                    return this._.join("");
+                  }
+                };
+
+                var tree_add = function(d) {
+                  var x = +this._x.call(null, d),
+                      y = +this._y.call(null, d);
+                  return add(this.cover(x, y), x, y, d);
+                };
+
+                function add(tree, x, y, d) {
+                  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
+
+                  var parent,
+                      node = tree._root,
+                      leaf = {data: d},
+                      x0 = tree._x0,
+                      y0 = tree._y0,
+                      x1 = tree._x1,
+                      y1 = tree._y1,
+                      xm,
+                      ym,
+                      xp,
+                      yp,
+                      right,
+                      bottom,
+                      i,
+                      j;
+
+                  // If the tree is empty, initialize the root as a leaf.
+                  if (!node) return tree._root = leaf, tree;
+
+                  // Find the existing leaf for the new point, or add it.
+                  while (node.length) {
+                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+                    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
+                  }
+
+                  // Is the new point is exactly coincident with the existing point?
+                  xp = +tree._x.call(null, node.data);
+                  yp = +tree._y.call(null, node.data);
+                  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
+
+                  // Otherwise, split the leaf node until the old and new point are separated.
+                  do {
+                    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
+                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+                  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
+                  return parent[j] = node, parent[i] = leaf, tree;
+                }
+
+                function addAll(data) {
+                  var d, i, n = data.length,
+                      x,
+                      y,
+                      xz = new Array(n),
+                      yz = new Array(n),
+                      x0 = Infinity,
+                      y0 = Infinity,
+                      x1 = -Infinity,
+                      y1 = -Infinity;
+
+                  // Compute the points and their extent.
+                  for (i = 0; i < n; ++i) {
+                    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
+                    xz[i] = x;
+                    yz[i] = y;
+                    if (x < x0) x0 = x;
+                    if (x > x1) x1 = x;
+                    if (y < y0) y0 = y;
+                    if (y > y1) y1 = y;
+                  }
+
+                  // If there were no (valid) points, inherit the existing extent.
+                  if (x1 < x0) x0 = this._x0, x1 = this._x1;
+                  if (y1 < y0) y0 = this._y0, y1 = this._y1;
+
+                  // Expand the tree to cover the new points.
+                  this.cover(x0, y0).cover(x1, y1);
+
+                  // Add the new points.
+                  for (i = 0; i < n; ++i) {
+                    add(this, xz[i], yz[i], data[i]);
+                  }
+
+                  return this;
+                }
+
+                var tree_cover = function(x, y) {
+                  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
+
+                  var x0 = this._x0,
+                      y0 = this._y0,
+                      x1 = this._x1,
+                      y1 = this._y1;
+
+                  // If the quadtree has no extent, initialize them.
+                  // Integer extent are necessary so that if we later double the extent,
+                  // the existing quadrant boundaries don’t change due to floating point error!
+                  if (isNaN(x0)) {
+                    x1 = (x0 = Math.floor(x)) + 1;
+                    y1 = (y0 = Math.floor(y)) + 1;
+                  }
+
+                  // Otherwise, double repeatedly to cover.
+                  else if (x0 > x || x > x1 || y0 > y || y > y1) {
+                    var z = x1 - x0,
+                        node = this._root,
+                        parent,
+                        i;
+
+                    switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
+                      case 0: {
+                        do parent = new Array(4), parent[i] = node, node = parent;
+                        while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
+                        break;
+                      }
+                      case 1: {
+                        do parent = new Array(4), parent[i] = node, node = parent;
+                        while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
+                        break;
+                      }
+                      case 2: {
+                        do parent = new Array(4), parent[i] = node, node = parent;
+                        while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
+                        break;
+                      }
+                      case 3: {
+                        do parent = new Array(4), parent[i] = node, node = parent;
+                        while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
+                        break;
+                      }
+                    }
+
+                    if (this._root && this._root.length) this._root = node;
+                  }
+
+                  // If the quadtree covers the point already, just return.
+                  else return this;
+
+                  this._x0 = x0;
+                  this._y0 = y0;
+                  this._x1 = x1;
+                  this._y1 = y1;
+                  return this;
+                };
+
+                var tree_data = function() {
+                  var data = [];
+                  this.visit(function(node) {
+                    if (!node.length) do data.push(node.data); while (node = node.next)
+                  });
+                  return data;
+                };
+
+                var tree_extent = function(_) {
+                  return arguments.length
+                      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
+                      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
+                };
+
+                var Quad = function(node, x0, y0, x1, y1) {
+                  this.node = node;
+                  this.x0 = x0;
+                  this.y0 = y0;
+                  this.x1 = x1;
+                  this.y1 = y1;
+                };
+
+                var tree_find = function(x, y, radius) {
+                  var data,
+                      x0 = this._x0,
+                      y0 = this._y0,
+                      x1,
+                      y1,
+                      x2,
+                      y2,
+                      x3 = this._x1,
+                      y3 = this._y1,
+                      quads = [],
+                      node = this._root,
+                      q,
+                      i;
+
+                  if (node) quads.push(new Quad(node, x0, y0, x3, y3));
+                  if (radius == null) radius = Infinity;
+                  else {
+                    x0 = x - radius, y0 = y - radius;
+                    x3 = x + radius, y3 = y + radius;
+                    radius *= radius;
+                  }
+
+                  while (q = quads.pop()) {
+
+                    // Stop searching if this quadrant can’t contain a closer node.
+                    if (!(node = q.node)
+                        || (x1 = q.x0) > x3
+                        || (y1 = q.y0) > y3
+                        || (x2 = q.x1) < x0
+                        || (y2 = q.y1) < y0) continue;
+
+                    // Bisect the current quadrant.
+                    if (node.length) {
+                      var xm = (x1 + x2) / 2,
+                          ym = (y1 + y2) / 2;
+
+                      quads.push(
+                        new Quad(node[3], xm, ym, x2, y2),
+                        new Quad(node[2], x1, ym, xm, y2),
+                        new Quad(node[1], xm, y1, x2, ym),
+                        new Quad(node[0], x1, y1, xm, ym)
+                      );
+
+                      // Visit the closest quadrant first.
+                      if (i = (y >= ym) << 1 | (x >= xm)) {
+                        q = quads[quads.length - 1];
+                        quads[quads.length - 1] = quads[quads.length - 1 - i];
+                        quads[quads.length - 1 - i] = q;
+                      }
+                    }
+
+                    // Visit this point. (Visiting coincident points isn’t necessary!)
+                    else {
+                      var dx = x - +this._x.call(null, node.data),
+                          dy = y - +this._y.call(null, node.data),
+                          d2 = dx * dx + dy * dy;
+                      if (d2 < radius) {
+                        var d = Math.sqrt(radius = d2);
+                        x0 = x - d, y0 = y - d;
+                        x3 = x + d, y3 = y + d;
+                        data = node.data;
+                      }
+                    }
+                  }
+
+                  return data;
+                };
+
+                var tree_remove = function(d) {
+                  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
+
+                  var parent,
+                      node = this._root,
+                      retainer,
+                      previous,
+                      next,
+                      x0 = this._x0,
+                      y0 = this._y0,
+                      x1 = this._x1,
+                      y1 = this._y1,
+                      x,
+                      y,
+                      xm,
+                      ym,
+                      right,
+                      bottom,
+                      i,
+                      j;
+
+                  // If the tree is empty, initialize the root as a leaf.
+                  if (!node) return this;
+
+                  // Find the leaf node for the point.
+                  // While descending, also retain the deepest parent with a non-removed sibling.
+                  if (node.length) while (true) {
+                    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+                    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+                    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
+                    if (!node.length) break;
+                    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
+                  }
+
+                  // Find the point to remove.
+                  while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+                  if (next = node.next) delete node.next;
+
+                  // If there are multiple coincident points, remove just the point.
+                  if (previous) return (next ? previous.next = next : delete previous.next), this;
+
+                  // If this is the root point, remove it.
+                  if (!parent) return this._root = next, this;
+
+                  // Remove this leaf.
+                  next ? parent[i] = next : delete parent[i];
+
+                  // If the parent now contains exactly one leaf, collapse superfluous parents.
+                  if ((node = parent[0] || parent[1] || parent[2] || parent[3])
+                      && node === (parent[3] || parent[2] || parent[1] || parent[0])
+                      && !node.length) {
+                    if (retainer) retainer[j] = node;
+                    else this._root = node;
+                  }
+
+                  return this;
+                };
+
+                function removeAll(data) {
+                  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+                  return this;
+                }
+
+                var tree_root = function() {
+                  return this._root;
+                };
+
+                var tree_size = function() {
+                  var size = 0;
+                  this.visit(function(node) {
+                    if (!node.length) do ++size; while (node = node.next)
+                  });
+                  return size;
+                };
+
+                var tree_visit = function(callback) {
+                  var quads = [], q, node = this._root, child, x0, y0, x1, y1;
+                  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
+                  while (q = quads.pop()) {
+                    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
+                      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+                      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+                      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+                      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+                      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+                    }
+                  }
+                  return this;
+                };
+
+                var tree_visitAfter = function(callback) {
+                  var quads = [], next = [], q;
+                  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
+                  while (q = quads.pop()) {
+                    var node = q.node;
+                    if (node.length) {
+                      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+                      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+                      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+                      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+                      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+                    }
+                    next.push(q);
+                  }
+                  while (q = next.pop()) {
+                    callback(q.node, q.x0, q.y0, q.x1, q.y1);
+                  }
+                  return this;
+                };
+
+                function defaultX(d) {
+                  return d[0];
+                }
+
+                var tree_x = function(_) {
+                  return arguments.length ? (this._x = _, this) : this._x;
+                };
+
+                function defaultY(d) {
+                  return d[1];
+                }
+
+                var tree_y = function(_) {
+                  return arguments.length ? (this._y = _, this) : this._y;
+                };
+
+                function quadtree(nodes, x, y) {
+                  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
+                  return nodes == null ? tree : tree.addAll(nodes);
+                }
+
+                function Quadtree(x, y, x0, y0, x1, y1) {
+                  this._x = x;
+                  this._y = y;
+                  this._x0 = x0;
+                  this._y0 = y0;
+                  this._x1 = x1;
+                  this._y1 = y1;
+                  this._root = undefined;
+                }
+
+                function leaf_copy(leaf) {
+                  var copy = {data: leaf.data}, next = copy;
+                  while (leaf = leaf.next) next = next.next = {data: leaf.data};
+                  return copy;
+                }
+
+                var treeProto = quadtree.prototype = Quadtree.prototype;
+
+                treeProto.copy = function() {
+                  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
+                      node = this._root,
+                      nodes,
+                      child;
+
+                  if (!node) return copy;
+
+                  if (!node.length) return copy._root = leaf_copy(node), copy;
+
+                  nodes = [{source: node, target: copy._root = new Array(4)}];
+                  while (node = nodes.pop()) {
+                    for (var i = 0; i < 4; ++i) {
+                      if (child = node.source[i]) {
+                        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
+                        else node.target[i] = leaf_copy(child);
+                      }
+                    }
+                  }
+
+                  return copy;
+                };
+
+                treeProto.add = tree_add;
+                treeProto.addAll = addAll;
+                treeProto.cover = tree_cover;
+                treeProto.data = tree_data;
+                treeProto.extent = tree_extent;
+                treeProto.find = tree_find;
+                treeProto.remove = tree_remove;
+                treeProto.removeAll = removeAll;
+                treeProto.root = tree_root;
+                treeProto.size = tree_size;
+                treeProto.visit = tree_visit;
+                treeProto.visitAfter = tree_visitAfter;
+                treeProto.x = tree_x;
+                treeProto.y = tree_y;
+
+                var slice$1 = [].slice;
+
+                var noabort = {};
+
+                function Queue(size) {
+                  if (!(size >= 1)) throw new Error;
+                  this._size = size;
+                  this._call =
+                  this._error = null;
+                  this._tasks = [];
+                  this._data = [];
+                  this._waiting =
+                  this._active =
+                  this._ended =
+                  this._start = 0; // inside a synchronous task callback?
+                }
+
+                Queue.prototype = queue.prototype = {
+                  constructor: Queue,
+                  defer: function(callback) {
+                    if (typeof callback !== "function" || this._call) throw new Error;
+                    if (this._error != null) return this;
+                    var t = slice$1.call(arguments, 1);
+                    t.push(callback);
+                    ++this._waiting, this._tasks.push(t);
+                    poke(this);
+                    return this;
+                  },
+                  abort: function() {
+                    if (this._error == null) abort(this, new Error("abort"));
+                    return this;
+                  },
+                  await: function(callback) {
+                    if (typeof callback !== "function" || this._call) throw new Error;
+                    this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
+                    maybeNotify(this);
+                    return this;
+                  },
+                  awaitAll: function(callback) {
+                    if (typeof callback !== "function" || this._call) throw new Error;
+                    this._call = callback;
+                    maybeNotify(this);
+                    return this;
+                  }
+                };
+
+                function poke(q) {
+                  if (!q._start) {
+                    try { start(q); } // let the current task complete
+                    catch (e) {
+                      if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
+                      else if (!q._data) throw e; // await callback errored synchronously
+                    }
+                  }
+                }
+
+                function start(q) {
+                  while (q._start = q._waiting && q._active < q._size) {
+                    var i = q._ended + q._active,
+                        t = q._tasks[i],
+                        j = t.length - 1,
+                        c = t[j];
+                    t[j] = end(q, i);
+                    --q._waiting, ++q._active;
+                    t = c.apply(null, t);
+                    if (!q._tasks[i]) continue; // task finished synchronously
+                    q._tasks[i] = t || noabort;
+                  }
+                }
+
+                function end(q, i) {
+                  return function(e, r) {
+                    if (!q._tasks[i]) return; // ignore multiple callbacks
+                    --q._active, ++q._ended;
+                    q._tasks[i] = null;
+                    if (q._error != null) return; // ignore secondary errors
+                    if (e != null) {
+                      abort(q, e);
+                    } else {
+                      q._data[i] = r;
+                      if (q._waiting) poke(q);
+                      else maybeNotify(q);
+                    }
+                  };
+                }
+
+                function abort(q, e) {
+                  var i = q._tasks.length, t;
+                  q._error = e; // ignore active callbacks
+                  q._data = undefined; // allow gc
+                  q._waiting = NaN; // prevent starting
+
+                  while (--i >= 0) {
+                    if (t = q._tasks[i]) {
+                      q._tasks[i] = null;
+                      if (t.abort) {
+                        try { t.abort(); }
+                        catch (e) { /* ignore */ }
+                      }
+                    }
+                  }
+
+                  q._active = NaN; // allow notification
+                  maybeNotify(q);
+                }
+
+                function maybeNotify(q) {
+                  if (!q._active && q._call) {
+                    var d = q._data;
+                    q._data = undefined; // allow gc
+                    q._call(q._error, d);
+                  }
+                }
+
+                function queue(concurrency) {
+                  return new Queue(arguments.length ? +concurrency : Infinity);
+                }
+
+                var constant$2 = function(x) {
+                  return function constant() {
+                    return x;
+                  };
+                };
+
+                var epsilon$1 = 1e-12;
+                var pi$2 = Math.PI;
+                var halfPi$1 = pi$2 / 2;
+                var tau$2 = 2 * pi$2;
+
+                function arcInnerRadius(d) {
+                  return d.innerRadius;
+                }
+
+                function arcOuterRadius(d) {
+                  return d.outerRadius;
+                }
+
+                function arcStartAngle(d) {
+                  return d.startAngle;
+                }
+
+                function arcEndAngle(d) {
+                  return d.endAngle;
+                }
+
+                function arcPadAngle(d) {
+                  return d && d.padAngle; // Note: optional!
+                }
+
+                function asin(x) {
+                  return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);
+                }
+
+                function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+                  var x10 = x1 - x0, y10 = y1 - y0,
+                      x32 = x3 - x2, y32 = y3 - y2,
+                      t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
+                  return [x0 + t * x10, y0 + t * y10];
+                }
+
+                // Compute perpendicular offset line of length rc.
+                // http://mathworld.wolfram.com/Circle-LineIntersection.html
+                function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+                  var x01 = x0 - x1,
+                      y01 = y0 - y1,
+                      lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
+                      ox = lo * y01,
+                      oy = -lo * x01,
+                      x11 = x0 + ox,
+                      y11 = y0 + oy,
+                      x10 = x1 + ox,
+                      y10 = y1 + oy,
+                      x00 = (x11 + x10) / 2,
+                      y00 = (y11 + y10) / 2,
+                      dx = x10 - x11,
+                      dy = y10 - y11,
+                      d2 = dx * dx + dy * dy,
+                      r = r1 - rc,
+                      D = x11 * y10 - x10 * y11,
+                      d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
+                      cx0 = (D * dy - dx * d) / d2,
+                      cy0 = (-D * dx - dy * d) / d2,
+                      cx1 = (D * dy + dx * d) / d2,
+                      cy1 = (-D * dx + dy * d) / d2,
+                      dx0 = cx0 - x00,
+                      dy0 = cy0 - y00,
+                      dx1 = cx1 - x00,
+                      dy1 = cy1 - y00;
+
+                  // Pick the closer of the two intersection points.
+                  // TODO Is there a faster way to determine which intersection to use?
+                  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+
+                  return {
+                    cx: cx0,
+                    cy: cy0,
+                    x01: -ox,
+                    y01: -oy,
+                    x11: cx0 * (r1 / r - 1),
+                    y11: cy0 * (r1 / r - 1)
+                  };
+                }
+
+                var arc = function() {
+                  var innerRadius = arcInnerRadius,
+                      outerRadius = arcOuterRadius,
+                      cornerRadius = constant$2(0),
+                      padRadius = null,
+                      startAngle = arcStartAngle,
+                      endAngle = arcEndAngle,
+                      padAngle = arcPadAngle,
+                      context = null;
+
+                  function arc() {
+                    var buffer,
+                        r,
+                        r0 = +innerRadius.apply(this, arguments),
+                        r1 = +outerRadius.apply(this, arguments),
+                        a0 = startAngle.apply(this, arguments) - halfPi$1,
+                        a1 = endAngle.apply(this, arguments) - halfPi$1,
+                        da = Math.abs(a1 - a0),
+                        cw = a1 > a0;
+
+                    if (!context) context = buffer = path();
+
+                    // Ensure that the outer radius is always larger than the inner radius.
+                    if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+                    // Is it a point?
+                    if (!(r1 > epsilon$1)) context.moveTo(0, 0);
+
+                    // Or is it a circle or annulus?
+                    else if (da > tau$2 - epsilon$1) {
+                      context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
+                      context.arc(0, 0, r1, a0, a1, !cw);
+                      if (r0 > epsilon$1) {
+                        context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
+                        context.arc(0, 0, r0, a1, a0, cw);
+                      }
+                    }
+
+                    // Or is it a circular or annular sector?
+                    else {
+                      var a01 = a0,
+                          a11 = a1,
+                          a00 = a0,
+                          a10 = a1,
+                          da0 = da,
+                          da1 = da,
+                          ap = padAngle.apply(this, arguments) / 2,
+                          rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
+                          rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+                          rc0 = rc,
+                          rc1 = rc,
+                          t0,
+                          t1;
+
+                      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+                      if (rp > epsilon$1) {
+                        var p0 = asin(rp / r0 * Math.sin(ap)),
+                            p1 = asin(rp / r1 * Math.sin(ap));
+                        if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
+                        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+                        if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
+                        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+                      }
+
+                      var x01 = r1 * Math.cos(a01),
+                          y01 = r1 * Math.sin(a01),
+                          x10 = r0 * Math.cos(a10),
+                          y10 = r0 * Math.sin(a10);
+
+                      // Apply rounded corners?
+                      if (rc > epsilon$1) {
+                        var x11 = r1 * Math.cos(a11),
+                            y11 = r1 * Math.sin(a11),
+                            x00 = r0 * Math.cos(a00),
+                            y00 = r0 * Math.sin(a00);
+
+                        // Restrict the corner radius according to the sector angle.
+                        if (da < pi$2) {
+                          var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
+                              ax = x01 - oc[0],
+                              ay = y01 - oc[1],
+                              bx = x11 - oc[0],
+                              by = y11 - oc[1],
+                              kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
+                              lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
+                          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
+                          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
+                        }
+                      }
+
+                      // Is the sector collapsed to a line?
+                      if (!(da1 > epsilon$1)) context.moveTo(x01, y01);
+
+                      // Does the sector’s outer ring have rounded corners?
+                      else if (rc1 > epsilon$1) {
+                        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+                        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+
+                        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+                        // Have the corners merged?
+                        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+                        // Otherwise, draw the two corners and the ring.
+                        else {
+                          context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+                          context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+                          context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+                        }
+                      }
+
+                      // Or is the outer ring just a circular arc?
+                      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+                      // Is there no inner ring, and it’s a circular sector?
+                      // Or perhaps it’s an annular sector collapsed due to padding?
+                      if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);
+
+                      // Does the sector’s inner ring (or point) have rounded corners?
+                      else if (rc0 > epsilon$1) {
+                        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+                        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+
+                        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+                        // Have the corners merged?
+                        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+                        // Otherwise, draw the two corners and the ring.
+                        else {
+                          context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+                          context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+                          context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+                        }
+                      }
+
+                      // Or is the inner ring just a circular arc?
+                      else context.arc(0, 0, r0, a10, a00, cw);
+                    }
+
+                    context.closePath();
+
+                    if (buffer) return context = null, buffer + "" || null;
+                  }
+
+                  arc.centroid = function() {
+                    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+                        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;
+                    return [Math.cos(a) * r, Math.sin(a) * r];
+                  };
+
+                  arc.innerRadius = function(_) {
+                    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius;
+                  };
+
+                  arc.outerRadius = function(_) {
+                    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius;
+                  };
+
+                  arc.cornerRadius = function(_) {
+                    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius;
+                  };
+
+                  arc.padRadius = function(_) {
+                    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius;
+                  };
+
+                  arc.startAngle = function(_) {
+                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle;
+                  };
+
+                  arc.endAngle = function(_) {
+                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle;
+                  };
+
+                  arc.padAngle = function(_) {
+                    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle;
+                  };
+
+                  arc.context = function(_) {
+                    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
+                  };
+
+                  return arc;
+                };
+
+                function Linear(context) {
+                  this._context = context;
+                }
+
+                Linear.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; // proceed
+                      default: this._context.lineTo(x, y); break;
+                    }
+                  }
+                };
+
+                var curveLinear = function(context) {
+                  return new Linear(context);
+                };
+
+                function x(p) {
+                  return p[0];
+                }
+
+                function y(p) {
+                  return p[1];
+                }
+
+                var line = function() {
+                  var x$$1 = x,
+                      y$$1 = y,
+                      defined = constant$2(true),
+                      context = null,
+                      curve = curveLinear,
+                      output = null;
+
+                  function line(data) {
+                    var i,
+                        n = data.length,
+                        d,
+                        defined0 = false,
+                        buffer;
+
+                    if (context == null) output = curve(buffer = path());
+
+                    for (i = 0; i <= n; ++i) {
+                      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+                        if (defined0 = !defined0) output.lineStart();
+                        else output.lineEnd();
+                      }
+                      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
+                    }
+
+                    if (buffer) return output = null, buffer + "" || null;
+                  }
+
+                  line.x = function(_) {
+                    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1;
+                  };
+
+                  line.y = function(_) {
+                    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1;
+                  };
+
+                  line.defined = function(_) {
+                    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined;
+                  };
+
+                  line.curve = function(_) {
+                    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+                  };
+
+                  line.context = function(_) {
+                    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+                  };
+
+                  return line;
+                };
+
+                var area$1 = function() {
+                  var x0 = x,
+                      x1 = null,
+                      y0 = constant$2(0),
+                      y1 = y,
+                      defined = constant$2(true),
+                      context = null,
+                      curve = curveLinear,
+                      output = null;
+
+                  function area(data) {
+                    var i,
+                        j,
+                        k,
+                        n = data.length,
+                        d,
+                        defined0 = false,
+                        buffer,
+                        x0z = new Array(n),
+                        y0z = new Array(n);
+
+                    if (context == null) output = curve(buffer = path());
+
+                    for (i = 0; i <= n; ++i) {
+                      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+                        if (defined0 = !defined0) {
+                          j = i;
+                          output.areaStart();
+                          output.lineStart();
+                        } else {
+                          output.lineEnd();
+                          output.lineStart();
+                          for (k = i - 1; k >= j; --k) {
+                            output.point(x0z[k], y0z[k]);
+                          }
+                          output.lineEnd();
+                          output.areaEnd();
+                        }
+                      }
+                      if (defined0) {
+                        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+                        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+                      }
+                    }
+
+                    if (buffer) return output = null, buffer + "" || null;
+                  }
+
+                  function arealine() {
+                    return line().defined(defined).curve(curve).context(context);
+                  }
+
+                  area.x = function(_) {
+                    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0;
+                  };
+
+                  area.x0 = function(_) {
+                    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0;
+                  };
+
+                  area.x1 = function(_) {
+                    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1;
+                  };
+
+                  area.y = function(_) {
+                    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0;
+                  };
+
+                  area.y0 = function(_) {
+                    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0;
+                  };
+
+                  area.y1 = function(_) {
+                    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1;
+                  };
+
+                  area.lineX0 =
+                  area.lineY0 = function() {
+                    return arealine().x(x0).y(y0);
+                  };
+
+                  area.lineY1 = function() {
+                    return arealine().x(x0).y(y1);
+                  };
+
+                  area.lineX1 = function() {
+                    return arealine().x(x1).y(y0);
+                  };
+
+                  area.defined = function(_) {
+                    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined;
+                  };
+
+                  area.curve = function(_) {
+                    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+                  };
+
+                  area.context = function(_) {
+                    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+                  };
+
+                  return area;
+                };
+
+                var descending$1 = function(a, b) {
+                  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+                };
+
+                var identity$1 = function(d) {
+                  return d;
+                };
+
+                var pie = function() {
+                  var value = identity$1,
+                      sortValues = descending$1,
+                      sort = null,
+                      startAngle = constant$2(0),
+                      endAngle = constant$2(tau$2),
+                      padAngle = constant$2(0);
+
+                  function pie(data) {
+                    var i,
+                        n = data.length,
+                        j,
+                        k,
+                        sum = 0,
+                        index = new Array(n),
+                        arcs = new Array(n),
+                        a0 = +startAngle.apply(this, arguments),
+                        da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),
+                        a1,
+                        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+                        pa = p * (da < 0 ? -1 : 1),
+                        v;
+
+                    for (i = 0; i < n; ++i) {
+                      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+                        sum += v;
+                      }
+                    }
+
+                    // Optionally sort the arcs by previously-computed values or by data.
+                    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
+                    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
+
+                    // Compute the arcs! They are stored in the original data's order.
+                    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+                      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+                        data: data[j],
+                        index: i,
+                        value: v,
+                        startAngle: a0,
+                        endAngle: a1,
+                        padAngle: p
+                      };
+                    }
+
+                    return arcs;
+                  }
+
+                  pie.value = function(_) {
+                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value;
+                  };
+
+                  pie.sortValues = function(_) {
+                    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+                  };
+
+                  pie.sort = function(_) {
+                    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+                  };
+
+                  pie.startAngle = function(_) {
+                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle;
+                  };
+
+                  pie.endAngle = function(_) {
+                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle;
+                  };
+
+                  pie.padAngle = function(_) {
+                    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle;
+                  };
+
+                  return pie;
+                };
+
+                var curveRadialLinear = curveRadial(curveLinear);
+
+                function Radial(curve) {
+                  this._curve = curve;
+                }
+
+                Radial.prototype = {
+                  areaStart: function() {
+                    this._curve.areaStart();
+                  },
+                  areaEnd: function() {
+                    this._curve.areaEnd();
+                  },
+                  lineStart: function() {
+                    this._curve.lineStart();
+                  },
+                  lineEnd: function() {
+                    this._curve.lineEnd();
+                  },
+                  point: function(a, r) {
+                    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+                  }
+                };
+
+                function curveRadial(curve) {
+
+                  function radial(context) {
+                    return new Radial(curve(context));
+                  }
+
+                  radial._curve = curve;
+
+                  return radial;
+                }
+
+                function radialLine(l) {
+                  var c = l.curve;
+
+                  l.angle = l.x, delete l.x;
+                  l.radius = l.y, delete l.y;
+
+                  l.curve = function(_) {
+                    return arguments.length ? c(curveRadial(_)) : c()._curve;
+                  };
+
+                  return l;
+                }
+
+                var radialLine$1 = function() {
+                  return radialLine(line().curve(curveRadialLinear));
+                };
+
+                var radialArea = function() {
+                  var a = area$1().curve(curveRadialLinear),
+                      c = a.curve,
+                      x0 = a.lineX0,
+                      x1 = a.lineX1,
+                      y0 = a.lineY0,
+                      y1 = a.lineY1;
+
+                  a.angle = a.x, delete a.x;
+                  a.startAngle = a.x0, delete a.x0;
+                  a.endAngle = a.x1, delete a.x1;
+                  a.radius = a.y, delete a.y;
+                  a.innerRadius = a.y0, delete a.y0;
+                  a.outerRadius = a.y1, delete a.y1;
+                  a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
+                  a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
+                  a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
+                  a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
+
+                  a.curve = function(_) {
+                    return arguments.length ? c(curveRadial(_)) : c()._curve;
+                  };
+
+                  return a;
+                };
+
+                var circle = {
+                  draw: function(context, size) {
+                    var r = Math.sqrt(size / pi$2);
+                    context.moveTo(r, 0);
+                    context.arc(0, 0, r, 0, tau$2);
+                  }
+                };
+
+                var cross$1 = {
+                  draw: function(context, size) {
+                    var r = Math.sqrt(size / 5) / 2;
+                    context.moveTo(-3 * r, -r);
+                    context.lineTo(-r, -r);
+                    context.lineTo(-r, -3 * r);
+                    context.lineTo(r, -3 * r);
+                    context.lineTo(r, -r);
+                    context.lineTo(3 * r, -r);
+                    context.lineTo(3 * r, r);
+                    context.lineTo(r, r);
+                    context.lineTo(r, 3 * r);
+                    context.lineTo(-r, 3 * r);
+                    context.lineTo(-r, r);
+                    context.lineTo(-3 * r, r);
+                    context.closePath();
+                  }
+                };
+
+                var tan30 = Math.sqrt(1 / 3);
+                var tan30_2 = tan30 * 2;
+
+                var diamond = {
+                  draw: function(context, size) {
+                    var y = Math.sqrt(size / tan30_2),
+                        x = y * tan30;
+                    context.moveTo(0, -y);
+                    context.lineTo(x, 0);
+                    context.lineTo(0, y);
+                    context.lineTo(-x, 0);
+                    context.closePath();
+                  }
+                };
+
+                var ka = 0.89081309152928522810;
+                var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);
+                var kx = Math.sin(tau$2 / 10) * kr;
+                var ky = -Math.cos(tau$2 / 10) * kr;
+
+                var star = {
+                  draw: function(context, size) {
+                    var r = Math.sqrt(size * ka),
+                        x = kx * r,
+                        y = ky * r;
+                    context.moveTo(0, -r);
+                    context.lineTo(x, y);
+                    for (var i = 1; i < 5; ++i) {
+                      var a = tau$2 * i / 5,
+                          c = Math.cos(a),
+                          s = Math.sin(a);
+                      context.lineTo(s * r, -c * r);
+                      context.lineTo(c * x - s * y, s * x + c * y);
+                    }
+                    context.closePath();
+                  }
+                };
+
+                var square = {
+                  draw: function(context, size) {
+                    var w = Math.sqrt(size),
+                        x = -w / 2;
+                    context.rect(x, x, w, w);
+                  }
+                };
+
+                var sqrt3 = Math.sqrt(3);
+
+                var triangle = {
+                  draw: function(context, size) {
+                    var y = -Math.sqrt(size / (sqrt3 * 3));
+                    context.moveTo(0, y * 2);
+                    context.lineTo(-sqrt3 * y, -y);
+                    context.lineTo(sqrt3 * y, -y);
+                    context.closePath();
+                  }
+                };
+
+                var c = -0.5;
+                var s = Math.sqrt(3) / 2;
+                var k = 1 / Math.sqrt(12);
+                var a = (k / 2 + 1) * 3;
+
+                var wye = {
+                  draw: function(context, size) {
+                    var r = Math.sqrt(size / a),
+                        x0 = r / 2,
+                        y0 = r * k,
+                        x1 = x0,
+                        y1 = r * k + r,
+                        x2 = -x1,
+                        y2 = y1;
+                    context.moveTo(x0, y0);
+                    context.lineTo(x1, y1);
+                    context.lineTo(x2, y2);
+                    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+                    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+                    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+                    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+                    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+                    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+                    context.closePath();
+                  }
+                };
+
+                var symbols = [
+                  circle,
+                  cross$1,
+                  diamond,
+                  square,
+                  star,
+                  triangle,
+                  wye
+                ];
+
+                var symbol = function() {
+                  var type = constant$2(circle),
+                      size = constant$2(64),
+                      context = null;
+
+                  function symbol() {
+                    var buffer;
+                    if (!context) context = buffer = path();
+                    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+                    if (buffer) return context = null, buffer + "" || null;
+                  }
+
+                  symbol.type = function(_) {
+                    return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type;
+                  };
+
+                  symbol.size = function(_) {
+                    return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size;
+                  };
+
+                  symbol.context = function(_) {
+                    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+                  };
+
+                  return symbol;
+                };
+
+                var noop = function() {};
+
+                function point(that, x, y) {
+                  that._context.bezierCurveTo(
+                    (2 * that._x0 + that._x1) / 3,
+                    (2 * that._y0 + that._y1) / 3,
+                    (that._x0 + 2 * that._x1) / 3,
+                    (that._y0 + 2 * that._y1) / 3,
+                    (that._x0 + 4 * that._x1 + x) / 6,
+                    (that._y0 + 4 * that._y1 + y) / 6
+                  );
+                }
+
+                function Basis(context) {
+                  this._context = context;
+                }
+
+                Basis.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 =
+                    this._y0 = this._y1 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 3: point(this, this._x1, this._y1); // proceed
+                      case 2: this._context.lineTo(this._x1, this._y1); break;
+                    }
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
+                      default: point(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = x;
+                    this._y0 = this._y1, this._y1 = y;
+                  }
+                };
+
+                var basis = function(context) {
+                  return new Basis(context);
+                };
+
+                function BasisClosed(context) {
+                  this._context = context;
+                }
+
+                BasisClosed.prototype = {
+                  areaStart: noop,
+                  areaEnd: noop,
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
+                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 1: {
+                        this._context.moveTo(this._x2, this._y2);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 2: {
+                        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+                        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 3: {
+                        this.point(this._x2, this._y2);
+                        this.point(this._x3, this._y3);
+                        this.point(this._x4, this._y4);
+                        break;
+                      }
+                    }
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
+                      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
+                      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
+                      default: point(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = x;
+                    this._y0 = this._y1, this._y1 = y;
+                  }
+                };
+
+                var basisClosed = function(context) {
+                  return new BasisClosed(context);
+                };
+
+                function BasisOpen(context) {
+                  this._context = context;
+                }
+
+                BasisOpen.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 =
+                    this._y0 = this._y1 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
+                      case 3: this._point = 4; // proceed
+                      default: point(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = x;
+                    this._y0 = this._y1, this._y1 = y;
+                  }
+                };
+
+                var basisOpen = function(context) {
+                  return new BasisOpen(context);
+                };
+
+                function Bundle(context, beta) {
+                  this._basis = new Basis(context);
+                  this._beta = beta;
+                }
+
+                Bundle.prototype = {
+                  lineStart: function() {
+                    this._x = [];
+                    this._y = [];
+                    this._basis.lineStart();
+                  },
+                  lineEnd: function() {
+                    var x = this._x,
+                        y = this._y,
+                        j = x.length - 1;
+
+                    if (j > 0) {
+                      var x0 = x[0],
+                          y0 = y[0],
+                          dx = x[j] - x0,
+                          dy = y[j] - y0,
+                          i = -1,
+                          t;
+
+                      while (++i <= j) {
+                        t = i / j;
+                        this._basis.point(
+                          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
+                          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
+                        );
+                      }
+                    }
+
+                    this._x = this._y = null;
+                    this._basis.lineEnd();
+                  },
+                  point: function(x, y) {
+                    this._x.push(+x);
+                    this._y.push(+y);
+                  }
+                };
+
+                var bundle = (function custom(beta) {
+
+                  function bundle(context) {
+                    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
+                  }
+
+                  bundle.beta = function(beta) {
+                    return custom(+beta);
+                  };
+
+                  return bundle;
+                })(0.85);
+
+                function point$1(that, x, y) {
+                  that._context.bezierCurveTo(
+                    that._x1 + that._k * (that._x2 - that._x0),
+                    that._y1 + that._k * (that._y2 - that._y0),
+                    that._x2 + that._k * (that._x1 - x),
+                    that._y2 + that._k * (that._y1 - y),
+                    that._x2,
+                    that._y2
+                  );
+                }
+
+                function Cardinal(context, tension) {
+                  this._context = context;
+                  this._k = (1 - tension) / 6;
+                }
+
+                Cardinal.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 =
+                    this._y0 = this._y1 = this._y2 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 2: this._context.lineTo(this._x2, this._y2); break;
+                      case 3: point$1(this, this._x1, this._y1); break;
+                    }
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
+                      case 2: this._point = 3; // proceed
+                      default: point$1(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var cardinal = (function custom(tension) {
+
+                  function cardinal(context) {
+                    return new Cardinal(context, tension);
+                  }
+
+                  cardinal.tension = function(tension) {
+                    return custom(+tension);
+                  };
+
+                  return cardinal;
+                })(0);
+
+                function CardinalClosed(context, tension) {
+                  this._context = context;
+                  this._k = (1 - tension) / 6;
+                }
+
+                CardinalClosed.prototype = {
+                  areaStart: noop,
+                  areaEnd: noop,
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 1: {
+                        this._context.moveTo(this._x3, this._y3);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 2: {
+                        this._context.lineTo(this._x3, this._y3);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 3: {
+                        this.point(this._x3, this._y3);
+                        this.point(this._x4, this._y4);
+                        this.point(this._x5, this._y5);
+                        break;
+                      }
+                    }
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+                      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+                      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+                      default: point$1(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var cardinalClosed = (function custom(tension) {
+
+                  function cardinal(context) {
+                    return new CardinalClosed(context, tension);
+                  }
+
+                  cardinal.tension = function(tension) {
+                    return custom(+tension);
+                  };
+
+                  return cardinal;
+                })(0);
+
+                function CardinalOpen(context, tension) {
+                  this._context = context;
+                  this._k = (1 - tension) / 6;
+                }
+
+                CardinalOpen.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 =
+                    this._y0 = this._y1 = this._y2 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+                      case 3: this._point = 4; // proceed
+                      default: point$1(this, x, y); break;
+                    }
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var cardinalOpen = (function custom(tension) {
+
+                  function cardinal(context) {
+                    return new CardinalOpen(context, tension);
+                  }
+
+                  cardinal.tension = function(tension) {
+                    return custom(+tension);
+                  };
+
+                  return cardinal;
+                })(0);
+
+                function point$2(that, x, y) {
+                  var x1 = that._x1,
+                      y1 = that._y1,
+                      x2 = that._x2,
+                      y2 = that._y2;
+
+                  if (that._l01_a > epsilon$1) {
+                    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+                        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+                    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+                    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+                  }
+
+                  if (that._l23_a > epsilon$1) {
+                    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+                        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+                    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+                    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+                  }
+
+                  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+                }
+
+                function CatmullRom(context, alpha) {
+                  this._context = context;
+                  this._alpha = alpha;
+                }
+
+                CatmullRom.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 =
+                    this._y0 = this._y1 = this._y2 = NaN;
+                    this._l01_a = this._l12_a = this._l23_a =
+                    this._l01_2a = this._l12_2a = this._l23_2a =
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 2: this._context.lineTo(this._x2, this._y2); break;
+                      case 3: this.point(this._x2, this._y2); break;
+                    }
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+
+                    if (this._point) {
+                      var x23 = this._x2 - x,
+                          y23 = this._y2 - y;
+                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+                    }
+
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; // proceed
+                      default: point$2(this, x, y); break;
+                    }
+
+                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var catmullRom = (function custom(alpha) {
+
+                  function catmullRom(context) {
+                    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
+                  }
+
+                  catmullRom.alpha = function(alpha) {
+                    return custom(+alpha);
+                  };
+
+                  return catmullRom;
+                })(0.5);
+
+                function CatmullRomClosed(context, alpha) {
+                  this._context = context;
+                  this._alpha = alpha;
+                }
+
+                CatmullRomClosed.prototype = {
+                  areaStart: noop,
+                  areaEnd: noop,
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+                    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+                    this._l01_a = this._l12_a = this._l23_a =
+                    this._l01_2a = this._l12_2a = this._l23_2a =
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 1: {
+                        this._context.moveTo(this._x3, this._y3);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 2: {
+                        this._context.lineTo(this._x3, this._y3);
+                        this._context.closePath();
+                        break;
+                      }
+                      case 3: {
+                        this.point(this._x3, this._y3);
+                        this.point(this._x4, this._y4);
+                        this.point(this._x5, this._y5);
+                        break;
+                      }
+                    }
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+
+                    if (this._point) {
+                      var x23 = this._x2 - x,
+                          y23 = this._y2 - y;
+                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+                    }
+
+                    switch (this._point) {
+                      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+                      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+                      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+                      default: point$2(this, x, y); break;
+                    }
+
+                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var catmullRomClosed = (function custom(alpha) {
+
+                  function catmullRom(context) {
+                    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
+                  }
+
+                  catmullRom.alpha = function(alpha) {
+                    return custom(+alpha);
+                  };
+
+                  return catmullRom;
+                })(0.5);
+
+                function CatmullRomOpen(context, alpha) {
+                  this._context = context;
+                  this._alpha = alpha;
+                }
+
+                CatmullRomOpen.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 = this._x2 =
+                    this._y0 = this._y1 = this._y2 = NaN;
+                    this._l01_a = this._l12_a = this._l23_a =
+                    this._l01_2a = this._l12_2a = this._l23_2a =
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+
+                    if (this._point) {
+                      var x23 = this._x2 - x,
+                          y23 = this._y2 - y;
+                      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+                    }
+
+                    switch (this._point) {
+                      case 0: this._point = 1; break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+                      case 3: this._point = 4; // proceed
+                      default: point$2(this, x, y); break;
+                    }
+
+                    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+                    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+                    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+                    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+                  }
+                };
+
+                var catmullRomOpen = (function custom(alpha) {
+
+                  function catmullRom(context) {
+                    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
+                  }
+
+                  catmullRom.alpha = function(alpha) {
+                    return custom(+alpha);
+                  };
+
+                  return catmullRom;
+                })(0.5);
+
+                function LinearClosed(context) {
+                  this._context = context;
+                }
+
+                LinearClosed.prototype = {
+                  areaStart: noop,
+                  areaEnd: noop,
+                  lineStart: function() {
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._point) this._context.closePath();
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    if (this._point) this._context.lineTo(x, y);
+                    else this._point = 1, this._context.moveTo(x, y);
+                  }
+                };
+
+                var linearClosed = function(context) {
+                  return new LinearClosed(context);
+                };
+
+                function sign(x) {
+                  return x < 0 ? -1 : 1;
+                }
+
+                // Calculate the slopes of the tangents (Hermite-type interpolation) based on
+                // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+                // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+                // NOV(II), P. 443, 1990.
+                function slope3(that, x2, y2) {
+                  var h0 = that._x1 - that._x0,
+                      h1 = x2 - that._x1,
+                      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+                      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+                      p = (s0 * h1 + s1 * h0) / (h0 + h1);
+                  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+                }
+
+                // Calculate a one-sided slope.
+                function slope2(that, t) {
+                  var h = that._x1 - that._x0;
+                  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+                }
+
+                // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+                // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+                // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+                function point$3(that, t0, t1) {
+                  var x0 = that._x0,
+                      y0 = that._y0,
+                      x1 = that._x1,
+                      y1 = that._y1,
+                      dx = (x1 - x0) / 3;
+                  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+                }
+
+                function MonotoneX(context) {
+                  this._context = context;
+                }
+
+                MonotoneX.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x0 = this._x1 =
+                    this._y0 = this._y1 =
+                    this._t0 = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    switch (this._point) {
+                      case 2: this._context.lineTo(this._x1, this._y1); break;
+                      case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
+                    }
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    var t1 = NaN;
+
+                    x = +x, y = +y;
+                    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; break;
+                      case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
+                      default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
+                    }
+
+                    this._x0 = this._x1, this._x1 = x;
+                    this._y0 = this._y1, this._y1 = y;
+                    this._t0 = t1;
+                  }
+                };
+
+                function MonotoneY(context) {
+                  this._context = new ReflectContext(context);
+                }
+
+                (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
+                  MonotoneX.prototype.point.call(this, y, x);
+                };
+
+                function ReflectContext(context) {
+                  this._context = context;
+                }
+
+                ReflectContext.prototype = {
+                  moveTo: function(x, y) { this._context.moveTo(y, x); },
+                  closePath: function() { this._context.closePath(); },
+                  lineTo: function(x, y) { this._context.lineTo(y, x); },
+                  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
+                };
+
+                function monotoneX(context) {
+                  return new MonotoneX(context);
+                }
+
+                function monotoneY(context) {
+                  return new MonotoneY(context);
+                }
+
+                function Natural(context) {
+                  this._context = context;
+                }
+
+                Natural.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x = [];
+                    this._y = [];
+                  },
+                  lineEnd: function() {
+                    var x = this._x,
+                        y = this._y,
+                        n = x.length;
+
+                    if (n) {
+                      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+                      if (n === 2) {
+                        this._context.lineTo(x[1], y[1]);
+                      } else {
+                        var px = controlPoints(x),
+                            py = controlPoints(y);
+                        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+                          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+                        }
+                      }
+                    }
+
+                    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
+                    this._line = 1 - this._line;
+                    this._x = this._y = null;
+                  },
+                  point: function(x, y) {
+                    this._x.push(+x);
+                    this._y.push(+y);
+                  }
+                };
+
+                // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+                function controlPoints(x) {
+                  var i,
+                      n = x.length - 1,
+                      m,
+                      a = new Array(n),
+                      b = new Array(n),
+                      r = new Array(n);
+                  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+                  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+                  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+                  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+                  a[n - 1] = r[n - 1] / b[n - 1];
+                  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+                  b[n - 1] = (x[n] + a[n - 1]) / 2;
+                  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+                  return [a, b];
+                }
+
+                var natural = function(context) {
+                  return new Natural(context);
+                };
+
+                function Step(context, t) {
+                  this._context = context;
+                  this._t = t;
+                }
+
+                Step.prototype = {
+                  areaStart: function() {
+                    this._line = 0;
+                  },
+                  areaEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._x = this._y = NaN;
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+                    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+                    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+                  },
+                  point: function(x, y) {
+                    x = +x, y = +y;
+                    switch (this._point) {
+                      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+                      case 1: this._point = 2; // proceed
+                      default: {
+                        if (this._t <= 0) {
+                          this._context.lineTo(this._x, y);
+                          this._context.lineTo(x, y);
+                        } else {
+                          var x1 = this._x * (1 - this._t) + x * this._t;
+                          this._context.lineTo(x1, this._y);
+                          this._context.lineTo(x1, y);
+                        }
+                        break;
+                      }
+                    }
+                    this._x = x, this._y = y;
+                  }
+                };
+
+                var step = function(context) {
+                  return new Step(context, 0.5);
+                };
+
+                function stepBefore(context) {
+                  return new Step(context, 0);
+                }
+
+                function stepAfter(context) {
+                  return new Step(context, 1);
+                }
+
+                var slice$2 = Array.prototype.slice;
+
+                var none = function(series, order) {
+                  if (!((n = series.length) > 1)) return;
+                  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+                    s0 = s1, s1 = series[order[i]];
+                    for (var j = 0; j < m; ++j) {
+                      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+                    }
+                  }
+                };
+
+                var none$1 = function(series) {
+                  var n = series.length, o = new Array(n);
+                  while (--n >= 0) o[n] = n;
+                  return o;
+                };
+
+                function stackValue(d, key) {
+                  return d[key];
+                }
+
+                var stack = function() {
+                  var keys = constant$2([]),
+                      order = none$1,
+                      offset = none,
+                      value = stackValue;
+
+                  function stack(data) {
+                    var kz = keys.apply(this, arguments),
+                        i,
+                        m = data.length,
+                        n = kz.length,
+                        sz = new Array(n),
+                        oz;
+
+                    for (i = 0; i < n; ++i) {
+                      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
+                        si[j] = sij = [0, +value(data[j], ki, j, data)];
+                        sij.data = data[j];
+                      }
+                      si.key = ki;
+                    }
+
+                    for (i = 0, oz = order(sz); i < n; ++i) {
+                      sz[oz[i]].index = i;
+                    }
+
+                    offset(sz, oz);
+                    return sz;
+                  }
+
+                  stack.keys = function(_) {
+                    return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys;
+                  };
+
+                  stack.value = function(_) {
+                    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value;
+                  };
+
+                  stack.order = function(_) {
+                    return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order;
+                  };
+
+                  stack.offset = function(_) {
+                    return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
+                  };
+
+                  return stack;
+                };
+
+                var expand = function(series, order) {
+                  if (!((n = series.length) > 0)) return;
+                  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+                    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+                    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+                  }
+                  none(series, order);
+                };
+
+                var silhouette = function(series, order) {
+                  if (!((n = series.length) > 0)) return;
+                  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+                    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+                    s0[j][1] += s0[j][0] = -y / 2;
+                  }
+                  none(series, order);
+                };
+
+                var wiggle = function(series, order) {
+                  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+                  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+                    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+                      var si = series[order[i]],
+                          sij0 = si[j][1] || 0,
+                          sij1 = si[j - 1][1] || 0,
+                          s3 = (sij0 - sij1) / 2;
+                      for (var k = 0; k < i; ++k) {
+                        var sk = series[order[k]],
+                            skj0 = sk[j][1] || 0,
+                            skj1 = sk[j - 1][1] || 0;
+                        s3 += skj0 - skj1;
+                      }
+                      s1 += sij0, s2 += s3 * sij0;
+                    }
+                    s0[j - 1][1] += s0[j - 1][0] = y;
+                    if (s1) y -= s2 / s1;
+                  }
+                  s0[j - 1][1] += s0[j - 1][0] = y;
+                  none(series, order);
+                };
+
+                var ascending$1 = function(series) {
+                  var sums = series.map(sum$1);
+                  return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
+                };
+
+                function sum$1(series) {
+                  var s = 0, i = -1, n = series.length, v;
+                  while (++i < n) if (v = +series[i][1]) s += v;
+                  return s;
+                }
+
+                var descending$2 = function(series) {
+                  return ascending$1(series).reverse();
+                };
+
+                var insideOut = function(series) {
+                  var n = series.length,
+                      i,
+                      j,
+                      sums = series.map(sum$1),
+                      order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
+                      top = 0,
+                      bottom = 0,
+                      tops = [],
+                      bottoms = [];
+
+                  for (i = 0; i < n; ++i) {
+                    j = order[i];
+                    if (top < bottom) {
+                      top += sums[j];
+                      tops.push(j);
+                    } else {
+                      bottom += sums[j];
+                      bottoms.push(j);
+                    }
+                  }
+
+                  return bottoms.reverse().concat(tops);
+                };
+
+                var reverse = function(series) {
+                  return none$1(series).reverse();
+                };
+
+                var define = function(constructor, factory, prototype) {
+                  constructor.prototype = factory.prototype = prototype;
+                  prototype.constructor = constructor;
+                };
+
+                function extend(parent, definition) {
+                  var prototype = Object.create(parent.prototype);
+                  for (var key in definition) prototype[key] = definition[key];
+                  return prototype;
+                }
+
+                function Color() {}
+
+                var darker = 0.7;
+                var brighter = 1 / darker;
+
+                var reHex3 = /^#([0-9a-f]{3})$/;
+                var reHex6 = /^#([0-9a-f]{6})$/;
+                var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
+                var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+                var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+                var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+                var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+                var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+
+                var named = {
+                  aliceblue: 0xf0f8ff,
+                  antiquewhite: 0xfaebd7,
+                  aqua: 0x00ffff,
+                  aquamarine: 0x7fffd4,
+                  azure: 0xf0ffff,
+                  beige: 0xf5f5dc,
+                  bisque: 0xffe4c4,
+                  black: 0x000000,
+                  blanchedalmond: 0xffebcd,
+                  blue: 0x0000ff,
+                  blueviolet: 0x8a2be2,
+                  brown: 0xa52a2a,
+                  burlywood: 0xdeb887,
+                  cadetblue: 0x5f9ea0,
+                  chartreuse: 0x7fff00,
+                  chocolate: 0xd2691e,
+                  coral: 0xff7f50,
+                  cornflowerblue: 0x6495ed,
+                  cornsilk: 0xfff8dc,
+                  crimson: 0xdc143c,
+                  cyan: 0x00ffff,
+                  darkblue: 0x00008b,
+                  darkcyan: 0x008b8b,
+                  darkgoldenrod: 0xb8860b,
+                  darkgray: 0xa9a9a9,
+                  darkgreen: 0x006400,
+                  darkgrey: 0xa9a9a9,
+                  darkkhaki: 0xbdb76b,
+                  darkmagenta: 0x8b008b,
+                  darkolivegreen: 0x556b2f,
+                  darkorange: 0xff8c00,
+                  darkorchid: 0x9932cc,
+                  darkred: 0x8b0000,
+                  darksalmon: 0xe9967a,
+                  darkseagreen: 0x8fbc8f,
+                  darkslateblue: 0x483d8b,
+                  darkslategray: 0x2f4f4f,
+                  darkslategrey: 0x2f4f4f,
+                  darkturquoise: 0x00ced1,
+                  darkviolet: 0x9400d3,
+                  deeppink: 0xff1493,
+                  deepskyblue: 0x00bfff,
+                  dimgray: 0x696969,
+                  dimgrey: 0x696969,
+                  dodgerblue: 0x1e90ff,
+                  firebrick: 0xb22222,
+                  floralwhite: 0xfffaf0,
+                  forestgreen: 0x228b22,
+                  fuchsia: 0xff00ff,
+                  gainsboro: 0xdcdcdc,
+                  ghostwhite: 0xf8f8ff,
+                  gold: 0xffd700,
+                  goldenrod: 0xdaa520,
+                  gray: 0x808080,
+                  green: 0x008000,
+                  greenyellow: 0xadff2f,
+                  grey: 0x808080,
+                  honeydew: 0xf0fff0,
+                  hotpink: 0xff69b4,
+                  indianred: 0xcd5c5c,
+                  indigo: 0x4b0082,
+                  ivory: 0xfffff0,
+                  khaki: 0xf0e68c,
+                  lavender: 0xe6e6fa,
+                  lavenderblush: 0xfff0f5,
+                  lawngreen: 0x7cfc00,
+                  lemonchiffon: 0xfffacd,
+                  lightblue: 0xadd8e6,
+                  lightcoral: 0xf08080,
+                  lightcyan: 0xe0ffff,
+                  lightgoldenrodyellow: 0xfafad2,
+                  lightgray: 0xd3d3d3,
+                  lightgreen: 0x90ee90,
+                  lightgrey: 0xd3d3d3,
+                  lightpink: 0xffb6c1,
+                  lightsalmon: 0xffa07a,
+                  lightseagreen: 0x20b2aa,
+                  lightskyblue: 0x87cefa,
+                  lightslategray: 0x778899,
+                  lightslategrey: 0x778899,
+                  lightsteelblue: 0xb0c4de,
+                  lightyellow: 0xffffe0,
+                  lime: 0x00ff00,
+                  limegreen: 0x32cd32,
+                  linen: 0xfaf0e6,
+                  magenta: 0xff00ff,
+                  maroon: 0x800000,
+                  mediumaquamarine: 0x66cdaa,
+                  mediumblue: 0x0000cd,
+                  mediumorchid: 0xba55d3,
+                  mediumpurple: 0x9370db,
+                  mediumseagreen: 0x3cb371,
+                  mediumslateblue: 0x7b68ee,
+                  mediumspringgreen: 0x00fa9a,
+                  mediumturquoise: 0x48d1cc,
+                  mediumvioletred: 0xc71585,
+                  midnightblue: 0x191970,
+                  mintcream: 0xf5fffa,
+                  mistyrose: 0xffe4e1,
+                  moccasin: 0xffe4b5,
+                  navajowhite: 0xffdead,
+                  navy: 0x000080,
+                  oldlace: 0xfdf5e6,
+                  olive: 0x808000,
+                  olivedrab: 0x6b8e23,
+                  orange: 0xffa500,
+                  orangered: 0xff4500,
+                  orchid: 0xda70d6,
+                  palegoldenrod: 0xeee8aa,
+                  palegreen: 0x98fb98,
+                  paleturquoise: 0xafeeee,
+                  palevioletred: 0xdb7093,
+                  papayawhip: 0xffefd5,
+                  peachpuff: 0xffdab9,
+                  peru: 0xcd853f,
+                  pink: 0xffc0cb,
+                  plum: 0xdda0dd,
+                  powderblue: 0xb0e0e6,
+                  purple: 0x800080,
+                  rebeccapurple: 0x663399,
+                  red: 0xff0000,
+                  rosybrown: 0xbc8f8f,
+                  royalblue: 0x4169e1,
+                  saddlebrown: 0x8b4513,
+                  salmon: 0xfa8072,
+                  sandybrown: 0xf4a460,
+                  seagreen: 0x2e8b57,
+                  seashell: 0xfff5ee,
+                  sienna: 0xa0522d,
+                  silver: 0xc0c0c0,
+                  skyblue: 0x87ceeb,
+                  slateblue: 0x6a5acd,
+                  slategray: 0x708090,
+                  slategrey: 0x708090,
+                  snow: 0xfffafa,
+                  springgreen: 0x00ff7f,
+                  steelblue: 0x4682b4,
+                  tan: 0xd2b48c,
+                  teal: 0x008080,
+                  thistle: 0xd8bfd8,
+                  tomato: 0xff6347,
+                  turquoise: 0x40e0d0,
+                  violet: 0xee82ee,
+                  wheat: 0xf5deb3,
+                  white: 0xffffff,
+                  whitesmoke: 0xf5f5f5,
+                  yellow: 0xffff00,
+                  yellowgreen: 0x9acd32
+                };
+
+                define(Color, color, {
+                  displayable: function() {
+                    return this.rgb().displayable();
+                  },
+                  toString: function() {
+                    return this.rgb() + "";
+                  }
+                });
+
+                function color(format) {
+                  var m;
+                  format = (format + "").trim().toLowerCase();
+                  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
+                      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
+                      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+                      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+                      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+                      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+                      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+                      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+                      : named.hasOwnProperty(format) ? rgbn(named[format])
+                      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+                      : null;
+                }
+
+                function rgbn(n) {
+                  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+                }
+
+                function rgba(r, g, b, a) {
+                  if (a <= 0) r = g = b = NaN;
+                  return new Rgb(r, g, b, a);
+                }
+
+                function rgbConvert(o) {
+                  if (!(o instanceof Color)) o = color(o);
+                  if (!o) return new Rgb;
+                  o = o.rgb();
+                  return new Rgb(o.r, o.g, o.b, o.opacity);
+                }
+
+                function rgb(r, g, b, opacity) {
+                  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+                }
+
+                function Rgb(r, g, b, opacity) {
+                  this.r = +r;
+                  this.g = +g;
+                  this.b = +b;
+                  this.opacity = +opacity;
+                }
+
+                define(Rgb, rgb, extend(Color, {
+                  brighter: function(k) {
+                    k = k == null ? brighter : Math.pow(brighter, k);
+                    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+                  },
+                  darker: function(k) {
+                    k = k == null ? darker : Math.pow(darker, k);
+                    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+                  },
+                  rgb: function() {
+                    return this;
+                  },
+                  displayable: function() {
+                    return (0 <= this.r && this.r <= 255)
+                        && (0 <= this.g && this.g <= 255)
+                        && (0 <= this.b && this.b <= 255)
+                        && (0 <= this.opacity && this.opacity <= 1);
+                  },
+                  toString: function() {
+                    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+                    return (a === 1 ? "rgb(" : "rgba(")
+                        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+                        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+                        + Math.max(0, Math.min(255, Math.round(this.b) || 0))
+                        + (a === 1 ? ")" : ", " + a + ")");
+                  }
+                }));
+
+                function hsla(h, s, l, a) {
+                  if (a <= 0) h = s = l = NaN;
+                  else if (l <= 0 || l >= 1) h = s = NaN;
+                  else if (s <= 0) h = NaN;
+                  return new Hsl(h, s, l, a);
+                }
+
+                function hslConvert(o) {
+                  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+                  if (!(o instanceof Color)) o = color(o);
+                  if (!o) return new Hsl;
+                  if (o instanceof Hsl) return o;
+                  o = o.rgb();
+                  var r = o.r / 255,
+                      g = o.g / 255,
+                      b = o.b / 255,
+                      min = Math.min(r, g, b),
+                      max = Math.max(r, g, b),
+                      h = NaN,
+                      s = max - min,
+                      l = (max + min) / 2;
+                  if (s) {
+                    if (r === max) h = (g - b) / s + (g < b) * 6;
+                    else if (g === max) h = (b - r) / s + 2;
+                    else h = (r - g) / s + 4;
+                    s /= l < 0.5 ? max + min : 2 - max - min;
+                    h *= 60;
+                  } else {
+                    s = l > 0 && l < 1 ? 0 : h;
+                  }
+                  return new Hsl(h, s, l, o.opacity);
+                }
+
+                function hsl(h, s, l, opacity) {
+                  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+                }
+
+                function Hsl(h, s, l, opacity) {
+                  this.h = +h;
+                  this.s = +s;
+                  this.l = +l;
+                  this.opacity = +opacity;
+                }
+
+                define(Hsl, hsl, extend(Color, {
+                  brighter: function(k) {
+                    k = k == null ? brighter : Math.pow(brighter, k);
+                    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+                  },
+                  darker: function(k) {
+                    k = k == null ? darker : Math.pow(darker, k);
+                    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+                  },
+                  rgb: function() {
+                    var h = this.h % 360 + (this.h < 0) * 360,
+                        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+                        l = this.l,
+                        m2 = l + (l < 0.5 ? l : 1 - l) * s,
+                        m1 = 2 * l - m2;
+                    return new Rgb(
+                      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+                      hsl2rgb(h, m1, m2),
+                      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+                      this.opacity
+                    );
+                  },
+                  displayable: function() {
+                    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+                        && (0 <= this.l && this.l <= 1)
+                        && (0 <= this.opacity && this.opacity <= 1);
+                  }
+                }));
+
+                /* From FvD 13.37, CSS Color Module Level 3 */
+                function hsl2rgb(h, m1, m2) {
+                  return (h < 60 ? m1 + (m2 - m1) * h / 60
+                      : h < 180 ? m2
+                      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+                      : m1) * 255;
+                }
+
+                var deg2rad = Math.PI / 180;
+                var rad2deg = 180 / Math.PI;
+
+                var Kn = 18;
+                var Xn = 0.950470;
+                var Yn = 1;
+                var Zn = 1.088830;
+                var t0 = 4 / 29;
+                var t1 = 6 / 29;
+                var t2 = 3 * t1 * t1;
+                var t3 = t1 * t1 * t1;
+
+                function labConvert(o) {
+                  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+                  if (o instanceof Hcl) {
+                    var h = o.h * deg2rad;
+                    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+                  }
+                  if (!(o instanceof Rgb)) o = rgbConvert(o);
+                  var b = rgb2xyz(o.r),
+                      a = rgb2xyz(o.g),
+                      l = rgb2xyz(o.b),
+                      x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
+                      y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
+                      z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
+                  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+                }
+
+                function lab(l, a, b, opacity) {
+                  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+                }
+
+                function Lab(l, a, b, opacity) {
+                  this.l = +l;
+                  this.a = +a;
+                  this.b = +b;
+                  this.opacity = +opacity;
+                }
+
+                define(Lab, lab, extend(Color, {
+                  brighter: function(k) {
+                    return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+                  },
+                  darker: function(k) {
+                    return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+                  },
+                  rgb: function() {
+                    var y = (this.l + 16) / 116,
+                        x = isNaN(this.a) ? y : y + this.a / 500,
+                        z = isNaN(this.b) ? y : y - this.b / 200;
+                    y = Yn * lab2xyz(y);
+                    x = Xn * lab2xyz(x);
+                    z = Zn * lab2xyz(z);
+                    return new Rgb(
+                      xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
+                      xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
+                      xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
+                      this.opacity
+                    );
+                  }
+                }));
+
+                function xyz2lab(t) {
+                  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+                }
+
+                function lab2xyz(t) {
+                  return t > t1 ? t * t * t : t2 * (t - t0);
+                }
+
+                function xyz2rgb(x) {
+                  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+                }
+
+                function rgb2xyz(x) {
+                  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+                }
+
+                function hclConvert(o) {
+                  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+                  if (!(o instanceof Lab)) o = labConvert(o);
+                  var h = Math.atan2(o.b, o.a) * rad2deg;
+                  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+                }
+
+                function hcl(h, c, l, opacity) {
+                  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+                }
+
+                function Hcl(h, c, l, opacity) {
+                  this.h = +h;
+                  this.c = +c;
+                  this.l = +l;
+                  this.opacity = +opacity;
+                }
+
+                define(Hcl, hcl, extend(Color, {
+                  brighter: function(k) {
+                    return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
+                  },
+                  darker: function(k) {
+                    return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
+                  },
+                  rgb: function() {
+                    return labConvert(this).rgb();
+                  }
+                }));
+
+                var A = -0.14861;
+                var B = +1.78277;
+                var C = -0.29227;
+                var D = -0.90649;
+                var E = +1.97294;
+                var ED = E * D;
+                var EB = E * B;
+                var BC_DA = B * C - D * A;
+
+                function cubehelixConvert(o) {
+                  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+                  if (!(o instanceof Rgb)) o = rgbConvert(o);
+                  var r = o.r / 255,
+                      g = o.g / 255,
+                      b = o.b / 255,
+                      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+                      bl = b - l,
+                      k = (E * (g - l) - C * bl) / D,
+                      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+                      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
+                  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+                }
+
+                function cubehelix(h, s, l, opacity) {
+                  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+                }
+
+                function Cubehelix(h, s, l, opacity) {
+                  this.h = +h;
+                  this.s = +s;
+                  this.l = +l;
+                  this.opacity = +opacity;
+                }
+
+                define(Cubehelix, cubehelix, extend(Color, {
+                  brighter: function(k) {
+                    k = k == null ? brighter : Math.pow(brighter, k);
+                    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+                  },
+                  darker: function(k) {
+                    k = k == null ? darker : Math.pow(darker, k);
+                    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+                  },
+                  rgb: function() {
+                    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
+                        l = +this.l,
+                        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+                        cosh = Math.cos(h),
+                        sinh = Math.sin(h);
+                    return new Rgb(
+                      255 * (l + a * (A * cosh + B * sinh)),
+                      255 * (l + a * (C * cosh + D * sinh)),
+                      255 * (l + a * (E * cosh)),
+                      this.opacity
+                    );
+                  }
+                }));
+
+                function basis$1(t1, v0, v1, v2, v3) {
+                  var t2 = t1 * t1, t3 = t2 * t1;
+                  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+                      + (4 - 6 * t2 + 3 * t3) * v1
+                      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+                      + t3 * v3) / 6;
+                }
+
+                var basis$2 = function(values) {
+                  var n = values.length - 1;
+                  return function(t) {
+                    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+                        v1 = values[i],
+                        v2 = values[i + 1],
+                        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+                        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+                    return basis$1((t - i / n) * n, v0, v1, v2, v3);
+                  };
+                };
+
+                var basisClosed$1 = function(values) {
+                  var n = values.length;
+                  return function(t) {
+                    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+                        v0 = values[(i + n - 1) % n],
+                        v1 = values[i % n],
+                        v2 = values[(i + 1) % n],
+                        v3 = values[(i + 2) % n];
+                    return basis$1((t - i / n) * n, v0, v1, v2, v3);
+                  };
+                };
+
+                var constant$3 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function linear$1(a, d) {
+                  return function(t) {
+                    return a + t * d;
+                  };
+                }
+
+                function exponential$1(a, b, y) {
+                  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+                    return Math.pow(a + t * b, y);
+                  };
+                }
+
+                function hue(a, b) {
+                  var d = b - a;
+                  return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
+                }
+
+                function gamma(y) {
+                  return (y = +y) === 1 ? nogamma : function(a, b) {
+                    return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a);
+                  };
+                }
+
+                function nogamma(a, b) {
+                  var d = b - a;
+                  return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a);
+                }
+
+                var interpolateRgb = (function rgbGamma(y) {
+                  var color$$1 = gamma(y);
+
+                  function rgb$$1(start, end) {
+                    var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
+                        g = color$$1(start.g, end.g),
+                        b = color$$1(start.b, end.b),
+                        opacity = color$$1(start.opacity, end.opacity);
+                    return function(t) {
+                      start.r = r(t);
+                      start.g = g(t);
+                      start.b = b(t);
+                      start.opacity = opacity(t);
+                      return start + "";
+                    };
+                  }
+
+                  rgb$$1.gamma = rgbGamma;
+
+                  return rgb$$1;
+                })(1);
+
+                function rgbSpline(spline) {
+                  return function(colors) {
+                    var n = colors.length,
+                        r = new Array(n),
+                        g = new Array(n),
+                        b = new Array(n),
+                        i, color$$1;
+                    for (i = 0; i < n; ++i) {
+                      color$$1 = rgb(colors[i]);
+                      r[i] = color$$1.r || 0;
+                      g[i] = color$$1.g || 0;
+                      b[i] = color$$1.b || 0;
+                    }
+                    r = spline(r);
+                    g = spline(g);
+                    b = spline(b);
+                    color$$1.opacity = 1;
+                    return function(t) {
+                      color$$1.r = r(t);
+                      color$$1.g = g(t);
+                      color$$1.b = b(t);
+                      return color$$1 + "";
+                    };
+                  };
+                }
+
+                var rgbBasis = rgbSpline(basis$2);
+                var rgbBasisClosed = rgbSpline(basisClosed$1);
+
+                var array$1 = function(a, b) {
+                  var nb = b ? b.length : 0,
+                      na = a ? Math.min(nb, a.length) : 0,
+                      x = new Array(nb),
+                      c = new Array(nb),
+                      i;
+
+                  for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
+                  for (; i < nb; ++i) c[i] = b[i];
+
+                  return function(t) {
+                    for (i = 0; i < na; ++i) c[i] = x[i](t);
+                    return c;
+                  };
+                };
+
+                var date = function(a, b) {
+                  var d = new Date;
+                  return a = +a, b -= a, function(t) {
+                    return d.setTime(a + b * t), d;
+                  };
+                };
+
+                var interpolateNumber = function(a, b) {
+                  return a = +a, b -= a, function(t) {
+                    return a + b * t;
+                  };
+                };
+
+                var object = function(a, b) {
+                  var i = {},
+                      c = {},
+                      k;
+
+                  if (a === null || typeof a !== "object") a = {};
+                  if (b === null || typeof b !== "object") b = {};
+
+                  for (k in b) {
+                    if (k in a) {
+                      i[k] = interpolate(a[k], b[k]);
+                    } else {
+                      c[k] = b[k];
+                    }
+                  }
+
+                  return function(t) {
+                    for (k in i) c[k] = i[k](t);
+                    return c;
+                  };
+                };
+
+                var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
+                var reB = new RegExp(reA.source, "g");
+
+                function zero(b) {
+                  return function() {
+                    return b;
+                  };
+                }
+
+                function one(b) {
+                  return function(t) {
+                    return b(t) + "";
+                  };
+                }
+
+                var interpolateString = function(a, b) {
+                  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+                      am, // current match in a
+                      bm, // current match in b
+                      bs, // string preceding current number in b, if any
+                      i = -1, // index in s
+                      s = [], // string constants and placeholders
+                      q = []; // number interpolators
+
+                  // Coerce inputs to strings.
+                  a = a + "", b = b + "";
+
+                  // Interpolate pairs of numbers in a & b.
+                  while ((am = reA.exec(a))
+                      && (bm = reB.exec(b))) {
+                    if ((bs = bm.index) > bi) { // a string precedes the next number in b
+                      bs = b.slice(bi, bs);
+                      if (s[i]) s[i] += bs; // coalesce with previous string
+                      else s[++i] = bs;
+                    }
+                    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+                      if (s[i]) s[i] += bm; // coalesce with previous string
+                      else s[++i] = bm;
+                    } else { // interpolate non-matching numbers
+                      s[++i] = null;
+                      q.push({i: i, x: interpolateNumber(am, bm)});
+                    }
+                    bi = reB.lastIndex;
+                  }
+
+                  // Add remains of b.
+                  if (bi < b.length) {
+                    bs = b.slice(bi);
+                    if (s[i]) s[i] += bs; // coalesce with previous string
+                    else s[++i] = bs;
+                  }
+
+                  // Special optimization for only a single match.
+                  // Otherwise, interpolate each of the numbers and rejoin the string.
+                  return s.length < 2 ? (q[0]
+                      ? one(q[0].x)
+                      : zero(b))
+                      : (b = q.length, function(t) {
+                          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+                          return s.join("");
+                        });
+                };
+
+                var interpolate = function(a, b) {
+                  var t = typeof b, c;
+                  return b == null || t === "boolean" ? constant$3(b)
+                      : (t === "number" ? interpolateNumber
+                      : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
+                      : b instanceof color ? interpolateRgb
+                      : b instanceof Date ? date
+                      : Array.isArray(b) ? array$1
+                      : isNaN(b) ? object
+                      : interpolateNumber)(a, b);
+                };
+
+                var interpolateRound = function(a, b) {
+                  return a = +a, b -= a, function(t) {
+                    return Math.round(a + b * t);
+                  };
+                };
+
+                var degrees = 180 / Math.PI;
+
+                var identity$2 = {
+                  translateX: 0,
+                  translateY: 0,
+                  rotate: 0,
+                  skewX: 0,
+                  scaleX: 1,
+                  scaleY: 1
+                };
+
+                var decompose = function(a, b, c, d, e, f) {
+                  var scaleX, scaleY, skewX;
+                  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+                  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+                  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+                  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+                  return {
+                    translateX: e,
+                    translateY: f,
+                    rotate: Math.atan2(b, a) * degrees,
+                    skewX: Math.atan(skewX) * degrees,
+                    scaleX: scaleX,
+                    scaleY: scaleY
+                  };
+                };
+
+                var cssNode;
+                var cssRoot;
+                var cssView;
+                var svgNode;
+
+                function parseCss(value) {
+                  if (value === "none") return identity$2;
+                  if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
+                  cssNode.style.transform = value;
+                  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
+                  cssRoot.removeChild(cssNode);
+                  value = value.slice(7, -1).split(",");
+                  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
+                }
+
+                function parseSvg(value) {
+                  if (value == null) return identity$2;
+                  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+                  svgNode.setAttribute("transform", value);
+                  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
+                  value = value.matrix;
+                  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+                }
+
+                function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+                  function pop(s) {
+                    return s.length ? s.pop() + " " : "";
+                  }
+
+                  function translate(xa, ya, xb, yb, s, q) {
+                    if (xa !== xb || ya !== yb) {
+                      var i = s.push("translate(", null, pxComma, null, pxParen);
+                      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+                    } else if (xb || yb) {
+                      s.push("translate(" + xb + pxComma + yb + pxParen);
+                    }
+                  }
+
+                  function rotate(a, b, s, q) {
+                    if (a !== b) {
+                      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+                      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)});
+                    } else if (b) {
+                      s.push(pop(s) + "rotate(" + b + degParen);
+                    }
+                  }
+
+                  function skewX(a, b, s, q) {
+                    if (a !== b) {
+                      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)});
+                    } else if (b) {
+                      s.push(pop(s) + "skewX(" + b + degParen);
+                    }
+                  }
+
+                  function scale(xa, ya, xb, yb, s, q) {
+                    if (xa !== xb || ya !== yb) {
+                      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+                      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+                    } else if (xb !== 1 || yb !== 1) {
+                      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+                    }
+                  }
+
+                  return function(a, b) {
+                    var s = [], // string constants and placeholders
+                        q = []; // number interpolators
+                    a = parse(a), b = parse(b);
+                    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+                    rotate(a.rotate, b.rotate, s, q);
+                    skewX(a.skewX, b.skewX, s, q);
+                    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+                    a = b = null; // gc
+                    return function(t) {
+                      var i = -1, n = q.length, o;
+                      while (++i < n) s[(o = q[i]).i] = o.x(t);
+                      return s.join("");
+                    };
+                  };
+                }
+
+                var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+                var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+                var rho = Math.SQRT2;
+                var rho2 = 2;
+                var rho4 = 4;
+                var epsilon2 = 1e-12;
+
+                function cosh(x) {
+                  return ((x = Math.exp(x)) + 1 / x) / 2;
+                }
+
+                function sinh(x) {
+                  return ((x = Math.exp(x)) - 1 / x) / 2;
+                }
+
+                function tanh(x) {
+                  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+                }
+
+                // p0 = [ux0, uy0, w0]
+                // p1 = [ux1, uy1, w1]
+                var interpolateZoom = function(p0, p1) {
+                  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+                      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
+                      dx = ux1 - ux0,
+                      dy = uy1 - uy0,
+                      d2 = dx * dx + dy * dy,
+                      i,
+                      S;
+
+                  // Special case for u0 ≅ u1.
+                  if (d2 < epsilon2) {
+                    S = Math.log(w1 / w0) / rho;
+                    i = function(t) {
+                      return [
+                        ux0 + t * dx,
+                        uy0 + t * dy,
+                        w0 * Math.exp(rho * t * S)
+                      ];
+                    };
+                  }
+
+                  // General case.
+                  else {
+                    var d1 = Math.sqrt(d2),
+                        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+                        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+                        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+                        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+                    S = (r1 - r0) / rho;
+                    i = function(t) {
+                      var s = t * S,
+                          coshr0 = cosh(r0),
+                          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+                      return [
+                        ux0 + u * dx,
+                        uy0 + u * dy,
+                        w0 * coshr0 / cosh(rho * s + r0)
+                      ];
+                    };
+                  }
+
+                  i.duration = S * 1000;
+
+                  return i;
+                };
+
+                function hsl$1(hue$$1) {
+                  return function(start, end) {
+                    var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
+                        s = nogamma(start.s, end.s),
+                        l = nogamma(start.l, end.l),
+                        opacity = nogamma(start.opacity, end.opacity);
+                    return function(t) {
+                      start.h = h(t);
+                      start.s = s(t);
+                      start.l = l(t);
+                      start.opacity = opacity(t);
+                      return start + "";
+                    };
+                  }
+                }
+
+                var hsl$2 = hsl$1(hue);
+                var hslLong = hsl$1(nogamma);
+
+                function lab$1(start, end) {
+                  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
+                      a = nogamma(start.a, end.a),
+                      b = nogamma(start.b, end.b),
+                      opacity = nogamma(start.opacity, end.opacity);
+                  return function(t) {
+                    start.l = l(t);
+                    start.a = a(t);
+                    start.b = b(t);
+                    start.opacity = opacity(t);
+                    return start + "";
+                  };
+                }
+
+                function hcl$1(hue$$1) {
+                  return function(start, end) {
+                    var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
+                        c = nogamma(start.c, end.c),
+                        l = nogamma(start.l, end.l),
+                        opacity = nogamma(start.opacity, end.opacity);
+                    return function(t) {
+                      start.h = h(t);
+                      start.c = c(t);
+                      start.l = l(t);
+                      start.opacity = opacity(t);
+                      return start + "";
+                    };
+                  }
+                }
+
+                var hcl$2 = hcl$1(hue);
+                var hclLong = hcl$1(nogamma);
+
+                function cubehelix$1(hue$$1) {
+                  return (function cubehelixGamma(y) {
+                    y = +y;
+
+                    function cubehelix$$1(start, end) {
+                      var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
+                          s = nogamma(start.s, end.s),
+                          l = nogamma(start.l, end.l),
+                          opacity = nogamma(start.opacity, end.opacity);
+                      return function(t) {
+                        start.h = h(t);
+                        start.s = s(t);
+                        start.l = l(Math.pow(t, y));
+                        start.opacity = opacity(t);
+                        return start + "";
+                      };
+                    }
+
+                    cubehelix$$1.gamma = cubehelixGamma;
+
+                    return cubehelix$$1;
+                  })(1);
+                }
+
+                var cubehelix$2 = cubehelix$1(hue);
+                var cubehelixLong = cubehelix$1(nogamma);
+
+                var quantize = function(interpolator, n) {
+                  var samples = new Array(n);
+                  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+                  return samples;
+                };
+
+                var noop$1 = {value: function() {}};
+
+                function dispatch() {
+                  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+                    if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
+                    _[t] = [];
+                  }
+                  return new Dispatch(_);
+                }
+
+                function Dispatch(_) {
+                  this._ = _;
+                }
+
+                function parseTypenames(typenames, types) {
+                  return typenames.trim().split(/^|\s+/).map(function(t) {
+                    var name = "", i = t.indexOf(".");
+                    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+                    if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+                    return {type: t, name: name};
+                  });
+                }
+
+                Dispatch.prototype = dispatch.prototype = {
+                  constructor: Dispatch,
+                  on: function(typename, callback) {
+                    var _ = this._,
+                        T = parseTypenames(typename + "", _),
+                        t,
+                        i = -1,
+                        n = T.length;
+
+                    // If no callback was specified, return the callback of the given type and name.
+                    if (arguments.length < 2) {
+                      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+                      return;
+                    }
+
+                    // If a type was specified, set the callback for the given type and name.
+                    // Otherwise, if a null callback was specified, remove callbacks of the given name.
+                    if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+                    while (++i < n) {
+                      if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);
+                      else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
+                    }
+
+                    return this;
+                  },
+                  copy: function() {
+                    var copy = {}, _ = this._;
+                    for (var t in _) copy[t] = _[t].slice();
+                    return new Dispatch(copy);
+                  },
+                  call: function(type, that) {
+                    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+                    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+                    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+                  },
+                  apply: function(type, that, args) {
+                    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+                    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+                  }
+                };
+
+                function get(type, name) {
+                  for (var i = 0, n = type.length, c; i < n; ++i) {
+                    if ((c = type[i]).name === name) {
+                      return c.value;
+                    }
+                  }
+                }
+
+                function set$2(type, name, callback) {
+                  for (var i = 0, n = type.length; i < n; ++i) {
+                    if (type[i].name === name) {
+                      type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
+                      break;
+                    }
+                  }
+                  if (callback != null) type.push({name: name, value: callback});
+                  return type;
+                }
+
+                function objectConverter(columns) {
+                  return new Function("d", "return {" + columns.map(function(name, i) {
+                    return JSON.stringify(name) + ": d[" + i + "]";
+                  }).join(",") + "}");
+                }
+
+                function customConverter(columns, f) {
+                  var object = objectConverter(columns);
+                  return function(row, i) {
+                    return f(object(row), i, columns);
+                  };
+                }
+
+                // Compute unique columns in order of discovery.
+                function inferColumns(rows) {
+                  var columnSet = Object.create(null),
+                      columns = [];
+
+                  rows.forEach(function(row) {
+                    for (var column in row) {
+                      if (!(column in columnSet)) {
+                        columns.push(columnSet[column] = column);
+                      }
+                    }
+                  });
+
+                  return columns;
+                }
+
+                var dsv = function(delimiter) {
+                  var reFormat = new RegExp("[\"" + delimiter + "\n]"),
+                      delimiterCode = delimiter.charCodeAt(0);
+
+                  function parse(text, f) {
+                    var convert, columns, rows = parseRows(text, function(row, i) {
+                      if (convert) return convert(row, i - 1);
+                      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
+                    });
+                    rows.columns = columns;
+                    return rows;
+                  }
+
+                  function parseRows(text, f) {
+                    var EOL = {}, // sentinel value for end-of-line
+                        EOF = {}, // sentinel value for end-of-file
+                        rows = [], // output rows
+                        N = text.length,
+                        I = 0, // current character index
+                        n = 0, // the current line number
+                        t, // the current token
+                        eol; // is the current token followed by EOL?
+
+                    function token() {
+                      if (I >= N) return EOF; // special case: end of file
+                      if (eol) return eol = false, EOL; // special case: end of line
+
+                      // special case: quotes
+                      var j = I, c;
+                      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;
+                        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.slice(j + 1, i).replace(/""/g, "\"");
+                      }
+
+                      // common case: find next delimiter or newline
+                      while (I < N) {
+                        var k = 1;
+                        c = text.charCodeAt(I++);
+                        if (c === 10) eol = true; // \n
+                        else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
+                        else if (c !== delimiterCode) continue;
+                        return text.slice(j, I - k);
+                      }
+
+                      // special case: last token before EOF
+                      return text.slice(j);
+                    }
+
+                    while ((t = token()) !== EOF) {
+                      var a = [];
+                      while (t !== EOL && t !== EOF) {
+                        a.push(t);
+                        t = token();
+                      }
+                      if (f && (a = f(a, n++)) == null) continue;
+                      rows.push(a);
+                    }
+
+                    return rows;
+                  }
+
+                  function format(rows, columns) {
+                    if (columns == null) columns = inferColumns(rows);
+                    return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
+                      return columns.map(function(column) {
+                        return formatValue(row[column]);
+                      }).join(delimiter);
+                    })).join("\n");
+                  }
+
+                  function formatRows(rows) {
+                    return rows.map(formatRow).join("\n");
+                  }
+
+                  function formatRow(row) {
+                    return row.map(formatValue).join(delimiter);
+                  }
+
+                  function formatValue(text) {
+                    return text == null ? ""
+                        : reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+                        : text;
+                  }
+
+                  return {
+                    parse: parse,
+                    parseRows: parseRows,
+                    format: format,
+                    formatRows: formatRows
+                  };
+                };
+
+                var csv = dsv(",");
+
+                var csvParse = csv.parse;
+                var csvParseRows = csv.parseRows;
+                var csvFormat = csv.format;
+                var csvFormatRows = csv.formatRows;
+
+                var tsv = dsv("\t");
+
+                var tsvParse = tsv.parse;
+                var tsvParseRows = tsv.parseRows;
+                var tsvFormat = tsv.format;
+                var tsvFormatRows = tsv.formatRows;
+
+                var request = function(url, callback) {
+                  var request,
+                      event = dispatch("beforesend", "progress", "load", "error"),
+                      mimeType,
+                      headers = map$1(),
+                      xhr = new XMLHttpRequest,
+                      user = null,
+                      password = null,
+                      response,
+                      responseType,
+                      timeout = 0;
+
+                  // If IE does not support CORS, use XDomainRequest.
+                  if (typeof XDomainRequest !== "undefined"
+                      && !("withCredentials" in xhr)
+                      && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
+
+                  "onload" in xhr
+                      ? xhr.onload = xhr.onerror = xhr.ontimeout = respond
+                      : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
+
+                  function respond(o) {
+                    var status = xhr.status, result;
+                    if (!status && hasResponse(xhr)
+                        || status >= 200 && status < 300
+                        || status === 304) {
+                      if (response) {
+                        try {
+                          result = response.call(request, xhr);
+                        } catch (e) {
+                          event.call("error", request, e);
+                          return;
+                        }
+                      } else {
+                        result = xhr;
+                      }
+                      event.call("load", request, result);
+                    } else {
+                      event.call("error", request, o);
+                    }
+                  }
+
+                  xhr.onprogress = function(e) {
+                    event.call("progress", request, e);
+                  };
+
+                  request = {
+                    header: function(name, value) {
+                      name = (name + "").toLowerCase();
+                      if (arguments.length < 2) return headers.get(name);
+                      if (value == null) headers.remove(name);
+                      else headers.set(name, value + "");
+                      return request;
+                    },
+
+                    // If mimeType is non-null and no Accept header is set, a default is used.
+                    mimeType: function(value) {
+                      if (!arguments.length) return mimeType;
+                      mimeType = value == null ? null : value + "";
+                      return request;
+                    },
+
+                    // Specifies what type the response value should take;
+                    // for instance, arraybuffer, blob, document, or text.
+                    responseType: function(value) {
+                      if (!arguments.length) return responseType;
+                      responseType = value;
+                      return request;
+                    },
+
+                    timeout: function(value) {
+                      if (!arguments.length) return timeout;
+                      timeout = +value;
+                      return request;
+                    },
+
+                    user: function(value) {
+                      return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
+                    },
+
+                    password: function(value) {
+                      return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
+                    },
+
+                    // Specify how to convert the response content to a specific type;
+                    // changes the callback value on "load" events.
+                    response: function(value) {
+                      response = value;
+                      return request;
+                    },
+
+                    // Alias for send("GET", …).
+                    get: function(data, callback) {
+                      return request.send("GET", data, callback);
+                    },
+
+                    // Alias for send("POST", …).
+                    post: function(data, callback) {
+                      return request.send("POST", data, callback);
+                    },
+
+                    // If callback is non-null, it will be used for error and load events.
+                    send: function(method, data, callback) {
+                      xhr.open(method, url, true, user, password);
+                      if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
+                      if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
+                      if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
+                      if (responseType != null) xhr.responseType = responseType;
+                      if (timeout > 0) xhr.timeout = timeout;
+                      if (callback == null && typeof data === "function") callback = data, data = null;
+                      if (callback != null && callback.length === 1) callback = fixCallback(callback);
+                      if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
+                      event.call("beforesend", request, xhr);
+                      xhr.send(data == null ? null : data);
+                      return request;
+                    },
+
+                    abort: function() {
+                      xhr.abort();
+                      return request;
+                    },
+
+                    on: function() {
+                      var value = event.on.apply(event, arguments);
+                      return value === event ? request : value;
+                    }
+                  };
+
+                  if (callback != null) {
+                    if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+                    return request.get(callback);
+                  }
+
+                  return request;
+                };
+
+                function fixCallback(callback) {
+                  return function(error, xhr) {
+                    callback(error == null ? xhr : null);
+                  };
+                }
+
+                function hasResponse(xhr) {
+                  var type = xhr.responseType;
+                  return type && type !== "text"
+                      ? xhr.response // null on error
+                      : xhr.responseText; // "" on error
+                }
+
+                var type = function(defaultMimeType, response) {
+                  return function(url, callback) {
+                    var r = request(url).mimeType(defaultMimeType).response(response);
+                    if (callback != null) {
+                      if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+                      return r.get(callback);
+                    }
+                    return r;
+                  };
+                };
+
+                var html = type("text/html", function(xhr) {
+                  return document.createRange().createContextualFragment(xhr.responseText);
+                });
+
+                var json = type("application/json", function(xhr) {
+                  return JSON.parse(xhr.responseText);
+                });
+
+                var text = type("text/plain", function(xhr) {
+                  return xhr.responseText;
+                });
+
+                var xml = type("application/xml", function(xhr) {
+                  var xml = xhr.responseXML;
+                  if (!xml) throw new Error("parse error");
+                  return xml;
+                });
+
+                var dsv$1 = function(defaultMimeType, parse) {
+                  return function(url, row, callback) {
+                    if (arguments.length < 3) callback = row, row = null;
+                    var r = request(url).mimeType(defaultMimeType);
+                    r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
+                    r.row(row);
+                    return callback ? r.get(callback) : r;
+                  };
+                };
+
+                function responseOf(parse, row) {
+                  return function(request$$1) {
+                    return parse(request$$1.responseText, row);
+                  };
+                }
+
+                var csv$1 = dsv$1("text/csv", csvParse);
+
+                var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
+
+                var frame = 0;
+                var timeout = 0;
+                var interval = 0;
+                var pokeDelay = 1000;
+                var taskHead;
+                var taskTail;
+                var clockLast = 0;
+                var clockNow = 0;
+                var clockSkew = 0;
+                var clock = typeof performance === "object" && performance.now ? performance : Date;
+                var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
+
+                function now() {
+                  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+                }
+
+                function clearNow() {
+                  clockNow = 0;
+                }
+
+                function Timer() {
+                  this._call =
+                  this._time =
+                  this._next = null;
+                }
+
+                Timer.prototype = timer.prototype = {
+                  constructor: Timer,
+                  restart: function(callback, delay, time) {
+                    if (typeof callback !== "function") throw new TypeError("callback is not a function");
+                    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+                    if (!this._next && taskTail !== this) {
+                      if (taskTail) taskTail._next = this;
+                      else taskHead = this;
+                      taskTail = this;
+                    }
+                    this._call = callback;
+                    this._time = time;
+                    sleep();
+                  },
+                  stop: function() {
+                    if (this._call) {
+                      this._call = null;
+                      this._time = Infinity;
+                      sleep();
+                    }
+                  }
+                };
+
+                function timer(callback, delay, time) {
+                  var t = new Timer;
+                  t.restart(callback, delay, time);
+                  return t;
+                }
+
+                function timerFlush() {
+                  now(); // Get the current time, if not already set.
+                  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+                  var t = taskHead, e;
+                  while (t) {
+                    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
+                    t = t._next;
+                  }
+                  --frame;
+                }
+
+                function wake() {
+                  clockNow = (clockLast = clock.now()) + clockSkew;
+                  frame = timeout = 0;
+                  try {
+                    timerFlush();
+                  } finally {
+                    frame = 0;
+                    nap();
+                    clockNow = 0;
+                  }
+                }
+
+                function poke$1() {
+                  var now = clock.now(), delay = now - clockLast;
+                  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+                }
+
+                function nap() {
+                  var t0, t1 = taskHead, t2, time = Infinity;
+                  while (t1) {
+                    if (t1._call) {
+                      if (time > t1._time) time = t1._time;
+                      t0 = t1, t1 = t1._next;
+                    } else {
+                      t2 = t1._next, t1._next = null;
+                      t1 = t0 ? t0._next = t2 : taskHead = t2;
+                    }
+                  }
+                  taskTail = t0;
+                  sleep(time);
+                }
+
+                function sleep(time) {
+                  if (frame) return; // Soonest alarm already set, or will be.
+                  if (timeout) timeout = clearTimeout(timeout);
+                  var delay = time - clockNow;
+                  if (delay > 24) {
+                    if (time < Infinity) timeout = setTimeout(wake, delay);
+                    if (interval) interval = clearInterval(interval);
+                  } else {
+                    if (!interval) interval = setInterval(poke$1, pokeDelay);
+                    frame = 1, setFrame(wake);
+                  }
+                }
+
+                var timeout$1 = function(callback, delay, time) {
+                  var t = new Timer;
+                  delay = delay == null ? 0 : +delay;
+                  t.restart(function(elapsed) {
+                    t.stop();
+                    callback(elapsed + delay);
+                  }, delay, time);
+                  return t;
+                };
+
+                var interval$1 = function(callback, delay, time) {
+                  var t = new Timer, total = delay;
+                  if (delay == null) return t.restart(callback, delay, time), t;
+                  delay = +delay, time = time == null ? now() : +time;
+                  t.restart(function tick(elapsed) {
+                    elapsed += total;
+                    t.restart(tick, total += delay, time);
+                    callback(elapsed);
+                  }, delay, time);
+                  return t;
+                };
+
+                var t0$1 = new Date;
+                var t1$1 = new Date;
+
+                function newInterval(floori, offseti, count, field) {
+
+                  function interval(date) {
+                    return floori(date = new Date(+date)), date;
+                  }
+
+                  interval.floor = interval;
+
+                  interval.ceil = function(date) {
+                    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+                  };
+
+                  interval.round = function(date) {
+                    var d0 = interval(date),
+                        d1 = interval.ceil(date);
+                    return date - d0 < d1 - date ? d0 : d1;
+                  };
+
+                  interval.offset = function(date, step) {
+                    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+                  };
+
+                  interval.range = function(start, stop, step) {
+                    var range = [];
+                    start = interval.ceil(start);
+                    step = step == null ? 1 : Math.floor(step);
+                    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+                    do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
+                    return range;
+                  };
+
+                  interval.filter = function(test) {
+                    return newInterval(function(date) {
+                      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+                    }, function(date, step) {
+                      if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
+                    });
+                  };
+
+                  if (count) {
+                    interval.count = function(start, end) {
+                      t0$1.setTime(+start), t1$1.setTime(+end);
+                      floori(t0$1), floori(t1$1);
+                      return Math.floor(count(t0$1, t1$1));
+                    };
+
+                    interval.every = function(step) {
+                      step = Math.floor(step);
+                      return !isFinite(step) || !(step > 0) ? null
+                          : !(step > 1) ? interval
+                          : interval.filter(field
+                              ? function(d) { return field(d) % step === 0; }
+                              : function(d) { return interval.count(0, d) % step === 0; });
+                    };
+                  }
+
+                  return interval;
+                }
+
+                var millisecond = newInterval(function() {
+                  // noop
+                }, function(date, step) {
+                  date.setTime(+date + step);
+                }, function(start, end) {
+                  return end - start;
+                });
+
+                // An optimized implementation for this simple case.
+                millisecond.every = function(k) {
+                  k = Math.floor(k);
+                  if (!isFinite(k) || !(k > 0)) return null;
+                  if (!(k > 1)) return millisecond;
+                  return newInterval(function(date) {
+                    date.setTime(Math.floor(date / k) * k);
+                  }, function(date, step) {
+                    date.setTime(+date + step * k);
+                  }, function(start, end) {
+                    return (end - start) / k;
+                  });
+                };
+
+                var milliseconds = millisecond.range;
+
+                var durationSecond = 1e3;
+                var durationMinute = 6e4;
+                var durationHour = 36e5;
+                var durationDay = 864e5;
+                var durationWeek = 6048e5;
+
+                var second = newInterval(function(date) {
+                  date.setTime(Math.floor(date / durationSecond) * durationSecond);
+                }, function(date, step) {
+                  date.setTime(+date + step * durationSecond);
+                }, function(start, end) {
+                  return (end - start) / durationSecond;
+                }, function(date) {
+                  return date.getUTCSeconds();
+                });
+
+                var seconds = second.range;
+
+                var minute = newInterval(function(date) {
+                  date.setTime(Math.floor(date / durationMinute) * durationMinute);
+                }, function(date, step) {
+                  date.setTime(+date + step * durationMinute);
+                }, function(start, end) {
+                  return (end - start) / durationMinute;
+                }, function(date) {
+                  return date.getMinutes();
+                });
+
+                var minutes = minute.range;
+
+                var hour = newInterval(function(date) {
+                  var offset = date.getTimezoneOffset() * durationMinute % durationHour;
+                  if (offset < 0) offset += durationHour;
+                  date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
+                }, function(date, step) {
+                  date.setTime(+date + step * durationHour);
+                }, function(start, end) {
+                  return (end - start) / durationHour;
+                }, function(date) {
+                  return date.getHours();
+                });
+
+                var hours = hour.range;
+
+                var day = newInterval(function(date) {
+                  date.setHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setDate(date.getDate() + step);
+                }, function(start, end) {
+                  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
+                }, function(date) {
+                  return date.getDate() - 1;
+                });
+
+                var days = day.range;
+
+                function weekday(i) {
+                  return newInterval(function(date) {
+                    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+                    date.setHours(0, 0, 0, 0);
+                  }, function(date, step) {
+                    date.setDate(date.getDate() + step * 7);
+                  }, function(start, end) {
+                    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+                  });
+                }
+
+                var sunday = weekday(0);
+                var monday = weekday(1);
+                var tuesday = weekday(2);
+                var wednesday = weekday(3);
+                var thursday = weekday(4);
+                var friday = weekday(5);
+                var saturday = weekday(6);
+
+                var sundays = sunday.range;
+                var mondays = monday.range;
+                var tuesdays = tuesday.range;
+                var wednesdays = wednesday.range;
+                var thursdays = thursday.range;
+                var fridays = friday.range;
+                var saturdays = saturday.range;
+
+                var month = newInterval(function(date) {
+                  date.setDate(1);
+                  date.setHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setMonth(date.getMonth() + step);
+                }, function(start, end) {
+                  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+                }, function(date) {
+                  return date.getMonth();
+                });
+
+                var months = month.range;
+
+                var year = newInterval(function(date) {
+                  date.setMonth(0, 1);
+                  date.setHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setFullYear(date.getFullYear() + step);
+                }, function(start, end) {
+                  return end.getFullYear() - start.getFullYear();
+                }, function(date) {
+                  return date.getFullYear();
+                });
+
+                // An optimized implementation for this simple case.
+                year.every = function(k) {
+                  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+                    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+                    date.setMonth(0, 1);
+                    date.setHours(0, 0, 0, 0);
+                  }, function(date, step) {
+                    date.setFullYear(date.getFullYear() + step * k);
+                  });
+                };
+
+                var years = year.range;
+
+                var utcMinute = newInterval(function(date) {
+                  date.setUTCSeconds(0, 0);
+                }, function(date, step) {
+                  date.setTime(+date + step * durationMinute);
+                }, function(start, end) {
+                  return (end - start) / durationMinute;
+                }, function(date) {
+                  return date.getUTCMinutes();
+                });
+
+                var utcMinutes = utcMinute.range;
+
+                var utcHour = newInterval(function(date) {
+                  date.setUTCMinutes(0, 0, 0);
+                }, function(date, step) {
+                  date.setTime(+date + step * durationHour);
+                }, function(start, end) {
+                  return (end - start) / durationHour;
+                }, function(date) {
+                  return date.getUTCHours();
+                });
+
+                var utcHours = utcHour.range;
+
+                var utcDay = newInterval(function(date) {
+                  date.setUTCHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setUTCDate(date.getUTCDate() + step);
+                }, function(start, end) {
+                  return (end - start) / durationDay;
+                }, function(date) {
+                  return date.getUTCDate() - 1;
+                });
+
+                var utcDays = utcDay.range;
+
+                function utcWeekday(i) {
+                  return newInterval(function(date) {
+                    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+                    date.setUTCHours(0, 0, 0, 0);
+                  }, function(date, step) {
+                    date.setUTCDate(date.getUTCDate() + step * 7);
+                  }, function(start, end) {
+                    return (end - start) / durationWeek;
+                  });
+                }
+
+                var utcSunday = utcWeekday(0);
+                var utcMonday = utcWeekday(1);
+                var utcTuesday = utcWeekday(2);
+                var utcWednesday = utcWeekday(3);
+                var utcThursday = utcWeekday(4);
+                var utcFriday = utcWeekday(5);
+                var utcSaturday = utcWeekday(6);
+
+                var utcSundays = utcSunday.range;
+                var utcMondays = utcMonday.range;
+                var utcTuesdays = utcTuesday.range;
+                var utcWednesdays = utcWednesday.range;
+                var utcThursdays = utcThursday.range;
+                var utcFridays = utcFriday.range;
+                var utcSaturdays = utcSaturday.range;
+
+                var utcMonth = newInterval(function(date) {
+                  date.setUTCDate(1);
+                  date.setUTCHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setUTCMonth(date.getUTCMonth() + step);
+                }, function(start, end) {
+                  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+                }, function(date) {
+                  return date.getUTCMonth();
+                });
+
+                var utcMonths = utcMonth.range;
+
+                var utcYear = newInterval(function(date) {
+                  date.setUTCMonth(0, 1);
+                  date.setUTCHours(0, 0, 0, 0);
+                }, function(date, step) {
+                  date.setUTCFullYear(date.getUTCFullYear() + step);
+                }, function(start, end) {
+                  return end.getUTCFullYear() - start.getUTCFullYear();
+                }, function(date) {
+                  return date.getUTCFullYear();
+                });
+
+                // An optimized implementation for this simple case.
+                utcYear.every = function(k) {
+                  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+                    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+                    date.setUTCMonth(0, 1);
+                    date.setUTCHours(0, 0, 0, 0);
+                  }, function(date, step) {
+                    date.setUTCFullYear(date.getUTCFullYear() + step * k);
+                  });
+                };
+
+                var utcYears = utcYear.range;
+
+                // Computes the decimal coefficient and exponent of the specified number x with
+                // significant digits p, where x is positive and p is in [1, 21] or undefined.
+                // For example, formatDecimal(1.23) returns ["123", 0].
+                var formatDecimal = function(x, p) {
+                  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+                  var i, coefficient = x.slice(0, i);
+
+                  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+                  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+                  return [
+                    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+                    +x.slice(i + 1)
+                  ];
+                };
+
+                var exponent$1 = function(x) {
+                  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
+                };
+
+                var formatGroup = function(grouping, thousands) {
+                  return function(value, width) {
+                    var i = value.length,
+                        t = [],
+                        j = 0,
+                        g = grouping[0],
+                        length = 0;
+
+                    while (i > 0 && g > 0) {
+                      if (length + g + 1 > width) g = Math.max(1, width - length);
+                      t.push(value.substring(i -= g, i + g));
+                      if ((length += g + 1) > width) break;
+                      g = grouping[j = (j + 1) % grouping.length];
+                    }
+
+                    return t.reverse().join(thousands);
+                  };
+                };
+
+                var formatDefault = function(x, p) {
+                  x = x.toPrecision(p);
+
+                  out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
+                    switch (x[i]) {
+                      case ".": i0 = i1 = i; break;
+                      case "0": if (i0 === 0) i0 = i; i1 = i; break;
+                      case "e": break out;
+                      default: if (i0 > 0) i0 = 0; break;
+                    }
+                  }
+
+                  return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
+                };
+
+                var prefixExponent;
+
+                var formatPrefixAuto = function(x, p) {
+                  var d = formatDecimal(x, p);
+                  if (!d) return x + "";
+                  var coefficient = d[0],
+                      exponent = d[1],
+                      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+                      n = coefficient.length;
+                  return i === n ? coefficient
+                      : i > n ? coefficient + new Array(i - n + 1).join("0")
+                      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+                      : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+                };
+
+                var formatRounded = function(x, p) {
+                  var d = formatDecimal(x, p);
+                  if (!d) return x + "";
+                  var coefficient = d[0],
+                      exponent = d[1];
+                  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
+                      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+                      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+                };
+
+                var formatTypes = {
+                  "": formatDefault,
+                  "%": function(x, p) { return (x * 100).toFixed(p); },
+                  "b": function(x) { return Math.round(x).toString(2); },
+                  "c": function(x) { return x + ""; },
+                  "d": function(x) { return Math.round(x).toString(10); },
+                  "e": function(x, p) { return x.toExponential(p); },
+                  "f": function(x, p) { return x.toFixed(p); },
+                  "g": function(x, p) { return x.toPrecision(p); },
+                  "o": function(x) { return Math.round(x).toString(8); },
+                  "p": function(x, p) { return formatRounded(x * 100, p); },
+                  "r": formatRounded,
+                  "s": formatPrefixAuto,
+                  "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
+                  "x": function(x) { return Math.round(x).toString(16); }
+                };
+
+                // [[fill]align][sign][symbol][0][width][,][.precision][type]
+                var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
+
+                var formatSpecifier = function(specifier) {
+                  return new FormatSpecifier(specifier);
+                };
+
+                function FormatSpecifier(specifier) {
+                  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+
+                  var match,
+                      fill = match[1] || " ",
+                      align = match[2] || ">",
+                      sign = match[3] || "-",
+                      symbol = match[4] || "",
+                      zero = !!match[5],
+                      width = match[6] && +match[6],
+                      comma = !!match[7],
+                      precision = match[8] && +match[8].slice(1),
+                      type = match[9] || "";
+
+                  // The "n" type is an alias for ",g".
+                  if (type === "n") comma = true, type = "g";
+
+                  // Map invalid types to the default format.
+                  else if (!formatTypes[type]) type = "";
+
+                  // If zero fill is specified, padding goes after sign and before digits.
+                  if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
+
+                  this.fill = fill;
+                  this.align = align;
+                  this.sign = sign;
+                  this.symbol = symbol;
+                  this.zero = zero;
+                  this.width = width;
+                  this.comma = comma;
+                  this.precision = precision;
+                  this.type = type;
+                }
+
+                FormatSpecifier.prototype.toString = function() {
+                  return this.fill
+                      + this.align
+                      + this.sign
+                      + this.symbol
+                      + (this.zero ? "0" : "")
+                      + (this.width == null ? "" : Math.max(1, this.width | 0))
+                      + (this.comma ? "," : "")
+                      + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
+                      + this.type;
+                };
+
+                var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
+
+                function identity$3(x) {
+                  return x;
+                }
+
+                var formatLocale = function(locale) {
+                  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
+                      currency = locale.currency,
+                      decimal = locale.decimal;
+
+                  function newFormat(specifier) {
+                    specifier = formatSpecifier(specifier);
+
+                    var fill = specifier.fill,
+                        align = specifier.align,
+                        sign = specifier.sign,
+                        symbol = specifier.symbol,
+                        zero = specifier.zero,
+                        width = specifier.width,
+                        comma = specifier.comma,
+                        precision = specifier.precision,
+                        type = specifier.type;
+
+                    // Compute the prefix and suffix.
+                    // For SI-prefix, the suffix is lazily computed.
+                    var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+                        suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
+
+                    // What format function should we use?
+                    // Is this an integer type?
+                    // Can this type generate exponential notation?
+                    var formatType = formatTypes[type],
+                        maybeSuffix = !type || /[defgprs%]/.test(type);
+
+                    // Set the default precision if not specified,
+                    // or clamp the specified precision to the supported range.
+                    // For significant precision, it must be in [1, 21].
+                    // For fixed precision, it must be in [0, 20].
+                    precision = precision == null ? (type ? 6 : 12)
+                        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
+                        : Math.max(0, Math.min(20, precision));
+
+                    function format(value) {
+                      var valuePrefix = prefix,
+                          valueSuffix = suffix,
+                          i, n, c;
+
+                      if (type === "c") {
+                        valueSuffix = formatType(value) + valueSuffix;
+                        value = "";
+                      } else {
+                        value = +value;
+
+                        // Convert negative to positive, and compute the prefix.
+                        // Note that -0 is not less than 0, but 1 / -0 is!
+                        var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
+
+                        // Perform the initial formatting.
+                        value = formatType(value, precision);
+
+                        // If the original value was negative, it may be rounded to zero during
+                        // formatting; treat this as (positive) zero.
+                        if (valueNegative) {
+                          i = -1, n = value.length;
+                          valueNegative = false;
+                          while (++i < n) {
+                            if (c = value.charCodeAt(i), (48 < c && c < 58)
+                                || (type === "x" && 96 < c && c < 103)
+                                || (type === "X" && 64 < c && c < 71)) {
+                              valueNegative = true;
+                              break;
+                            }
+                          }
+                        }
+
+                        // Compute the prefix and suffix.
+                        valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+                        valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
+
+                        // Break the formatted value into the integer “value” part that can be
+                        // grouped, and fractional or exponential “suffix” part that is not.
+                        if (maybeSuffix) {
+                          i = -1, n = value.length;
+                          while (++i < n) {
+                            if (c = value.charCodeAt(i), 48 > c || c > 57) {
+                              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+                              value = value.slice(0, i);
+                              break;
+                            }
+                          }
+                        }
+                      }
+
+                      // If the fill character is not "0", grouping is applied before padding.
+                      if (comma && !zero) value = group(value, Infinity);
+
+                      // Compute the padding.
+                      var length = valuePrefix.length + value.length + valueSuffix.length,
+                          padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+                      // If the fill character is "0", grouping is applied after padding.
+                      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+                      // Reconstruct the final output based on the desired alignment.
+                      switch (align) {
+                        case "<": return valuePrefix + value + valueSuffix + padding;
+                        case "=": return valuePrefix + padding + value + valueSuffix;
+                        case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
+                      }
+                      return padding + valuePrefix + value + valueSuffix;
+                    }
+
+                    format.toString = function() {
+                      return specifier + "";
+                    };
+
+                    return format;
+                  }
+
+                  function formatPrefix(specifier, value) {
+                    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
+                        e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
+                        k = Math.pow(10, -e),
+                        prefix = prefixes[8 + e / 3];
+                    return function(value) {
+                      return f(k * value) + prefix;
+                    };
+                  }
+
+                  return {
+                    format: newFormat,
+                    formatPrefix: formatPrefix
+                  };
+                };
+
+                var locale$1;
+
+
+
+                defaultLocale({
+                  decimal: ".",
+                  thousands: ",",
+                  grouping: [3],
+                  currency: ["$", ""]
+                });
+
+                function defaultLocale(definition) {
+                  locale$1 = formatLocale(definition);
+                  exports.format = locale$1.format;
+                  exports.formatPrefix = locale$1.formatPrefix;
+                  return locale$1;
+                }
+
+                var precisionFixed = function(step) {
+                  return Math.max(0, -exponent$1(Math.abs(step)));
+                };
+
+                var precisionPrefix = function(step, value) {
+                  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
+                };
+
+                var precisionRound = function(step, max) {
+                  step = Math.abs(step), max = Math.abs(max) - step;
+                  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
+                };
+
+                function localDate(d) {
+                  if (0 <= d.y && d.y < 100) {
+                    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+                    date.setFullYear(d.y);
+                    return date;
+                  }
+                  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+                }
+
+                function utcDate(d) {
+                  if (0 <= d.y && d.y < 100) {
+                    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+                    date.setUTCFullYear(d.y);
+                    return date;
+                  }
+                  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+                }
+
+                function newYear(y) {
+                  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
+                }
+
+                function formatLocale$1(locale) {
+                  var locale_dateTime = locale.dateTime,
+                      locale_date = locale.date,
+                      locale_time = locale.time,
+                      locale_periods = locale.periods,
+                      locale_weekdays = locale.days,
+                      locale_shortWeekdays = locale.shortDays,
+                      locale_months = locale.months,
+                      locale_shortMonths = locale.shortMonths;
+
+                  var periodRe = formatRe(locale_periods),
+                      periodLookup = formatLookup(locale_periods),
+                      weekdayRe = formatRe(locale_weekdays),
+                      weekdayLookup = formatLookup(locale_weekdays),
+                      shortWeekdayRe = formatRe(locale_shortWeekdays),
+                      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+                      monthRe = formatRe(locale_months),
+                      monthLookup = formatLookup(locale_months),
+                      shortMonthRe = formatRe(locale_shortMonths),
+                      shortMonthLookup = formatLookup(locale_shortMonths);
+
+                  var formats = {
+                    "a": formatShortWeekday,
+                    "A": formatWeekday,
+                    "b": formatShortMonth,
+                    "B": formatMonth,
+                    "c": null,
+                    "d": formatDayOfMonth,
+                    "e": formatDayOfMonth,
+                    "H": formatHour24,
+                    "I": formatHour12,
+                    "j": formatDayOfYear,
+                    "L": formatMilliseconds,
+                    "m": formatMonthNumber,
+                    "M": formatMinutes,
+                    "p": formatPeriod,
+                    "S": formatSeconds,
+                    "U": formatWeekNumberSunday,
+                    "w": formatWeekdayNumber,
+                    "W": formatWeekNumberMonday,
+                    "x": null,
+                    "X": null,
+                    "y": formatYear,
+                    "Y": formatFullYear,
+                    "Z": formatZone,
+                    "%": formatLiteralPercent
+                  };
+
+                  var utcFormats = {
+                    "a": formatUTCShortWeekday,
+                    "A": formatUTCWeekday,
+                    "b": formatUTCShortMonth,
+                    "B": formatUTCMonth,
+                    "c": null,
+                    "d": formatUTCDayOfMonth,
+                    "e": formatUTCDayOfMonth,
+                    "H": formatUTCHour24,
+                    "I": formatUTCHour12,
+                    "j": formatUTCDayOfYear,
+                    "L": formatUTCMilliseconds,
+                    "m": formatUTCMonthNumber,
+                    "M": formatUTCMinutes,
+                    "p": formatUTCPeriod,
+                    "S": formatUTCSeconds,
+                    "U": formatUTCWeekNumberSunday,
+                    "w": formatUTCWeekdayNumber,
+                    "W": formatUTCWeekNumberMonday,
+                    "x": null,
+                    "X": null,
+                    "y": formatUTCYear,
+                    "Y": formatUTCFullYear,
+                    "Z": formatUTCZone,
+                    "%": formatLiteralPercent
+                  };
+
+                  var parses = {
+                    "a": parseShortWeekday,
+                    "A": parseWeekday,
+                    "b": parseShortMonth,
+                    "B": parseMonth,
+                    "c": parseLocaleDateTime,
+                    "d": parseDayOfMonth,
+                    "e": parseDayOfMonth,
+                    "H": parseHour24,
+                    "I": parseHour24,
+                    "j": parseDayOfYear,
+                    "L": parseMilliseconds,
+                    "m": parseMonthNumber,
+                    "M": parseMinutes,
+                    "p": parsePeriod,
+                    "S": parseSeconds,
+                    "U": parseWeekNumberSunday,
+                    "w": parseWeekdayNumber,
+                    "W": parseWeekNumberMonday,
+                    "x": parseLocaleDate,
+                    "X": parseLocaleTime,
+                    "y": parseYear,
+                    "Y": parseFullYear,
+                    "Z": parseZone,
+                    "%": parseLiteralPercent
+                  };
+
+                  // These recursive directive definitions must be deferred.
+                  formats.x = newFormat(locale_date, formats);
+                  formats.X = newFormat(locale_time, formats);
+                  formats.c = newFormat(locale_dateTime, formats);
+                  utcFormats.x = newFormat(locale_date, utcFormats);
+                  utcFormats.X = newFormat(locale_time, utcFormats);
+                  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+                  function newFormat(specifier, formats) {
+                    return function(date) {
+                      var string = [],
+                          i = -1,
+                          j = 0,
+                          n = specifier.length,
+                          c,
+                          pad,
+                          format;
+
+                      if (!(date instanceof Date)) date = new Date(+date);
+
+                      while (++i < n) {
+                        if (specifier.charCodeAt(i) === 37) {
+                          string.push(specifier.slice(j, i));
+                          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
+                          else pad = c === "e" ? " " : "0";
+                          if (format = formats[c]) c = format(date, pad);
+                          string.push(c);
+                          j = i + 1;
+                        }
+                      }
+
+                      string.push(specifier.slice(j, i));
+                      return string.join("");
+                    };
+                  }
+
+                  function newParse(specifier, newDate) {
+                    return function(string) {
+                      var d = newYear(1900),
+                          i = parseSpecifier(d, specifier, string += "", 0);
+                      if (i != string.length) return null;
+
+                      // The am-pm flag is 0 for AM, and 1 for PM.
+                      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+                      // Convert day-of-week and week-of-year to day-of-year.
+                      if ("W" in d || "U" in d) {
+                        if (!("w" in d)) d.w = "W" in d ? 1 : 0;
+                        var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
+                        d.m = 0;
+                        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
+                      }
+
+                      // If a time zone is specified, all fields are interpreted as UTC and then
+                      // offset according to the specified time zone.
+                      if ("Z" in d) {
+                        d.H += d.Z / 100 | 0;
+                        d.M += d.Z % 100;
+                        return utcDate(d);
+                      }
+
+                      // Otherwise, all fields are in local time.
+                      return newDate(d);
+                    };
+                  }
+
+                  function parseSpecifier(d, specifier, string, j) {
+                    var i = 0,
+                        n = specifier.length,
+                        m = string.length,
+                        c,
+                        parse;
+
+                    while (i < n) {
+                      if (j >= m) return -1;
+                      c = specifier.charCodeAt(i++);
+                      if (c === 37) {
+                        c = specifier.charAt(i++);
+                        parse = parses[c in pads ? specifier.charAt(i++) : c];
+                        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
+                      } else if (c != string.charCodeAt(j++)) {
+                        return -1;
+                      }
+                    }
+
+                    return j;
+                  }
+
+                  function parsePeriod(d, string, i) {
+                    var n = periodRe.exec(string.slice(i));
+                    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+                  }
+
+                  function parseShortWeekday(d, string, i) {
+                    var n = shortWeekdayRe.exec(string.slice(i));
+                    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+                  }
+
+                  function parseWeekday(d, string, i) {
+                    var n = weekdayRe.exec(string.slice(i));
+                    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+                  }
+
+                  function parseShortMonth(d, string, i) {
+                    var n = shortMonthRe.exec(string.slice(i));
+                    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+                  }
+
+                  function parseMonth(d, string, i) {
+                    var n = monthRe.exec(string.slice(i));
+                    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+                  }
+
+                  function parseLocaleDateTime(d, string, i) {
+                    return parseSpecifier(d, locale_dateTime, string, i);
+                  }
+
+                  function parseLocaleDate(d, string, i) {
+                    return parseSpecifier(d, locale_date, string, i);
+                  }
+
+                  function parseLocaleTime(d, string, i) {
+                    return parseSpecifier(d, locale_time, string, i);
+                  }
+
+                  function formatShortWeekday(d) {
+                    return locale_shortWeekdays[d.getDay()];
+                  }
+
+                  function formatWeekday(d) {
+                    return locale_weekdays[d.getDay()];
+                  }
+
+                  function formatShortMonth(d) {
+                    return locale_shortMonths[d.getMonth()];
+                  }
+
+                  function formatMonth(d) {
+                    return locale_months[d.getMonth()];
+                  }
+
+                  function formatPeriod(d) {
+                    return locale_periods[+(d.getHours() >= 12)];
+                  }
+
+                  function formatUTCShortWeekday(d) {
+                    return locale_shortWeekdays[d.getUTCDay()];
+                  }
+
+                  function formatUTCWeekday(d) {
+                    return locale_weekdays[d.getUTCDay()];
+                  }
+
+                  function formatUTCShortMonth(d) {
+                    return locale_shortMonths[d.getUTCMonth()];
+                  }
+
+                  function formatUTCMonth(d) {
+                    return locale_months[d.getUTCMonth()];
+                  }
+
+                  function formatUTCPeriod(d) {
+                    return locale_periods[+(d.getUTCHours() >= 12)];
+                  }
+
+                  return {
+                    format: function(specifier) {
+                      var f = newFormat(specifier += "", formats);
+                      f.toString = function() { return specifier; };
+                      return f;
+                    },
+                    parse: function(specifier) {
+                      var p = newParse(specifier += "", localDate);
+                      p.toString = function() { return specifier; };
+                      return p;
+                    },
+                    utcFormat: function(specifier) {
+                      var f = newFormat(specifier += "", utcFormats);
+                      f.toString = function() { return specifier; };
+                      return f;
+                    },
+                    utcParse: function(specifier) {
+                      var p = newParse(specifier, utcDate);
+                      p.toString = function() { return specifier; };
+                      return p;
+                    }
+                  };
+                }
+
+                var pads = {"-": "", "_": " ", "0": "0"};
+                var numberRe = /^\s*\d+/;
+                var percentRe = /^%/;
+                var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+                function pad(value, fill, width) {
+                  var sign = value < 0 ? "-" : "",
+                      string = (sign ? -value : value) + "",
+                      length = string.length;
+                  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+                }
+
+                function requote(s) {
+                  return s.replace(requoteRe, "\\$&");
+                }
+
+                function formatRe(names) {
+                  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+                }
+
+                function formatLookup(names) {
+                  var map = {}, i = -1, n = names.length;
+                  while (++i < n) map[names[i].toLowerCase()] = i;
+                  return map;
+                }
+
+                function parseWeekdayNumber(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 1));
+                  return n ? (d.w = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseWeekNumberSunday(d, string, i) {
+                  var n = numberRe.exec(string.slice(i));
+                  return n ? (d.U = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseWeekNumberMonday(d, string, i) {
+                  var n = numberRe.exec(string.slice(i));
+                  return n ? (d.W = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseFullYear(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 4));
+                  return n ? (d.y = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseYear(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+                }
+
+                function parseZone(d, string, i) {
+                  var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
+                  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+                }
+
+                function parseMonthNumber(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+                }
+
+                function parseDayOfMonth(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.d = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseDayOfYear(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 3));
+                  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseHour24(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.H = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseMinutes(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.M = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseSeconds(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 2));
+                  return n ? (d.S = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseMilliseconds(d, string, i) {
+                  var n = numberRe.exec(string.slice(i, i + 3));
+                  return n ? (d.L = +n[0], i + n[0].length) : -1;
+                }
+
+                function parseLiteralPercent(d, string, i) {
+                  var n = percentRe.exec(string.slice(i, i + 1));
+                  return n ? i + n[0].length : -1;
+                }
+
+                function formatDayOfMonth(d, p) {
+                  return pad(d.getDate(), p, 2);
+                }
+
+                function formatHour24(d, p) {
+                  return pad(d.getHours(), p, 2);
+                }
+
+                function formatHour12(d, p) {
+                  return pad(d.getHours() % 12 || 12, p, 2);
+                }
+
+                function formatDayOfYear(d, p) {
+                  return pad(1 + day.count(year(d), d), p, 3);
+                }
+
+                function formatMilliseconds(d, p) {
+                  return pad(d.getMilliseconds(), p, 3);
+                }
+
+                function formatMonthNumber(d, p) {
+                  return pad(d.getMonth() + 1, p, 2);
+                }
+
+                function formatMinutes(d, p) {
+                  return pad(d.getMinutes(), p, 2);
+                }
+
+                function formatSeconds(d, p) {
+                  return pad(d.getSeconds(), p, 2);
+                }
+
+                function formatWeekNumberSunday(d, p) {
+                  return pad(sunday.count(year(d), d), p, 2);
+                }
+
+                function formatWeekdayNumber(d) {
+                  return d.getDay();
+                }
+
+                function formatWeekNumberMonday(d, p) {
+                  return pad(monday.count(year(d), d), p, 2);
+                }
+
+                function formatYear(d, p) {
+                  return pad(d.getFullYear() % 100, p, 2);
+                }
+
+                function formatFullYear(d, p) {
+                  return pad(d.getFullYear() % 10000, p, 4);
+                }
+
+                function formatZone(d) {
+                  var z = d.getTimezoneOffset();
+                  return (z > 0 ? "-" : (z *= -1, "+"))
+                      + pad(z / 60 | 0, "0", 2)
+                      + pad(z % 60, "0", 2);
+                }
+
+                function formatUTCDayOfMonth(d, p) {
+                  return pad(d.getUTCDate(), p, 2);
+                }
+
+                function formatUTCHour24(d, p) {
+                  return pad(d.getUTCHours(), p, 2);
+                }
+
+                function formatUTCHour12(d, p) {
+                  return pad(d.getUTCHours() % 12 || 12, p, 2);
+                }
+
+                function formatUTCDayOfYear(d, p) {
+                  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
+                }
+
+                function formatUTCMilliseconds(d, p) {
+                  return pad(d.getUTCMilliseconds(), p, 3);
+                }
+
+                function formatUTCMonthNumber(d, p) {
+                  return pad(d.getUTCMonth() + 1, p, 2);
+                }
+
+                function formatUTCMinutes(d, p) {
+                  return pad(d.getUTCMinutes(), p, 2);
+                }
+
+                function formatUTCSeconds(d, p) {
+                  return pad(d.getUTCSeconds(), p, 2);
+                }
+
+                function formatUTCWeekNumberSunday(d, p) {
+                  return pad(utcSunday.count(utcYear(d), d), p, 2);
+                }
+
+                function formatUTCWeekdayNumber(d) {
+                  return d.getUTCDay();
+                }
+
+                function formatUTCWeekNumberMonday(d, p) {
+                  return pad(utcMonday.count(utcYear(d), d), p, 2);
+                }
+
+                function formatUTCYear(d, p) {
+                  return pad(d.getUTCFullYear() % 100, p, 2);
+                }
+
+                function formatUTCFullYear(d, p) {
+                  return pad(d.getUTCFullYear() % 10000, p, 4);
+                }
+
+                function formatUTCZone() {
+                  return "+0000";
+                }
+
+                function formatLiteralPercent() {
+                  return "%";
+                }
+
+                var locale$2;
+
+
+
+
+
+                defaultLocale$1({
+                  dateTime: "%x, %X",
+                  date: "%-m/%-d/%Y",
+                  time: "%-I:%M:%S %p",
+                  periods: ["AM", "PM"],
+                  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+                  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+                  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+                  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+                });
+
+                function defaultLocale$1(definition) {
+                  locale$2 = formatLocale$1(definition);
+                  exports.timeFormat = locale$2.format;
+                  exports.timeParse = locale$2.parse;
+                  exports.utcFormat = locale$2.utcFormat;
+                  exports.utcParse = locale$2.utcParse;
+                  return locale$2;
+                }
+
+                var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+                function formatIsoNative(date) {
+                  return date.toISOString();
+                }
+
+                var formatIso = Date.prototype.toISOString
+                    ? formatIsoNative
+                    : exports.utcFormat(isoSpecifier);
+
+                function parseIsoNative(string) {
+                  var date = new Date(string);
+                  return isNaN(date) ? null : date;
+                }
+
+                var parseIso = +new Date("2000-01-01T00:00:00.000Z")
+                    ? parseIsoNative
+                    : exports.utcParse(isoSpecifier);
+
+                var array$2 = Array.prototype;
+
+                var map$3 = array$2.map;
+                var slice$3 = array$2.slice;
+
+                var implicit = {name: "implicit"};
+
+                function ordinal(range) {
+                  var index = map$1(),
+                      domain = [],
+                      unknown = implicit;
+
+                  range = range == null ? [] : slice$3.call(range);
+
+                  function scale(d) {
+                    var key = d + "", i = index.get(key);
+                    if (!i) {
+                      if (unknown !== implicit) return unknown;
+                      index.set(key, i = domain.push(d));
+                    }
+                    return range[(i - 1) % range.length];
+                  }
+
+                  scale.domain = function(_) {
+                    if (!arguments.length) return domain.slice();
+                    domain = [], index = map$1();
+                    var i = -1, n = _.length, d, key;
+                    while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
+                    return scale;
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (range = slice$3.call(_), scale) : range.slice();
+                  };
+
+                  scale.unknown = function(_) {
+                    return arguments.length ? (unknown = _, scale) : unknown;
+                  };
+
+                  scale.copy = function() {
+                    return ordinal()
+                        .domain(domain)
+                        .range(range)
+                        .unknown(unknown);
+                  };
+
+                  return scale;
+                }
+
+                function band() {
+                  var scale = ordinal().unknown(undefined),
+                      domain = scale.domain,
+                      ordinalRange = scale.range,
+                      range$$1 = [0, 1],
+                      step,
+                      bandwidth,
+                      round = false,
+                      paddingInner = 0,
+                      paddingOuter = 0,
+                      align = 0.5;
+
+                  delete scale.unknown;
+
+                  function rescale() {
+                    var n = domain().length,
+                        reverse = range$$1[1] < range$$1[0],
+                        start = range$$1[reverse - 0],
+                        stop = range$$1[1 - reverse];
+                    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+                    if (round) step = Math.floor(step);
+                    start += (stop - start - step * (n - paddingInner)) * align;
+                    bandwidth = step * (1 - paddingInner);
+                    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+                    var values = range(n).map(function(i) { return start + step * i; });
+                    return ordinalRange(reverse ? values.reverse() : values);
+                  }
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (domain(_), rescale()) : domain();
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
+                  };
+
+                  scale.rangeRound = function(_) {
+                    return range$$1 = [+_[0], +_[1]], round = true, rescale();
+                  };
+
+                  scale.bandwidth = function() {
+                    return bandwidth;
+                  };
+
+                  scale.step = function() {
+                    return step;
+                  };
+
+                  scale.round = function(_) {
+                    return arguments.length ? (round = !!_, rescale()) : round;
+                  };
+
+                  scale.padding = function(_) {
+                    return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+                  };
+
+                  scale.paddingInner = function(_) {
+                    return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+                  };
+
+                  scale.paddingOuter = function(_) {
+                    return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
+                  };
+
+                  scale.align = function(_) {
+                    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+                  };
+
+                  scale.copy = function() {
+                    return band()
+                        .domain(domain())
+                        .range(range$$1)
+                        .round(round)
+                        .paddingInner(paddingInner)
+                        .paddingOuter(paddingOuter)
+                        .align(align);
+                  };
+
+                  return rescale();
+                }
+
+                function pointish(scale) {
+                  var copy = scale.copy;
+
+                  scale.padding = scale.paddingOuter;
+                  delete scale.paddingInner;
+                  delete scale.paddingOuter;
+
+                  scale.copy = function() {
+                    return pointish(copy());
+                  };
+
+                  return scale;
+                }
+
+                function point$4() {
+                  return pointish(band().paddingInner(1));
+                }
+
+                var constant$4 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var number$1 = function(x) {
+                  return +x;
+                };
+
+                var unit = [0, 1];
+
+                function deinterpolateLinear(a, b) {
+                  return (b -= (a = +a))
+                      ? function(x) { return (x - a) / b; }
+                      : constant$4(b);
+                }
+
+                function deinterpolateClamp(deinterpolate) {
+                  return function(a, b) {
+                    var d = deinterpolate(a = +a, b = +b);
+                    return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
+                  };
+                }
+
+                function reinterpolateClamp(reinterpolate) {
+                  return function(a, b) {
+                    var r = reinterpolate(a = +a, b = +b);
+                    return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
+                  };
+                }
+
+                function bimap(domain, range$$1, deinterpolate, reinterpolate) {
+                  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
+                  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
+                  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
+                  return function(x) { return r0(d0(x)); };
+                }
+
+                function polymap(domain, range$$1, deinterpolate, reinterpolate) {
+                  var j = Math.min(domain.length, range$$1.length) - 1,
+                      d = new Array(j),
+                      r = new Array(j),
+                      i = -1;
+
+                  // Reverse descending domains.
+                  if (domain[j] < domain[0]) {
+                    domain = domain.slice().reverse();
+                    range$$1 = range$$1.slice().reverse();
+                  }
+
+                  while (++i < j) {
+                    d[i] = deinterpolate(domain[i], domain[i + 1]);
+                    r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
+                  }
+
+                  return function(x) {
+                    var i = bisectRight(domain, x, 1, j) - 1;
+                    return r[i](d[i](x));
+                  };
+                }
+
+                function copy(source, target) {
+                  return target
+                      .domain(source.domain())
+                      .range(source.range())
+                      .interpolate(source.interpolate())
+                      .clamp(source.clamp());
+                }
+
+                // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+                // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
+                function continuous(deinterpolate, reinterpolate) {
+                  var domain = unit,
+                      range$$1 = unit,
+                      interpolate$$1 = interpolate,
+                      clamp = false,
+                      piecewise,
+                      output,
+                      input;
+
+                  function rescale() {
+                    piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
+                    output = input = null;
+                    return scale;
+                  }
+
+                  function scale(x) {
+                    return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
+                  }
+
+                  scale.invert = function(y) {
+                    return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
+                  };
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+                  };
+
+                  scale.rangeRound = function(_) {
+                    return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale();
+                  };
+
+                  scale.clamp = function(_) {
+                    return arguments.length ? (clamp = !!_, rescale()) : clamp;
+                  };
+
+                  scale.interpolate = function(_) {
+                    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
+                  };
+
+                  return rescale();
+                }
+
+                var tickFormat = function(domain, count, specifier) {
+                  var start = domain[0],
+                      stop = domain[domain.length - 1],
+                      step = tickStep(start, stop, count == null ? 10 : count),
+                      precision;
+                  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
+                  switch (specifier.type) {
+                    case "s": {
+                      var value = Math.max(Math.abs(start), Math.abs(stop));
+                      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
+                      return exports.formatPrefix(specifier, value);
+                    }
+                    case "":
+                    case "e":
+                    case "g":
+                    case "p":
+                    case "r": {
+                      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+                      break;
+                    }
+                    case "f":
+                    case "%": {
+                      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+                      break;
+                    }
+                  }
+                  return exports.format(specifier);
+                };
+
+                function linearish(scale) {
+                  var domain = scale.domain;
+
+                  scale.ticks = function(count) {
+                    var d = domain();
+                    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+                  };
+
+                  scale.tickFormat = function(count, specifier) {
+                    return tickFormat(domain(), count, specifier);
+                  };
+
+                  scale.nice = function(count) {
+                    var d = domain(),
+                        i = d.length - 1,
+                        n = count == null ? 10 : count,
+                        start = d[0],
+                        stop = d[i],
+                        step = tickStep(start, stop, n);
+
+                    if (step) {
+                      step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
+                      d[0] = Math.floor(start / step) * step;
+                      d[i] = Math.ceil(stop / step) * step;
+                      domain(d);
+                    }
+
+                    return scale;
+                  };
+
+                  return scale;
+                }
+
+                function linear$2() {
+                  var scale = continuous(deinterpolateLinear, interpolateNumber);
+
+                  scale.copy = function() {
+                    return copy(scale, linear$2());
+                  };
+
+                  return linearish(scale);
+                }
+
+                function identity$4() {
+                  var domain = [0, 1];
+
+                  function scale(x) {
+                    return +x;
+                  }
+
+                  scale.invert = scale;
+
+                  scale.domain = scale.range = function(_) {
+                    return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
+                  };
+
+                  scale.copy = function() {
+                    return identity$4().domain(domain);
+                  };
+
+                  return linearish(scale);
+                }
+
+                var nice = function(domain, interval) {
+                  domain = domain.slice();
+
+                  var i0 = 0,
+                      i1 = domain.length - 1,
+                      x0 = domain[i0],
+                      x1 = domain[i1],
+                      t;
+
+                  if (x1 < x0) {
+                    t = i0, i0 = i1, i1 = t;
+                    t = x0, x0 = x1, x1 = t;
+                  }
+
+                  domain[i0] = interval.floor(x0);
+                  domain[i1] = interval.ceil(x1);
+                  return domain;
+                };
+
+                function deinterpolate(a, b) {
+                  return (b = Math.log(b / a))
+                      ? function(x) { return Math.log(x / a) / b; }
+                      : constant$4(b);
+                }
+
+                function reinterpolate(a, b) {
+                  return a < 0
+                      ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
+                      : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
+                }
+
+                function pow10(x) {
+                  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+                }
+
+                function powp(base) {
+                  return base === 10 ? pow10
+                      : base === Math.E ? Math.exp
+                      : function(x) { return Math.pow(base, x); };
+                }
+
+                function logp(base) {
+                  return base === Math.E ? Math.log
+                      : base === 10 && Math.log10
+                      || base === 2 && Math.log2
+                      || (base = Math.log(base), function(x) { return Math.log(x) / base; });
+                }
+
+                function reflect(f) {
+                  return function(x) {
+                    return -f(-x);
+                  };
+                }
+
+                function log() {
+                  var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
+                      domain = scale.domain,
+                      base = 10,
+                      logs = logp(10),
+                      pows = powp(10);
+
+                  function rescale() {
+                    logs = logp(base), pows = powp(base);
+                    if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
+                    return scale;
+                  }
+
+                  scale.base = function(_) {
+                    return arguments.length ? (base = +_, rescale()) : base;
+                  };
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (domain(_), rescale()) : domain();
+                  };
+
+                  scale.ticks = function(count) {
+                    var d = domain(),
+                        u = d[0],
+                        v = d[d.length - 1],
+                        r;
+
+                    if (r = v < u) i = u, u = v, v = i;
+
+                    var i = logs(u),
+                        j = logs(v),
+                        p,
+                        k,
+                        t,
+                        n = count == null ? 10 : +count,
+                        z = [];
+
+                    if (!(base % 1) && j - i < n) {
+                      i = Math.round(i) - 1, j = Math.round(j) + 1;
+                      if (u > 0) for (; i < j; ++i) {
+                        for (k = 1, p = pows(i); k < base; ++k) {
+                          t = p * k;
+                          if (t < u) continue;
+                          if (t > v) break;
+                          z.push(t);
+                        }
+                      } else for (; i < j; ++i) {
+                        for (k = base - 1, p = pows(i); k >= 1; --k) {
+                          t = p * k;
+                          if (t < u) continue;
+                          if (t > v) break;
+                          z.push(t);
+                        }
+                      }
+                    } else {
+                      z = ticks(i, j, Math.min(j - i, n)).map(pows);
+                    }
+
+                    return r ? z.reverse() : z;
+                  };
+
+                  scale.tickFormat = function(count, specifier) {
+                    if (specifier == null) specifier = base === 10 ? ".0e" : ",";
+                    if (typeof specifier !== "function") specifier = exports.format(specifier);
+                    if (count === Infinity) return specifier;
+                    if (count == null) count = 10;
+                    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+                    return function(d) {
+                      var i = d / pows(Math.round(logs(d)));
+                      if (i * base < base - 0.5) i *= base;
+                      return i <= k ? specifier(d) : "";
+                    };
+                  };
+
+                  scale.nice = function() {
+                    return domain(nice(domain(), {
+                      floor: function(x) { return pows(Math.floor(logs(x))); },
+                      ceil: function(x) { return pows(Math.ceil(logs(x))); }
+                    }));
+                  };
+
+                  scale.copy = function() {
+                    return copy(scale, log().base(base));
+                  };
+
+                  return scale;
+                }
+
+                function raise(x, exponent) {
+                  return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+                }
+
+                function pow() {
+                  var exponent = 1,
+                      scale = continuous(deinterpolate, reinterpolate),
+                      domain = scale.domain;
+
+                  function deinterpolate(a, b) {
+                    return (b = raise(b, exponent) - (a = raise(a, exponent)))
+                        ? function(x) { return (raise(x, exponent) - a) / b; }
+                        : constant$4(b);
+                  }
+
+                  function reinterpolate(a, b) {
+                    b = raise(b, exponent) - (a = raise(a, exponent));
+                    return function(t) { return raise(a + b * t, 1 / exponent); };
+                  }
+
+                  scale.exponent = function(_) {
+                    return arguments.length ? (exponent = +_, domain(domain())) : exponent;
+                  };
+
+                  scale.copy = function() {
+                    return copy(scale, pow().exponent(exponent));
+                  };
+
+                  return linearish(scale);
+                }
+
+                function sqrt() {
+                  return pow().exponent(0.5);
+                }
+
+                function quantile$$1() {
+                  var domain = [],
+                      range$$1 = [],
+                      thresholds = [];
+
+                  function rescale() {
+                    var i = 0, n = Math.max(1, range$$1.length);
+                    thresholds = new Array(n - 1);
+                    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
+                    return scale;
+                  }
+
+                  function scale(x) {
+                    if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
+                  }
+
+                  scale.invertExtent = function(y) {
+                    var i = range$$1.indexOf(y);
+                    return i < 0 ? [NaN, NaN] : [
+                      i > 0 ? thresholds[i - 1] : domain[0],
+                      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
+                    ];
+                  };
+
+                  scale.domain = function(_) {
+                    if (!arguments.length) return domain.slice();
+                    domain = [];
+                    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
+                    domain.sort(ascending);
+                    return rescale();
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+                  };
+
+                  scale.quantiles = function() {
+                    return thresholds.slice();
+                  };
+
+                  scale.copy = function() {
+                    return quantile$$1()
+                        .domain(domain)
+                        .range(range$$1);
+                  };
+
+                  return scale;
+                }
+
+                function quantize$1() {
+                  var x0 = 0,
+                      x1 = 1,
+                      n = 1,
+                      domain = [0.5],
+                      range$$1 = [0, 1];
+
+                  function scale(x) {
+                    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+                  }
+
+                  function rescale() {
+                    var i = -1;
+                    domain = new Array(n);
+                    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+                    return scale;
+                  }
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice();
+                  };
+
+                  scale.invertExtent = function(y) {
+                    var i = range$$1.indexOf(y);
+                    return i < 0 ? [NaN, NaN]
+                        : i < 1 ? [x0, domain[0]]
+                        : i >= n ? [domain[n - 1], x1]
+                        : [domain[i - 1], domain[i]];
+                  };
+
+                  scale.copy = function() {
+                    return quantize$1()
+                        .domain([x0, x1])
+                        .range(range$$1);
+                  };
+
+                  return linearish(scale);
+                }
+
+                function threshold$1() {
+                  var domain = [0.5],
+                      range$$1 = [0, 1],
+                      n = 1;
+
+                  function scale(x) {
+                    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+                  }
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
+                  };
+
+                  scale.range = function(_) {
+                    return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
+                  };
+
+                  scale.invertExtent = function(y) {
+                    var i = range$$1.indexOf(y);
+                    return [domain[i - 1], domain[i]];
+                  };
+
+                  scale.copy = function() {
+                    return threshold$1()
+                        .domain(domain)
+                        .range(range$$1);
+                  };
+
+                  return scale;
+                }
+
+                var durationSecond$1 = 1000;
+                var durationMinute$1 = durationSecond$1 * 60;
+                var durationHour$1 = durationMinute$1 * 60;
+                var durationDay$1 = durationHour$1 * 24;
+                var durationWeek$1 = durationDay$1 * 7;
+                var durationMonth = durationDay$1 * 30;
+                var durationYear = durationDay$1 * 365;
+
+                function date$1(t) {
+                  return new Date(t);
+                }
+
+                function number$2(t) {
+                  return t instanceof Date ? +t : +new Date(+t);
+                }
+
+                function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
+                  var scale = continuous(deinterpolateLinear, interpolateNumber),
+                      invert = scale.invert,
+                      domain = scale.domain;
+
+                  var formatMillisecond = format(".%L"),
+                      formatSecond = format(":%S"),
+                      formatMinute = format("%I:%M"),
+                      formatHour = format("%I %p"),
+                      formatDay = format("%a %d"),
+                      formatWeek = format("%b %d"),
+                      formatMonth = format("%B"),
+                      formatYear = format("%Y");
+
+                  var tickIntervals = [
+                    [second$$1,  1,      durationSecond$1],
+                    [second$$1,  5,  5 * durationSecond$1],
+                    [second$$1, 15, 15 * durationSecond$1],
+                    [second$$1, 30, 30 * durationSecond$1],
+                    [minute$$1,  1,      durationMinute$1],
+                    [minute$$1,  5,  5 * durationMinute$1],
+                    [minute$$1, 15, 15 * durationMinute$1],
+                    [minute$$1, 30, 30 * durationMinute$1],
+                    [  hour$$1,  1,      durationHour$1  ],
+                    [  hour$$1,  3,  3 * durationHour$1  ],
+                    [  hour$$1,  6,  6 * durationHour$1  ],
+                    [  hour$$1, 12, 12 * durationHour$1  ],
+                    [   day$$1,  1,      durationDay$1   ],
+                    [   day$$1,  2,  2 * durationDay$1   ],
+                    [  week,  1,      durationWeek$1  ],
+                    [ month$$1,  1,      durationMonth ],
+                    [ month$$1,  3,  3 * durationMonth ],
+                    [  year$$1,  1,      durationYear  ]
+                  ];
+
+                  function tickFormat(date) {
+                    return (second$$1(date) < date ? formatMillisecond
+                        : minute$$1(date) < date ? formatSecond
+                        : hour$$1(date) < date ? formatMinute
+                        : day$$1(date) < date ? formatHour
+                        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
+                        : year$$1(date) < date ? formatMonth
+                        : formatYear)(date);
+                  }
+
+                  function tickInterval(interval, start, stop, step) {
+                    if (interval == null) interval = 10;
+
+                    // If a desired tick count is specified, pick a reasonable tick interval
+                    // based on the extent of the domain and a rough estimate of tick size.
+                    // Otherwise, assume interval is already a time interval and use it.
+                    if (typeof interval === "number") {
+                      var target = Math.abs(stop - start) / interval,
+                          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
+                      if (i === tickIntervals.length) {
+                        step = tickStep(start / durationYear, stop / durationYear, interval);
+                        interval = year$$1;
+                      } else if (i) {
+                        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+                        step = i[1];
+                        interval = i[0];
+                      } else {
+                        step = tickStep(start, stop, interval);
+                        interval = millisecond$$1;
+                      }
+                    }
+
+                    return step == null ? interval : interval.every(step);
+                  }
+
+                  scale.invert = function(y) {
+                    return new Date(invert(y));
+                  };
+
+                  scale.domain = function(_) {
+                    return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
+                  };
+
+                  scale.ticks = function(interval, step) {
+                    var d = domain(),
+                        t0 = d[0],
+                        t1 = d[d.length - 1],
+                        r = t1 < t0,
+                        t;
+                    if (r) t = t0, t0 = t1, t1 = t;
+                    t = tickInterval(interval, t0, t1, step);
+                    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
+                    return r ? t.reverse() : t;
+                  };
+
+                  scale.tickFormat = function(count, specifier) {
+                    return specifier == null ? tickFormat : format(specifier);
+                  };
+
+                  scale.nice = function(interval, step) {
+                    var d = domain();
+                    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
+                        ? domain(nice(d, interval))
+                        : scale;
+                  };
+
+                  scale.copy = function() {
+                    return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
+                  };
+
+                  return scale;
+                }
+
+                var time = function() {
+                  return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
+                };
+
+                var utcTime = function() {
+                  return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
+                };
+
+                var colors = function(s) {
+                  return s.match(/.{6}/g).map(function(x) {
+                    return "#" + x;
+                  });
+                };
+
+                var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
+
+                var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
+
+                var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
+
+                var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
+
+                var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
+
+                var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+                var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+                var rainbow = cubehelix();
+
+                var rainbow$1 = function(t) {
+                  if (t < 0 || t > 1) t -= Math.floor(t);
+                  var ts = Math.abs(t - 0.5);
+                  rainbow.h = 360 * t - 100;
+                  rainbow.s = 1.5 - 1.5 * ts;
+                  rainbow.l = 0.8 - 0.9 * ts;
+                  return rainbow + "";
+                };
+
+                function ramp(range) {
+                  var n = range.length;
+                  return function(t) {
+                    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+                  };
+                }
+
+                var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
+
+                var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
+
+                var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
+
+                var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
+
+                function sequential(interpolator) {
+                  var x0 = 0,
+                      x1 = 1,
+                      clamp = false;
+
+                  function scale(x) {
+                    var t = (x - x0) / (x1 - x0);
+                    return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
+                  }
+
+                  scale.domain = function(_) {
+                    return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
+                  };
+
+                  scale.clamp = function(_) {
+                    return arguments.length ? (clamp = !!_, scale) : clamp;
+                  };
+
+                  scale.interpolator = function(_) {
+                    return arguments.length ? (interpolator = _, scale) : interpolator;
+                  };
+
+                  scale.copy = function() {
+                    return sequential(interpolator).domain([x0, x1]).clamp(clamp);
+                  };
+
+                  return linearish(scale);
+                }
+
+                var xhtml = "http://www.w3.org/1999/xhtml";
+
+                var namespaces = {
+                  svg: "http://www.w3.org/2000/svg",
+                  xhtml: xhtml,
+                  xlink: "http://www.w3.org/1999/xlink",
+                  xml: "http://www.w3.org/XML/1998/namespace",
+                  xmlns: "http://www.w3.org/2000/xmlns/"
+                };
+
+                var namespace = function(name) {
+                  var prefix = name += "", i = prefix.indexOf(":");
+                  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
+                  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
+                };
+
+                function creatorInherit(name) {
+                  return function() {
+                    var document = this.ownerDocument,
+                        uri = this.namespaceURI;
+                    return uri === xhtml && document.documentElement.namespaceURI === xhtml
+                        ? document.createElement(name)
+                        : document.createElementNS(uri, name);
+                  };
+                }
+
+                function creatorFixed(fullname) {
+                  return function() {
+                    return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+                  };
+                }
+
+                var creator = function(name) {
+                  var fullname = namespace(name);
+                  return (fullname.local
+                      ? creatorFixed
+                      : creatorInherit)(fullname);
+                };
+
+                var nextId = 0;
+
+                function local() {
+                  return new Local;
+                }
+
+                function Local() {
+                  this._ = "@" + (++nextId).toString(36);
+                }
+
+                Local.prototype = local.prototype = {
+                  constructor: Local,
+                  get: function(node) {
+                    var id = this._;
+                    while (!(id in node)) if (!(node = node.parentNode)) return;
+                    return node[id];
+                  },
+                  set: function(node, value) {
+                    return node[this._] = value;
+                  },
+                  remove: function(node) {
+                    return this._ in node && delete node[this._];
+                  },
+                  toString: function() {
+                    return this._;
+                  }
+                };
+
+                var matcher = function(selector) {
+                  return function() {
+                    return this.matches(selector);
+                  };
+                };
+
+                if (typeof document !== "undefined") {
+                  var element = document.documentElement;
+                  if (!element.matches) {
+                    var vendorMatches = element.webkitMatchesSelector
+                        || element.msMatchesSelector
+                        || element.mozMatchesSelector
+                        || element.oMatchesSelector;
+                    matcher = function(selector) {
+                      return function() {
+                        return vendorMatches.call(this, selector);
+                      };
+                    };
+                  }
+                }
+
+                var matcher$1 = matcher;
+
+                var filterEvents = {};
+
+                exports.event = null;
+
+                if (typeof document !== "undefined") {
+                  var element$1 = document.documentElement;
+                  if (!("onmouseenter" in element$1)) {
+                    filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
+                  }
+                }
+
+                function filterContextListener(listener, index, group) {
+                  listener = contextListener(listener, index, group);
+                  return function(event) {
+                    var related = event.relatedTarget;
+                    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
+                      listener.call(this, event);
+                    }
+                  };
+                }
+
+                function contextListener(listener, index, group) {
+                  return function(event1) {
+                    var event0 = exports.event; // Events can be reentrant (e.g., focus).
+                    exports.event = event1;
+                    try {
+                      listener.call(this, this.__data__, index, group);
+                    } finally {
+                      exports.event = event0;
+                    }
+                  };
+                }
+
+                function parseTypenames$1(typenames) {
+                  return typenames.trim().split(/^|\s+/).map(function(t) {
+                    var name = "", i = t.indexOf(".");
+                    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+                    return {type: t, name: name};
+                  });
+                }
+
+                function onRemove(typename) {
+                  return function() {
+                    var on = this.__on;
+                    if (!on) return;
+                    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+                      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
+                        this.removeEventListener(o.type, o.listener, o.capture);
+                      } else {
+                        on[++i] = o;
+                      }
+                    }
+                    if (++i) on.length = i;
+                    else delete this.__on;
+                  };
+                }
+
+                function onAdd(typename, value, capture) {
+                  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
+                  return function(d, i, group) {
+                    var on = this.__on, o, listener = wrap(value, i, group);
+                    if (on) for (var j = 0, m = on.length; j < m; ++j) {
+                      if ((o = on[j]).type === typename.type && o.name === typename.name) {
+                        this.removeEventListener(o.type, o.listener, o.capture);
+                        this.addEventListener(o.type, o.listener = listener, o.capture = capture);
+                        o.value = value;
+                        return;
+                      }
+                    }
+                    this.addEventListener(typename.type, listener, capture);
+                    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
+                    if (!on) this.__on = [o];
+                    else on.push(o);
+                  };
+                }
+
+                var selection_on = function(typename, value, capture) {
+                  var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
+
+                  if (arguments.length < 2) {
+                    var on = this.node().__on;
+                    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
+                      for (i = 0, o = on[j]; i < n; ++i) {
+                        if ((t = typenames[i]).type === o.type && t.name === o.name) {
+                          return o.value;
+                        }
+                      }
+                    }
+                    return;
+                  }
+
+                  on = value ? onAdd : onRemove;
+                  if (capture == null) capture = false;
+                  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
+                  return this;
+                };
+
+                function customEvent(event1, listener, that, args) {
+                  var event0 = exports.event;
+                  event1.sourceEvent = exports.event;
+                  exports.event = event1;
+                  try {
+                    return listener.apply(that, args);
+                  } finally {
+                    exports.event = event0;
+                  }
+                }
+
+                var sourceEvent = function() {
+                  var current = exports.event, source;
+                  while (source = current.sourceEvent) current = source;
+                  return current;
+                };
+
+                var point$5 = function(node, event) {
+                  var svg = node.ownerSVGElement || node;
+
+                  if (svg.createSVGPoint) {
+                    var point = svg.createSVGPoint();
+                    point.x = event.clientX, point.y = event.clientY;
+                    point = point.matrixTransform(node.getScreenCTM().inverse());
+                    return [point.x, point.y];
+                  }
+
+                  var rect = node.getBoundingClientRect();
+                  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
+                };
+
+                var mouse = function(node) {
+                  var event = sourceEvent();
+                  if (event.changedTouches) event = event.changedTouches[0];
+                  return point$5(node, event);
+                };
+
+                function none$2() {}
+
+                var selector = function(selector) {
+                  return selector == null ? none$2 : function() {
+                    return this.querySelector(selector);
+                  };
+                };
+
+                var selection_select = function(select) {
+                  if (typeof select !== "function") select = selector(select);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+                      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+                        if ("__data__" in node) subnode.__data__ = node.__data__;
+                        subgroup[i] = subnode;
+                      }
+                    }
+                  }
+
+                  return new Selection(subgroups, this._parents);
+                };
+
+                function empty() {
+                  return [];
+                }
+
+                var selectorAll = function(selector) {
+                  return selector == null ? empty : function() {
+                    return this.querySelectorAll(selector);
+                  };
+                };
+
+                var selection_selectAll = function(select) {
+                  if (typeof select !== "function") select = selectorAll(select);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+                      if (node = group[i]) {
+                        subgroups.push(select.call(node, node.__data__, i, group));
+                        parents.push(node);
+                      }
+                    }
+                  }
+
+                  return new Selection(subgroups, parents);
+                };
+
+                var selection_filter = function(match) {
+                  if (typeof match !== "function") match = matcher$1(match);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+                      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+                        subgroup.push(node);
+                      }
+                    }
+                  }
+
+                  return new Selection(subgroups, this._parents);
+                };
+
+                var sparse = function(update) {
+                  return new Array(update.length);
+                };
+
+                var selection_enter = function() {
+                  return new Selection(this._enter || this._groups.map(sparse), this._parents);
+                };
+
+                function EnterNode(parent, datum) {
+                  this.ownerDocument = parent.ownerDocument;
+                  this.namespaceURI = parent.namespaceURI;
+                  this._next = null;
+                  this._parent = parent;
+                  this.__data__ = datum;
+                }
+
+                EnterNode.prototype = {
+                  constructor: EnterNode,
+                  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
+                  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
+                  querySelector: function(selector) { return this._parent.querySelector(selector); },
+                  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
+                };
+
+                var constant$5 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var keyPrefix = "$"; // Protect against keys like “__proto__”.
+
+                function bindIndex(parent, group, enter, update, exit, data) {
+                  var i = 0,
+                      node,
+                      groupLength = group.length,
+                      dataLength = data.length;
+
+                  // Put any non-null nodes that fit into update.
+                  // Put any null nodes into enter.
+                  // Put any remaining data into enter.
+                  for (; i < dataLength; ++i) {
+                    if (node = group[i]) {
+                      node.__data__ = data[i];
+                      update[i] = node;
+                    } else {
+                      enter[i] = new EnterNode(parent, data[i]);
+                    }
+                  }
+
+                  // Put any non-null nodes that don’t fit into exit.
+                  for (; i < groupLength; ++i) {
+                    if (node = group[i]) {
+                      exit[i] = node;
+                    }
+                  }
+                }
+
+                function bindKey(parent, group, enter, update, exit, data, key) {
+                  var i,
+                      node,
+                      nodeByKeyValue = {},
+                      groupLength = group.length,
+                      dataLength = data.length,
+                      keyValues = new Array(groupLength),
+                      keyValue;
+
+                  // Compute the key for each node.
+                  // If multiple nodes have the same key, the duplicates are added to exit.
+                  for (i = 0; i < groupLength; ++i) {
+                    if (node = group[i]) {
+                      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
+                      if (keyValue in nodeByKeyValue) {
+                        exit[i] = node;
+                      } else {
+                        nodeByKeyValue[keyValue] = node;
+                      }
+                    }
+                  }
+
+                  // Compute the key for each datum.
+                  // If there a node associated with this key, join and add it to update.
+                  // If there is not (or the key is a duplicate), add it to enter.
+                  for (i = 0; i < dataLength; ++i) {
+                    keyValue = keyPrefix + key.call(parent, data[i], i, data);
+                    if (node = nodeByKeyValue[keyValue]) {
+                      update[i] = node;
+                      node.__data__ = data[i];
+                      nodeByKeyValue[keyValue] = null;
+                    } else {
+                      enter[i] = new EnterNode(parent, data[i]);
+                    }
+                  }
+
+                  // Add any remaining nodes that were not bound to data to exit.
+                  for (i = 0; i < groupLength; ++i) {
+                    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
+                      exit[i] = node;
+                    }
+                  }
+                }
+
+                var selection_data = function(value, key) {
+                  if (!value) {
+                    data = new Array(this.size()), j = -1;
+                    this.each(function(d) { data[++j] = d; });
+                    return data;
+                  }
+
+                  var bind = key ? bindKey : bindIndex,
+                      parents = this._parents,
+                      groups = this._groups;
+
+                  if (typeof value !== "function") value = constant$5(value);
+
+                  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
+                    var parent = parents[j],
+                        group = groups[j],
+                        groupLength = group.length,
+                        data = value.call(parent, parent && parent.__data__, j, parents),
+                        dataLength = data.length,
+                        enterGroup = enter[j] = new Array(dataLength),
+                        updateGroup = update[j] = new Array(dataLength),
+                        exitGroup = exit[j] = new Array(groupLength);
+
+                    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+                    // Now connect the enter nodes to their following update node, such that
+                    // appendChild can insert the materialized enter node before this node,
+                    // rather than at the end of the parent node.
+                    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+                      if (previous = enterGroup[i0]) {
+                        if (i0 >= i1) i1 = i0 + 1;
+                        while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+                        previous._next = next || null;
+                      }
+                    }
+                  }
+
+                  update = new Selection(update, parents);
+                  update._enter = enter;
+                  update._exit = exit;
+                  return update;
+                };
+
+                var selection_exit = function() {
+                  return new Selection(this._exit || this._groups.map(sparse), this._parents);
+                };
+
+                var selection_merge = function(selection) {
+
+                  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+                    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+                      if (node = group0[i] || group1[i]) {
+                        merge[i] = node;
+                      }
+                    }
+                  }
+
+                  for (; j < m0; ++j) {
+                    merges[j] = groups0[j];
+                  }
+
+                  return new Selection(merges, this._parents);
+                };
+
+                var selection_order = function() {
+
+                  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
+                    for (var group = groups[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;
+                };
+
+                var selection_sort = function(compare) {
+                  if (!compare) compare = ascending$2;
+
+                  function compareNode(a, b) {
+                    return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+                  }
+
+                  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
+                      if (node = group[i]) {
+                        sortgroup[i] = node;
+                      }
+                    }
+                    sortgroup.sort(compareNode);
+                  }
+
+                  return new Selection(sortgroups, this._parents).order();
+                };
+
+                function ascending$2(a, b) {
+                  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+                }
+
+                var selection_call = function() {
+                  var callback = arguments[0];
+                  arguments[0] = this;
+                  callback.apply(null, arguments);
+                  return this;
+                };
+
+                var selection_nodes = function() {
+                  var nodes = new Array(this.size()), i = -1;
+                  this.each(function() { nodes[++i] = this; });
+                  return nodes;
+                };
+
+                var selection_node = function() {
+
+                  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+                    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+                      var node = group[i];
+                      if (node) return node;
+                    }
+                  }
+
+                  return null;
+                };
+
+                var selection_size = function() {
+                  var size = 0;
+                  this.each(function() { ++size; });
+                  return size;
+                };
+
+                var selection_empty = function() {
+                  return !this.node();
+                };
+
+                var selection_each = function(callback) {
+
+                  for (var groups = this._groups, 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.call(node, node.__data__, i, group);
+                    }
+                  }
+
+                  return this;
+                };
+
+                function attrRemove(name) {
+                  return function() {
+                    this.removeAttribute(name);
+                  };
+                }
+
+                function attrRemoveNS(fullname) {
+                  return function() {
+                    this.removeAttributeNS(fullname.space, fullname.local);
+                  };
+                }
+
+                function attrConstant(name, value) {
+                  return function() {
+                    this.setAttribute(name, value);
+                  };
+                }
+
+                function attrConstantNS(fullname, value) {
+                  return function() {
+                    this.setAttributeNS(fullname.space, fullname.local, value);
+                  };
+                }
+
+                function attrFunction(name, value) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    if (v == null) this.removeAttribute(name);
+                    else this.setAttribute(name, v);
+                  };
+                }
+
+                function attrFunctionNS(fullname, value) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+                    else this.setAttributeNS(fullname.space, fullname.local, v);
+                  };
+                }
+
+                var selection_attr = function(name, value) {
+                  var fullname = namespace(name);
+
+                  if (arguments.length < 2) {
+                    var node = this.node();
+                    return fullname.local
+                        ? node.getAttributeNS(fullname.space, fullname.local)
+                        : node.getAttribute(fullname);
+                  }
+
+                  return this.each((value == null
+                      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
+                      ? (fullname.local ? attrFunctionNS : attrFunction)
+                      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
+                };
+
+                var window = function(node) {
+                  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
+                      || (node.document && node) // node is a Window
+                      || node.defaultView; // node is a Document
+                };
+
+                function styleRemove(name) {
+                  return function() {
+                    this.style.removeProperty(name);
+                  };
+                }
+
+                function styleConstant(name, value, priority) {
+                  return function() {
+                    this.style.setProperty(name, value, priority);
+                  };
+                }
+
+                function styleFunction(name, value, priority) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    if (v == null) this.style.removeProperty(name);
+                    else this.style.setProperty(name, v, priority);
+                  };
+                }
+
+                var selection_style = function(name, value, priority) {
+                  var node;
+                  return arguments.length > 1
+                      ? this.each((value == null
+                            ? styleRemove : typeof value === "function"
+                            ? styleFunction
+                            : styleConstant)(name, value, priority == null ? "" : priority))
+                      : window(node = this.node())
+                          .getComputedStyle(node, null)
+                          .getPropertyValue(name);
+                };
+
+                function propertyRemove(name) {
+                  return function() {
+                    delete this[name];
+                  };
+                }
+
+                function propertyConstant(name, value) {
+                  return function() {
+                    this[name] = value;
+                  };
+                }
+
+                function propertyFunction(name, value) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    if (v == null) delete this[name];
+                    else this[name] = v;
+                  };
+                }
+
+                var selection_property = function(name, value) {
+                  return arguments.length > 1
+                      ? this.each((value == null
+                          ? propertyRemove : typeof value === "function"
+                          ? propertyFunction
+                          : propertyConstant)(name, value))
+                      : this.node()[name];
+                };
+
+                function classArray(string) {
+                  return string.trim().split(/^|\s+/);
+                }
+
+                function classList(node) {
+                  return node.classList || new ClassList(node);
+                }
+
+                function ClassList(node) {
+                  this._node = node;
+                  this._names = classArray(node.getAttribute("class") || "");
+                }
+
+                ClassList.prototype = {
+                  add: function(name) {
+                    var i = this._names.indexOf(name);
+                    if (i < 0) {
+                      this._names.push(name);
+                      this._node.setAttribute("class", this._names.join(" "));
+                    }
+                  },
+                  remove: function(name) {
+                    var i = this._names.indexOf(name);
+                    if (i >= 0) {
+                      this._names.splice(i, 1);
+                      this._node.setAttribute("class", this._names.join(" "));
+                    }
+                  },
+                  contains: function(name) {
+                    return this._names.indexOf(name) >= 0;
+                  }
+                };
+
+                function classedAdd(node, names) {
+                  var list = classList(node), i = -1, n = names.length;
+                  while (++i < n) list.add(names[i]);
+                }
+
+                function classedRemove(node, names) {
+                  var list = classList(node), i = -1, n = names.length;
+                  while (++i < n) list.remove(names[i]);
+                }
+
+                function classedTrue(names) {
+                  return function() {
+                    classedAdd(this, names);
+                  };
+                }
+
+                function classedFalse(names) {
+                  return function() {
+                    classedRemove(this, names);
+                  };
+                }
+
+                function classedFunction(names, value) {
+                  return function() {
+                    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+                  };
+                }
+
+                var selection_classed = function(name, value) {
+                  var names = classArray(name + "");
+
+                  if (arguments.length < 2) {
+                    var list = classList(this.node()), i = -1, n = names.length;
+                    while (++i < n) if (!list.contains(names[i])) return false;
+                    return true;
+                  }
+
+                  return this.each((typeof value === "function"
+                      ? classedFunction : value
+                      ? classedTrue
+                      : classedFalse)(names, value));
+                };
+
+                function textRemove() {
+                  this.textContent = "";
+                }
+
+                function textConstant(value) {
+                  return function() {
+                    this.textContent = value;
+                  };
+                }
+
+                function textFunction(value) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    this.textContent = v == null ? "" : v;
+                  };
+                }
+
+                var selection_text = function(value) {
+                  return arguments.length
+                      ? this.each(value == null
+                          ? textRemove : (typeof value === "function"
+                          ? textFunction
+                          : textConstant)(value))
+                      : this.node().textContent;
+                };
+
+                function htmlRemove() {
+                  this.innerHTML = "";
+                }
+
+                function htmlConstant(value) {
+                  return function() {
+                    this.innerHTML = value;
+                  };
+                }
+
+                function htmlFunction(value) {
+                  return function() {
+                    var v = value.apply(this, arguments);
+                    this.innerHTML = v == null ? "" : v;
+                  };
+                }
+
+                var selection_html = function(value) {
+                  return arguments.length
+                      ? this.each(value == null
+                          ? htmlRemove : (typeof value === "function"
+                          ? htmlFunction
+                          : htmlConstant)(value))
+                      : this.node().innerHTML;
+                };
+
+                function raise$1() {
+                  if (this.nextSibling) this.parentNode.appendChild(this);
+                }
+
+                var selection_raise = function() {
+                  return this.each(raise$1);
+                };
+
+                function lower() {
+                  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+                }
+
+                var selection_lower = function() {
+                  return this.each(lower);
+                };
+
+                var selection_append = function(name) {
+                  var create = typeof name === "function" ? name : creator(name);
+                  return this.select(function() {
+                    return this.appendChild(create.apply(this, arguments));
+                  });
+                };
+
+                function constantNull() {
+                  return null;
+                }
+
+                var selection_insert = function(name, before) {
+                  var create = typeof name === "function" ? name : creator(name),
+                      select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
+                  return this.select(function() {
+                    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
+                  });
+                };
+
+                function remove() {
+                  var parent = this.parentNode;
+                  if (parent) parent.removeChild(this);
+                }
+
+                var selection_remove = function() {
+                  return this.each(remove);
+                };
+
+                var selection_datum = function(value) {
+                  return arguments.length
+                      ? this.property("__data__", value)
+                      : this.node().__data__;
+                };
+
+                function dispatchEvent(node, type, params) {
+                  var window$$1 = window(node),
+                      event = window$$1.CustomEvent;
+
+                  if (event) {
+                    event = new event(type, params);
+                  } else {
+                    event = window$$1.document.createEvent("Event");
+                    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
+                    else event.initEvent(type, false, false);
+                  }
+
+                  node.dispatchEvent(event);
+                }
+
+                function dispatchConstant(type, params) {
+                  return function() {
+                    return dispatchEvent(this, type, params);
+                  };
+                }
+
+                function dispatchFunction(type, params) {
+                  return function() {
+                    return dispatchEvent(this, type, params.apply(this, arguments));
+                  };
+                }
+
+                var selection_dispatch = function(type, params) {
+                  return this.each((typeof params === "function"
+                      ? dispatchFunction
+                      : dispatchConstant)(type, params));
+                };
+
+                var root = [null];
+
+                function Selection(groups, parents) {
+                  this._groups = groups;
+                  this._parents = parents;
+                }
+
+                function selection() {
+                  return new Selection([[document.documentElement]], root);
+                }
+
+                Selection.prototype = selection.prototype = {
+                  constructor: Selection,
+                  select: selection_select,
+                  selectAll: selection_selectAll,
+                  filter: selection_filter,
+                  data: selection_data,
+                  enter: selection_enter,
+                  exit: selection_exit,
+                  merge: selection_merge,
+                  order: selection_order,
+                  sort: selection_sort,
+                  call: selection_call,
+                  nodes: selection_nodes,
+                  node: selection_node,
+                  size: selection_size,
+                  empty: selection_empty,
+                  each: selection_each,
+                  attr: selection_attr,
+                  style: selection_style,
+                  property: selection_property,
+                  classed: selection_classed,
+                  text: selection_text,
+                  html: selection_html,
+                  raise: selection_raise,
+                  lower: selection_lower,
+                  append: selection_append,
+                  insert: selection_insert,
+                  remove: selection_remove,
+                  datum: selection_datum,
+                  on: selection_on,
+                  dispatch: selection_dispatch
+                };
+
+                var select = function(selector) {
+                  return typeof selector === "string"
+                      ? new Selection([[document.querySelector(selector)]], [document.documentElement])
+                      : new Selection([[selector]], root);
+                };
+
+                var selectAll = function(selector) {
+                  return typeof selector === "string"
+                      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
+                      : new Selection([selector == null ? [] : selector], root);
+                };
+
+                var touch = function(node, touches, identifier) {
+                  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
+
+                  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
+                    if ((touch = touches[i]).identifier === identifier) {
+                      return point$5(node, touch);
+                    }
+                  }
+
+                  return null;
+                };
+
+                var touches = function(node, touches) {
+                  if (touches == null) touches = sourceEvent().touches;
+
+                  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
+                    points[i] = point$5(node, touches[i]);
+                  }
+
+                  return points;
+                };
+
+                var emptyOn = dispatch("start", "end", "interrupt");
+                var emptyTween = [];
+
+                var CREATED = 0;
+                var SCHEDULED = 1;
+                var STARTING = 2;
+                var STARTED = 3;
+                var RUNNING = 4;
+                var ENDING = 5;
+                var ENDED = 6;
+
+                var schedule = function(node, name, id, index, group, timing) {
+                  var schedules = node.__transition;
+                  if (!schedules) node.__transition = {};
+                  else if (id in schedules) return;
+                  create(node, id, {
+                    name: name,
+                    index: index, // For context during callback.
+                    group: group, // For context during callback.
+                    on: emptyOn,
+                    tween: emptyTween,
+                    time: timing.time,
+                    delay: timing.delay,
+                    duration: timing.duration,
+                    ease: timing.ease,
+                    timer: null,
+                    state: CREATED
+                  });
+                };
+
+                function init(node, id) {
+                  var schedule = node.__transition;
+                  if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
+                  return schedule;
+                }
+
+                function set$3(node, id) {
+                  var schedule = node.__transition;
+                  if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
+                  return schedule;
+                }
+
+                function get$1(node, id) {
+                  var schedule = node.__transition;
+                  if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
+                  return schedule;
+                }
+
+                function create(node, id, self) {
+                  var schedules = node.__transition,
+                      tween;
+
+                  // Initialize the self timer when the transition is created.
+                  // Note the actual delay is not known until the first callback!
+                  schedules[id] = self;
+                  self.timer = timer(schedule, 0, self.time);
+
+                  function schedule(elapsed) {
+                    self.state = SCHEDULED;
+                    self.timer.restart(start, self.delay, self.time);
+
+                    // If the elapsed delay is less than our first sleep, start immediately.
+                    if (self.delay <= elapsed) start(elapsed - self.delay);
+                  }
+
+                  function start(elapsed) {
+                    var i, j, n, o;
+
+                    // If the state is not SCHEDULED, then we previously errored on start.
+                    if (self.state !== SCHEDULED) return stop();
+
+                    for (i in schedules) {
+                      o = schedules[i];
+                      if (o.name !== self.name) continue;
+
+                      // While this element already has a starting transition during this frame,
+                      // defer starting an interrupting transition until that transition has a
+                      // chance to tick (and possibly end); see d3/d3-transition#54!
+                      if (o.state === STARTED) return timeout$1(start);
+
+                      // Interrupt the active transition, if any.
+                      // Dispatch the interrupt event.
+                      if (o.state === RUNNING) {
+                        o.state = ENDED;
+                        o.timer.stop();
+                        o.on.call("interrupt", node, node.__data__, o.index, o.group);
+                        delete schedules[i];
+                      }
+
+                      // Cancel any pre-empted transitions. No interrupt event is dispatched
+                      // because the cancelled transitions never started. Note that this also
+                      // removes this transition from the pending list!
+                      else if (+i < id) {
+                        o.state = ENDED;
+                        o.timer.stop();
+                        delete schedules[i];
+                      }
+                    }
+
+                    // Defer the first tick to end of the current frame; see d3/d3#1576.
+                    // Note the transition may be canceled after start and before the first tick!
+                    // Note this must be scheduled before the start event; see d3/d3-transition#16!
+                    // Assuming this is successful, subsequent callbacks go straight to tick.
+                    timeout$1(function() {
+                      if (self.state === STARTED) {
+                        self.state = RUNNING;
+                        self.timer.restart(tick, self.delay, self.time);
+                        tick(elapsed);
+                      }
+                    });
+
+                    // Dispatch the start event.
+                    // Note this must be done before the tween are initialized.
+                    self.state = STARTING;
+                    self.on.call("start", node, node.__data__, self.index, self.group);
+                    if (self.state !== STARTING) return; // interrupted
+                    self.state = STARTED;
+
+                    // Initialize the tween, deleting null tween.
+                    tween = new Array(n = self.tween.length);
+                    for (i = 0, j = -1; i < n; ++i) {
+                      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
+                        tween[++j] = o;
+                      }
+                    }
+                    tween.length = j + 1;
+                  }
+
+                  function tick(elapsed) {
+                    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
+                        i = -1,
+                        n = tween.length;
+
+                    while (++i < n) {
+                      tween[i].call(null, t);
+                    }
+
+                    // Dispatch the end event.
+                    if (self.state === ENDING) {
+                      self.on.call("end", node, node.__data__, self.index, self.group);
+                      stop();
+                    }
+                  }
+
+                  function stop() {
+                    self.state = ENDED;
+                    self.timer.stop();
+                    delete schedules[id];
+                    for (var i in schedules) return; // eslint-disable-line no-unused-vars
+                    delete node.__transition;
+                  }
+                }
+
+                var interrupt = function(node, name) {
+                  var schedules = node.__transition,
+                      schedule,
+                      active,
+                      empty = true,
+                      i;
+
+                  if (!schedules) return;
+
+                  name = name == null ? null : name + "";
+
+                  for (i in schedules) {
+                    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
+                    active = schedule.state > STARTING && schedule.state < ENDING;
+                    schedule.state = ENDED;
+                    schedule.timer.stop();
+                    if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
+                    delete schedules[i];
+                  }
+
+                  if (empty) delete node.__transition;
+                };
+
+                var selection_interrupt = function(name) {
+                  return this.each(function() {
+                    interrupt(this, name);
+                  });
+                };
+
+                function tweenRemove(id, name) {
+                  var tween0, tween1;
+                  return function() {
+                    var schedule = set$3(this, id),
+                        tween = schedule.tween;
+
+                    // If this node shared tween with the previous node,
+                    // just assign the updated shared tween and we’re done!
+                    // Otherwise, copy-on-write.
+                    if (tween !== tween0) {
+                      tween1 = tween0 = tween;
+                      for (var i = 0, n = tween1.length; i < n; ++i) {
+                        if (tween1[i].name === name) {
+                          tween1 = tween1.slice();
+                          tween1.splice(i, 1);
+                          break;
+                        }
+                      }
+                    }
+
+                    schedule.tween = tween1;
+                  };
+                }
+
+                function tweenFunction(id, name, value) {
+                  var tween0, tween1;
+                  if (typeof value !== "function") throw new Error;
+                  return function() {
+                    var schedule = set$3(this, id),
+                        tween = schedule.tween;
+
+                    // If this node shared tween with the previous node,
+                    // just assign the updated shared tween and we’re done!
+                    // Otherwise, copy-on-write.
+                    if (tween !== tween0) {
+                      tween1 = (tween0 = tween).slice();
+                      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
+                        if (tween1[i].name === name) {
+                          tween1[i] = t;
+                          break;
+                        }
+                      }
+                      if (i === n) tween1.push(t);
+                    }
+
+                    schedule.tween = tween1;
+                  };
+                }
+
+                var transition_tween = function(name, value) {
+                  var id = this._id;
+
+                  name += "";
+
+                  if (arguments.length < 2) {
+                    var tween = get$1(this.node(), id).tween;
+                    for (var i = 0, n = tween.length, t; i < n; ++i) {
+                      if ((t = tween[i]).name === name) {
+                        return t.value;
+                      }
+                    }
+                    return null;
+                  }
+
+                  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
+                };
+
+                function tweenValue(transition, name, value) {
+                  var id = transition._id;
+
+                  transition.each(function() {
+                    var schedule = set$3(this, id);
+                    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+                  });
+
+                  return function(node) {
+                    return get$1(node, id).value[name];
+                  };
+                }
+
+                var interpolate$1 = function(a, b) {
+                  var c;
+                  return (typeof b === "number" ? interpolateNumber
+                      : b instanceof color ? interpolateRgb
+                      : (c = color(b)) ? (b = c, interpolateRgb)
+                      : interpolateString)(a, b);
+                };
+
+                function attrRemove$1(name) {
+                  return function() {
+                    this.removeAttribute(name);
+                  };
+                }
+
+                function attrRemoveNS$1(fullname) {
+                  return function() {
+                    this.removeAttributeNS(fullname.space, fullname.local);
+                  };
+                }
+
+                function attrConstant$1(name, interpolate$$1, value1) {
+                  var value00,
+                      interpolate0;
+                  return function() {
+                    var value0 = this.getAttribute(name);
+                    return value0 === value1 ? null
+                        : value0 === value00 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value1);
+                  };
+                }
+
+                function attrConstantNS$1(fullname, interpolate$$1, value1) {
+                  var value00,
+                      interpolate0;
+                  return function() {
+                    var value0 = this.getAttributeNS(fullname.space, fullname.local);
+                    return value0 === value1 ? null
+                        : value0 === value00 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value1);
+                  };
+                }
+
+                function attrFunction$1(name, interpolate$$1, value) {
+                  var value00,
+                      value10,
+                      interpolate0;
+                  return function() {
+                    var value0, value1 = value(this);
+                    if (value1 == null) return void this.removeAttribute(name);
+                    value0 = this.getAttribute(name);
+                    return value0 === value1 ? null
+                        : value0 === value00 && value1 === value10 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+                  };
+                }
+
+                function attrFunctionNS$1(fullname, interpolate$$1, value) {
+                  var value00,
+                      value10,
+                      interpolate0;
+                  return function() {
+                    var value0, value1 = value(this);
+                    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
+                    value0 = this.getAttributeNS(fullname.space, fullname.local);
+                    return value0 === value1 ? null
+                        : value0 === value00 && value1 === value10 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+                  };
+                }
+
+                var transition_attr = function(name, value) {
+                  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1;
+                  return this.attrTween(name, typeof value === "function"
+                      ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
+                      : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
+                      : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
+                };
+
+                function attrTweenNS(fullname, value) {
+                  function tween() {
+                    var node = this, i = value.apply(node, arguments);
+                    return i && function(t) {
+                      node.setAttributeNS(fullname.space, fullname.local, i(t));
+                    };
+                  }
+                  tween._value = value;
+                  return tween;
+                }
+
+                function attrTween(name, value) {
+                  function tween() {
+                    var node = this, i = value.apply(node, arguments);
+                    return i && function(t) {
+                      node.setAttribute(name, i(t));
+                    };
+                  }
+                  tween._value = value;
+                  return tween;
+                }
+
+                var transition_attrTween = function(name, value) {
+                  var key = "attr." + name;
+                  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+                  if (value == null) return this.tween(key, null);
+                  if (typeof value !== "function") throw new Error;
+                  var fullname = namespace(name);
+                  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+                };
+
+                function delayFunction(id, value) {
+                  return function() {
+                    init(this, id).delay = +value.apply(this, arguments);
+                  };
+                }
+
+                function delayConstant(id, value) {
+                  return value = +value, function() {
+                    init(this, id).delay = value;
+                  };
+                }
+
+                var transition_delay = function(value) {
+                  var id = this._id;
+
+                  return arguments.length
+                      ? this.each((typeof value === "function"
+                          ? delayFunction
+                          : delayConstant)(id, value))
+                      : get$1(this.node(), id).delay;
+                };
+
+                function durationFunction(id, value) {
+                  return function() {
+                    set$3(this, id).duration = +value.apply(this, arguments);
+                  };
+                }
+
+                function durationConstant(id, value) {
+                  return value = +value, function() {
+                    set$3(this, id).duration = value;
+                  };
+                }
+
+                var transition_duration = function(value) {
+                  var id = this._id;
+
+                  return arguments.length
+                      ? this.each((typeof value === "function"
+                          ? durationFunction
+                          : durationConstant)(id, value))
+                      : get$1(this.node(), id).duration;
+                };
+
+                function easeConstant(id, value) {
+                  if (typeof value !== "function") throw new Error;
+                  return function() {
+                    set$3(this, id).ease = value;
+                  };
+                }
+
+                var transition_ease = function(value) {
+                  var id = this._id;
+
+                  return arguments.length
+                      ? this.each(easeConstant(id, value))
+                      : get$1(this.node(), id).ease;
+                };
+
+                var transition_filter = function(match) {
+                  if (typeof match !== "function") match = matcher$1(match);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+                      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+                        subgroup.push(node);
+                      }
+                    }
+                  }
+
+                  return new Transition(subgroups, this._parents, this._name, this._id);
+                };
+
+                var transition_merge = function(transition) {
+                  if (transition._id !== this._id) throw new Error;
+
+                  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+                    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+                      if (node = group0[i] || group1[i]) {
+                        merge[i] = node;
+                      }
+                    }
+                  }
+
+                  for (; j < m0; ++j) {
+                    merges[j] = groups0[j];
+                  }
+
+                  return new Transition(merges, this._parents, this._name, this._id);
+                };
+
+                function start$1(name) {
+                  return (name + "").trim().split(/^|\s+/).every(function(t) {
+                    var i = t.indexOf(".");
+                    if (i >= 0) t = t.slice(0, i);
+                    return !t || t === "start";
+                  });
+                }
+
+                function onFunction(id, name, listener) {
+                  var on0, on1, sit = start$1(name) ? init : set$3;
+                  return function() {
+                    var schedule = sit(this, id),
+                        on = schedule.on;
+
+                    // If this node shared a dispatch with the previous node,
+                    // just assign the updated shared dispatch and we’re done!
+                    // Otherwise, copy-on-write.
+                    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+
+                    schedule.on = on1;
+                  };
+                }
+
+                var transition_on = function(name, listener) {
+                  var id = this._id;
+
+                  return arguments.length < 2
+                      ? get$1(this.node(), id).on.on(name)
+                      : this.each(onFunction(id, name, listener));
+                };
+
+                function removeFunction(id) {
+                  return function() {
+                    var parent = this.parentNode;
+                    for (var i in this.__transition) if (+i !== id) return;
+                    if (parent) parent.removeChild(this);
+                  };
+                }
+
+                var transition_remove = function() {
+                  return this.on("end.remove", removeFunction(this._id));
+                };
+
+                var transition_select = function(select$$1) {
+                  var name = this._name,
+                      id = this._id;
+
+                  if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+                      if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
+                        if ("__data__" in node) subnode.__data__ = node.__data__;
+                        subgroup[i] = subnode;
+                        schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
+                      }
+                    }
+                  }
+
+                  return new Transition(subgroups, this._parents, name, id);
+                };
+
+                var transition_selectAll = function(select$$1) {
+                  var name = this._name,
+                      id = this._id;
+
+                  if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
+
+                  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+                      if (node = group[i]) {
+                        for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
+                          if (child = children[k]) {
+                            schedule(child, name, id, k, children, inherit);
+                          }
+                        }
+                        subgroups.push(children);
+                        parents.push(node);
+                      }
+                    }
+                  }
+
+                  return new Transition(subgroups, parents, name, id);
+                };
+
+                var Selection$1 = selection.prototype.constructor;
+
+                var transition_selection = function() {
+                  return new Selection$1(this._groups, this._parents);
+                };
+
+                function styleRemove$1(name, interpolate$$1) {
+                  var value00,
+                      value10,
+                      interpolate0;
+                  return function() {
+                    var style = window(this).getComputedStyle(this, null),
+                        value0 = style.getPropertyValue(name),
+                        value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+                    return value0 === value1 ? null
+                        : value0 === value00 && value1 === value10 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+                  };
+                }
+
+                function styleRemoveEnd(name) {
+                  return function() {
+                    this.style.removeProperty(name);
+                  };
+                }
+
+                function styleConstant$1(name, interpolate$$1, value1) {
+                  var value00,
+                      interpolate0;
+                  return function() {
+                    var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);
+                    return value0 === value1 ? null
+                        : value0 === value00 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value1);
+                  };
+                }
+
+                function styleFunction$1(name, interpolate$$1, value) {
+                  var value00,
+                      value10,
+                      interpolate0;
+                  return function() {
+                    var style = window(this).getComputedStyle(this, null),
+                        value0 = style.getPropertyValue(name),
+                        value1 = value(this);
+                    if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+                    return value0 === value1 ? null
+                        : value0 === value00 && value1 === value10 ? interpolate0
+                        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+                  };
+                }
+
+                var transition_style = function(name, value, priority) {
+                  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1;
+                  return value == null ? this
+                          .styleTween(name, styleRemove$1(name, i))
+                          .on("end.style." + name, styleRemoveEnd(name))
+                      : this.styleTween(name, typeof value === "function"
+                          ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
+                          : styleConstant$1(name, i, value), priority);
+                };
+
+                function styleTween(name, value, priority) {
+                  function tween() {
+                    var node = this, i = value.apply(node, arguments);
+                    return i && function(t) {
+                      node.style.setProperty(name, i(t), priority);
+                    };
+                  }
+                  tween._value = value;
+                  return tween;
+                }
+
+                var transition_styleTween = function(name, value, priority) {
+                  var key = "style." + (name += "");
+                  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+                  if (value == null) return this.tween(key, null);
+                  if (typeof value !== "function") throw new Error;
+                  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+                };
+
+                function textConstant$1(value) {
+                  return function() {
+                    this.textContent = value;
+                  };
+                }
+
+                function textFunction$1(value) {
+                  return function() {
+                    var value1 = value(this);
+                    this.textContent = value1 == null ? "" : value1;
+                  };
+                }
+
+                var transition_text = function(value) {
+                  return this.tween("text", typeof value === "function"
+                      ? textFunction$1(tweenValue(this, "text", value))
+                      : textConstant$1(value == null ? "" : value + ""));
+                };
+
+                var transition_transition = function() {
+                  var name = this._name,
+                      id0 = this._id,
+                      id1 = newId();
+
+                  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+                      if (node = group[i]) {
+                        var inherit = get$1(node, id0);
+                        schedule(node, name, id1, i, group, {
+                          time: inherit.time + inherit.delay + inherit.duration,
+                          delay: 0,
+                          duration: inherit.duration,
+                          ease: inherit.ease
+                        });
+                      }
+                    }
+                  }
+
+                  return new Transition(groups, this._parents, name, id1);
+                };
+
+                var id = 0;
+
+                function Transition(groups, parents, name, id) {
+                  this._groups = groups;
+                  this._parents = parents;
+                  this._name = name;
+                  this._id = id;
+                }
+
+                function transition(name) {
+                  return selection().transition(name);
+                }
+
+                function newId() {
+                  return ++id;
+                }
+
+                var selection_prototype = selection.prototype;
+
+                Transition.prototype = transition.prototype = {
+                  constructor: Transition,
+                  select: transition_select,
+                  selectAll: transition_selectAll,
+                  filter: transition_filter,
+                  merge: transition_merge,
+                  selection: transition_selection,
+                  transition: transition_transition,
+                  call: selection_prototype.call,
+                  nodes: selection_prototype.nodes,
+                  node: selection_prototype.node,
+                  size: selection_prototype.size,
+                  empty: selection_prototype.empty,
+                  each: selection_prototype.each,
+                  on: transition_on,
+                  attr: transition_attr,
+                  attrTween: transition_attrTween,
+                  style: transition_style,
+                  styleTween: transition_styleTween,
+                  text: transition_text,
+                  remove: transition_remove,
+                  tween: transition_tween,
+                  delay: transition_delay,
+                  duration: transition_duration,
+                  ease: transition_ease
+                };
+
+                var defaultTiming = {
+                  time: null, // Set on use.
+                  delay: 0,
+                  duration: 250,
+                  ease: cubicInOut
+                };
+
+                function inherit(node, id) {
+                  var timing;
+                  while (!(timing = node.__transition) || !(timing = timing[id])) {
+                    if (!(node = node.parentNode)) {
+                      return defaultTiming.time = now(), defaultTiming;
+                    }
+                  }
+                  return timing;
+                }
+
+                var selection_transition = function(name) {
+                  var id,
+                      timing;
+
+                  if (name instanceof Transition) {
+                    id = name._id, name = name._name;
+                  } else {
+                    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
+                  }
+
+                  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+                    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+                      if (node = group[i]) {
+                        schedule(node, name, id, i, group, timing || inherit(node, id));
+                      }
+                    }
+                  }
+
+                  return new Transition(groups, this._parents, name, id);
+                };
+
+                selection.prototype.interrupt = selection_interrupt;
+                selection.prototype.transition = selection_transition;
+
+                var root$1 = [null];
+
+                var active = function(node, name) {
+                  var schedules = node.__transition,
+                      schedule,
+                      i;
+
+                  if (schedules) {
+                    name = name == null ? null : name + "";
+                    for (i in schedules) {
+                      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
+                        return new Transition([[node]], root$1, name, +i);
+                      }
+                    }
+                  }
+
+                  return null;
+                };
+
+                var slice$4 = Array.prototype.slice;
+
+                var identity$5 = function(x) {
+                  return x;
+                };
+
+                var top = 1;
+                var right = 2;
+                var bottom = 3;
+                var left = 4;
+                var epsilon$2 = 1e-6;
+
+                function translateX(scale0, scale1, d) {
+                  var x = scale0(d);
+                  return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
+                }
+
+                function translateY(scale0, scale1, d) {
+                  var y = scale0(d);
+                  return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
+                }
+
+                function center(scale) {
+                  var offset = scale.bandwidth() / 2;
+                  if (scale.round()) offset = Math.round(offset);
+                  return function(d) {
+                    return scale(d) + offset;
+                  };
+                }
+
+                function entering() {
+                  return !this.__axis;
+                }
+
+                function axis(orient, scale) {
+                  var tickArguments = [],
+                      tickValues = null,
+                      tickFormat = null,
+                      tickSizeInner = 6,
+                      tickSizeOuter = 6,
+                      tickPadding = 3;
+
+                  function axis(context) {
+                    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
+                        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,
+                        spacing = Math.max(tickSizeInner, 0) + tickPadding,
+                        transform = orient === top || orient === bottom ? translateX : translateY,
+                        range = scale.range(),
+                        range0 = range[0] + 0.5,
+                        range1 = range[range.length - 1] + 0.5,
+                        position = (scale.bandwidth ? center : identity$5)(scale.copy()),
+                        selection = context.selection ? context.selection() : context,
+                        path = selection.selectAll(".domain").data([null]),
+                        tick = selection.selectAll(".tick").data(values, scale).order(),
+                        tickExit = tick.exit(),
+                        tickEnter = tick.enter().append("g").attr("class", "tick"),
+                        line = tick.select("line"),
+                        text = tick.select("text"),
+                        k = orient === top || orient === left ? -1 : 1,
+                        x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
+
+                    path = path.merge(path.enter().insert("path", ".tick")
+                        .attr("class", "domain")
+                        .attr("stroke", "#000"));
+
+                    tick = tick.merge(tickEnter);
+
+                    line = line.merge(tickEnter.append("line")
+                        .attr("stroke", "#000")
+                        .attr(x + "2", k * tickSizeInner)
+                        .attr(y + "1", 0.5)
+                        .attr(y + "2", 0.5));
+
+                    text = text.merge(tickEnter.append("text")
+                        .attr("fill", "#000")
+                        .attr(x, k * spacing)
+                        .attr(y, 0.5)
+                        .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
+
+                    if (context !== selection) {
+                      path = path.transition(context);
+                      tick = tick.transition(context);
+                      line = line.transition(context);
+                      text = text.transition(context);
+
+                      tickExit = tickExit.transition(context)
+                          .attr("opacity", epsilon$2)
+                          .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
+
+                      tickEnter
+                          .attr("opacity", epsilon$2)
+                          .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
+                    }
+
+                    tickExit.remove();
+
+                    path
+                        .attr("d", orient === left || orient == right
+                            ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
+                            : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
+
+                    tick
+                        .attr("opacity", 1)
+                        .attr("transform", function(d) { return transform(position, position, d); });
+
+                    line
+                        .attr(x + "2", k * tickSizeInner);
+
+                    text
+                        .attr(x, k * spacing)
+                        .text(format);
+
+                    selection.filter(entering)
+                        .attr("fill", "none")
+                        .attr("font-size", 10)
+                        .attr("font-family", "sans-serif")
+                        .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
+
+                    selection
+                        .each(function() { this.__axis = position; });
+                  }
+
+                  axis.scale = function(_) {
+                    return arguments.length ? (scale = _, axis) : scale;
+                  };
+
+                  axis.ticks = function() {
+                    return tickArguments = slice$4.call(arguments), axis;
+                  };
+
+                  axis.tickArguments = function(_) {
+                    return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();
+                  };
+
+                  axis.tickValues = function(_) {
+                    return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();
+                  };
+
+                  axis.tickFormat = function(_) {
+                    return arguments.length ? (tickFormat = _, axis) : tickFormat;
+                  };
+
+                  axis.tickSize = function(_) {
+                    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
+                  };
+
+                  axis.tickSizeInner = function(_) {
+                    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
+                  };
+
+                  axis.tickSizeOuter = function(_) {
+                    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
+                  };
+
+                  axis.tickPadding = function(_) {
+                    return arguments.length ? (tickPadding = +_, axis) : tickPadding;
+                  };
+
+                  return axis;
+                }
+
+                function axisTop(scale) {
+                  return axis(top, scale);
+                }
+
+                function axisRight(scale) {
+                  return axis(right, scale);
+                }
+
+                function axisBottom(scale) {
+                  return axis(bottom, scale);
+                }
+
+                function axisLeft(scale) {
+                  return axis(left, scale);
+                }
+
+                function defaultSeparation(a, b) {
+                  return a.parent === b.parent ? 1 : 2;
+                }
+
+                function meanX(children) {
+                  return children.reduce(meanXReduce, 0) / children.length;
+                }
+
+                function meanXReduce(x, c) {
+                  return x + c.x;
+                }
+
+                function maxY(children) {
+                  return 1 + children.reduce(maxYReduce, 0);
+                }
+
+                function maxYReduce(y, c) {
+                  return Math.max(y, c.y);
+                }
+
+                function leafLeft(node) {
+                  var children;
+                  while (children = node.children) node = children[0];
+                  return node;
+                }
+
+                function leafRight(node) {
+                  var children;
+                  while (children = node.children) node = children[children.length - 1];
+                  return node;
+                }
+
+                var cluster = function() {
+                  var separation = defaultSeparation,
+                      dx = 1,
+                      dy = 1,
+                      nodeSize = false;
+
+                  function cluster(root) {
+                    var previousNode,
+                        x = 0;
+
+                    // First walk, computing the initial x & y values.
+                    root.eachAfter(function(node) {
+                      var children = node.children;
+                      if (children) {
+                        node.x = meanX(children);
+                        node.y = maxY(children);
+                      } else {
+                        node.x = previousNode ? x += separation(node, previousNode) : 0;
+                        node.y = 0;
+                        previousNode = node;
+                      }
+                    });
+
+                    var left = leafLeft(root),
+                        right = leafRight(root),
+                        x0 = left.x - separation(left, right) / 2,
+                        x1 = right.x + separation(right, left) / 2;
+
+                    // Second walk, normalizing x & y to the desired size.
+                    return root.eachAfter(nodeSize ? function(node) {
+                      node.x = (node.x - root.x) * dx;
+                      node.y = (root.y - node.y) * dy;
+                    } : function(node) {
+                      node.x = (node.x - x0) / (x1 - x0) * dx;
+                      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
+                    });
+                  }
+
+                  cluster.separation = function(x) {
+                    return arguments.length ? (separation = x, cluster) : separation;
+                  };
+
+                  cluster.size = function(x) {
+                    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
+                  };
+
+                  cluster.nodeSize = function(x) {
+                    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
+                  };
+
+                  return cluster;
+                };
+
+                var node_each = function(callback) {
+                  var node = this, current, next = [node], children, i, n;
+                  do {
+                    current = next.reverse(), next = [];
+                    while (node = current.pop()) {
+                      callback(node), children = node.children;
+                      if (children) for (i = 0, n = children.length; i < n; ++i) {
+                        next.push(children[i]);
+                      }
+                    }
+                  } while (next.length);
+                  return this;
+                };
+
+                var node_eachBefore = function(callback) {
+                  var node = this, nodes = [node], children, i;
+                  while (node = nodes.pop()) {
+                    callback(node), children = node.children;
+                    if (children) for (i = children.length - 1; i >= 0; --i) {
+                      nodes.push(children[i]);
+                    }
+                  }
+                  return this;
+                };
+
+                var node_eachAfter = function(callback) {
+                  var node = this, nodes = [node], next = [], children, i, n;
+                  while (node = nodes.pop()) {
+                    next.push(node), children = node.children;
+                    if (children) for (i = 0, n = children.length; i < n; ++i) {
+                      nodes.push(children[i]);
+                    }
+                  }
+                  while (node = next.pop()) {
+                    callback(node);
+                  }
+                  return this;
+                };
+
+                var node_sum = function(value) {
+                  return this.eachAfter(function(node) {
+                    var sum = +value(node.data) || 0,
+                        children = node.children,
+                        i = children && children.length;
+                    while (--i >= 0) sum += children[i].value;
+                    node.value = sum;
+                  });
+                };
+
+                var node_sort = function(compare) {
+                  return this.eachBefore(function(node) {
+                    if (node.children) {
+                      node.children.sort(compare);
+                    }
+                  });
+                };
+
+                var node_path = function(end) {
+                  var start = this,
+                      ancestor = leastCommonAncestor(start, end),
+                      nodes = [start];
+                  while (start !== ancestor) {
+                    start = start.parent;
+                    nodes.push(start);
+                  }
+                  var k = nodes.length;
+                  while (end !== ancestor) {
+                    nodes.splice(k, 0, end);
+                    end = end.parent;
+                  }
+                  return nodes;
+                };
+
+                function leastCommonAncestor(a, b) {
+                  if (a === b) return a;
+                  var aNodes = a.ancestors(),
+                      bNodes = b.ancestors(),
+                      c = null;
+                  a = aNodes.pop();
+                  b = bNodes.pop();
+                  while (a === b) {
+                    c = a;
+                    a = aNodes.pop();
+                    b = bNodes.pop();
+                  }
+                  return c;
+                }
+
+                var node_ancestors = function() {
+                  var node = this, nodes = [node];
+                  while (node = node.parent) {
+                    nodes.push(node);
+                  }
+                  return nodes;
+                };
+
+                var node_descendants = function() {
+                  var nodes = [];
+                  this.each(function(node) {
+                    nodes.push(node);
+                  });
+                  return nodes;
+                };
+
+                var node_leaves = function() {
+                  var leaves = [];
+                  this.eachBefore(function(node) {
+                    if (!node.children) {
+                      leaves.push(node);
+                    }
+                  });
+                  return leaves;
+                };
+
+                var node_links = function() {
+                  var root = this, links = [];
+                  root.each(function(node) {
+                    if (node !== root) { // Don’t include the root’s parent, if any.
+                      links.push({source: node.parent, target: node});
+                    }
+                  });
+                  return links;
+                };
+
+                function hierarchy(data, children) {
+                  var root = new Node(data),
+                      valued = +data.value && (root.value = data.value),
+                      node,
+                      nodes = [root],
+                      child,
+                      childs,
+                      i,
+                      n;
+
+                  if (children == null) children = defaultChildren;
+
+                  while (node = nodes.pop()) {
+                    if (valued) node.value = +node.data.value;
+                    if ((childs = children(node.data)) && (n = childs.length)) {
+                      node.children = new Array(n);
+                      for (i = n - 1; i >= 0; --i) {
+                        nodes.push(child = node.children[i] = new Node(childs[i]));
+                        child.parent = node;
+                        child.depth = node.depth + 1;
+                      }
+                    }
+                  }
+
+                  return root.eachBefore(computeHeight);
+                }
+
+                function node_copy() {
+                  return hierarchy(this).eachBefore(copyData);
+                }
+
+                function defaultChildren(d) {
+                  return d.children;
+                }
+
+                function copyData(node) {
+                  node.data = node.data.data;
+                }
+
+                function computeHeight(node) {
+                  var height = 0;
+                  do node.height = height;
+                  while ((node = node.parent) && (node.height < ++height));
+                }
+
+                function Node(data) {
+                  this.data = data;
+                  this.depth =
+                  this.height = 0;
+                  this.parent = null;
+                }
+
+                Node.prototype = hierarchy.prototype = {
+                  constructor: Node,
+                  each: node_each,
+                  eachAfter: node_eachAfter,
+                  eachBefore: node_eachBefore,
+                  sum: node_sum,
+                  sort: node_sort,
+                  path: node_path,
+                  ancestors: node_ancestors,
+                  descendants: node_descendants,
+                  leaves: node_leaves,
+                  links: node_links,
+                  copy: node_copy
+                };
+
+                function Node$2(value) {
+                  this._ = value;
+                  this.next = null;
+                }
+
+                var shuffle$1 = function(array) {
+                  var i,
+                      n = (array = array.slice()).length,
+                      head = null,
+                      node = head;
+
+                  while (n) {
+                    var next = new Node$2(array[n - 1]);
+                    if (node) node = node.next = next;
+                    else node = head = next;
+                    array[i] = array[--n];
+                  }
+
+                  return {
+                    head: head,
+                    tail: node
+                  };
+                };
+
+                var enclose = function(circles) {
+                  return encloseN(shuffle$1(circles), []);
+                };
+
+                function encloses(a, b) {
+                  var dx = b.x - a.x,
+                      dy = b.y - a.y,
+                      dr = a.r - b.r;
+                  return dr * dr + 1e-6 > dx * dx + dy * dy;
+                }
+
+                // Returns the smallest circle that contains circles L and intersects circles B.
+                function encloseN(L, B) {
+                  var circle,
+                      l0 = null,
+                      l1 = L.head,
+                      l2,
+                      p1;
+
+                  switch (B.length) {
+                    case 1: circle = enclose1(B[0]); break;
+                    case 2: circle = enclose2(B[0], B[1]); break;
+                    case 3: circle = enclose3(B[0], B[1], B[2]); break;
+                  }
+
+                  while (l1) {
+                    p1 = l1._, l2 = l1.next;
+                    if (!circle || !encloses(circle, p1)) {
+
+                      // Temporarily truncate L before l1.
+                      if (l0) L.tail = l0, l0.next = null;
+                      else L.head = L.tail = null;
+
+                      B.push(p1);
+                      circle = encloseN(L, B); // Note: reorders L!
+                      B.pop();
+
+                      // Move l1 to the front of L and reconnect the truncated list L.
+                      if (L.head) l1.next = L.head, L.head = l1;
+                      else l1.next = null, L.head = L.tail = l1;
+                      l0 = L.tail, l0.next = l2;
+
+                    } else {
+                      l0 = l1;
+                    }
+                    l1 = l2;
+                  }
+
+                  L.tail = l0;
+                  return circle;
+                }
+
+                function enclose1(a) {
+                  return {
+                    x: a.x,
+                    y: a.y,
+                    r: a.r
+                  };
+                }
+
+                function enclose2(a, b) {
+                  var x1 = a.x, y1 = a.y, r1 = a.r,
+                      x2 = b.x, y2 = b.y, r2 = b.r,
+                      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
+                      l = Math.sqrt(x21 * x21 + y21 * y21);
+                  return {
+                    x: (x1 + x2 + x21 / l * r21) / 2,
+                    y: (y1 + y2 + y21 / l * r21) / 2,
+                    r: (l + r1 + r2) / 2
+                  };
+                }
+
+                function enclose3(a, b, c) {
+                  var x1 = a.x, y1 = a.y, r1 = a.r,
+                      x2 = b.x, y2 = b.y, r2 = b.r,
+                      x3 = c.x, y3 = c.y, r3 = c.r,
+                      a2 = 2 * (x1 - x2),
+                      b2 = 2 * (y1 - y2),
+                      c2 = 2 * (r2 - r1),
+                      d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
+                      a3 = 2 * (x1 - x3),
+                      b3 = 2 * (y1 - y3),
+                      c3 = 2 * (r3 - r1),
+                      d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
+                      ab = a3 * b2 - a2 * b3,
+                      xa = (b2 * d3 - b3 * d2) / ab - x1,
+                      xb = (b3 * c2 - b2 * c3) / ab,
+                      ya = (a3 * d2 - a2 * d3) / ab - y1,
+                      yb = (a2 * c3 - a3 * c2) / ab,
+                      A = xb * xb + yb * yb - 1,
+                      B = 2 * (xa * xb + ya * yb + r1),
+                      C = xa * xa + ya * ya - r1 * r1,
+                      r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
+                  return {
+                    x: xa + xb * r + x1,
+                    y: ya + yb * r + y1,
+                    r: r
+                  };
+                }
+
+                function place(a, b, c) {
+                  var ax = a.x,
+                      ay = a.y,
+                      da = b.r + c.r,
+                      db = a.r + c.r,
+                      dx = b.x - ax,
+                      dy = b.y - ay,
+                      dc = dx * dx + dy * dy;
+                  if (dc) {
+                    var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
+                        y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
+                    c.x = ax + x * dx + y * dy;
+                    c.y = ay + x * dy - y * dx;
+                  } else {
+                    c.x = ax + db;
+                    c.y = ay;
+                  }
+                }
+
+                function intersects(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;
+                }
+
+                function distance2(circle, x, y) {
+                  var dx = circle.x - x,
+                      dy = circle.y - y;
+                  return dx * dx + dy * dy;
+                }
+
+                function Node$1(circle) {
+                  this._ = circle;
+                  this.next = null;
+                  this.previous = null;
+                }
+
+                function packEnclose(circles) {
+                  if (!(n = circles.length)) return 0;
+
+                  var a, b, c, n;
+
+                  // Place the first circle.
+                  a = circles[0], a.x = 0, a.y = 0;
+                  if (!(n > 1)) return a.r;
+
+                  // Place the second circle.
+                  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
+                  if (!(n > 2)) return a.r + b.r;
+
+                  // Place the third circle.
+                  place(b, a, c = circles[2]);
+
+                  // Initialize the weighted centroid.
+                  var aa = a.r * a.r,
+                      ba = b.r * b.r,
+                      ca = c.r * c.r,
+                      oa = aa + ba + ca,
+                      ox = aa * a.x + ba * b.x + ca * c.x,
+                      oy = aa * a.y + ba * b.y + ca * c.y,
+                      cx, cy, i, j, k, sj, sk;
+
+                  // Initialize the front-chain using the first three circles a, b and c.
+                  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
+                  a.next = c.previous = b;
+                  b.next = a.previous = c;
+                  c.next = b.previous = a;
+
+                  // Attempt to place each remaining circle…
+                  pack: for (i = 3; i < n; ++i) {
+                    place(a._, b._, c = circles[i]), c = new Node$1(c);
+
+                    // If there are only three elements in the front-chain…
+                    if ((k = a.previous) === (j = b.next)) {
+                      // If the new circle intersects the third circle,
+                      // rotate the front chain to try the next position.
+                      if (intersects(j._, c._)) {
+                        a = b, b = j, --i;
+                        continue pack;
+                      }
+                    }
+
+                    // Find the closest intersecting circle on the front-chain, if any.
+                    else {
+                      sj = j._.r, sk = k._.r;
+                      do {
+                        if (sj <= sk) {
+                          if (intersects(j._, c._)) {
+                            b = j, a.next = b, b.previous = a, --i;
+                            continue pack;
+                          }
+                          j = j.next, sj += j._.r;
+                        } else {
+                          if (intersects(k._, c._)) {
+                            a = k, a.next = b, b.previous = a, --i;
+                            continue pack;
+                          }
+                          k = k.previous, sk += k._.r;
+                        }
+                      } while (j !== k.next);
+                    }
+
+                    // Success! Insert the new circle c between a and b.
+                    c.previous = a, c.next = b, a.next = b.previous = b = c;
+
+                    // Update the weighted centroid.
+                    oa += ca = c._.r * c._.r;
+                    ox += ca * c._.x;
+                    oy += ca * c._.y;
+
+                    // Compute the new closest circle a to centroid.
+                    aa = distance2(a._, cx = ox / oa, cy = oy / oa);
+                    while ((c = c.next) !== b) {
+                      if ((ca = distance2(c._, cx, cy)) < aa) {
+                        a = c, aa = ca;
+                      }
+                    }
+                    b = a.next;
+                  }
+
+                  // Compute the enclosing circle of the front chain.
+                  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
+
+                  // Translate the circles to put the enclosing circle around the origin.
+                  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
+
+                  return c.r;
+                }
+
+                var siblings = function(circles) {
+                  packEnclose(circles);
+                  return circles;
+                };
+
+                function optional(f) {
+                  return f == null ? null : required(f);
+                }
+
+                function required(f) {
+                  if (typeof f !== "function") throw new Error;
+                  return f;
+                }
+
+                function constantZero() {
+                  return 0;
+                }
+
+                var constant$6 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function defaultRadius(d) {
+                  return Math.sqrt(d.value);
+                }
+
+                var index = function() {
+                  var radius = null,
+                      dx = 1,
+                      dy = 1,
+                      padding = constantZero;
+
+                  function pack(root) {
+                    root.x = dx / 2, root.y = dy / 2;
+                    if (radius) {
+                      root.eachBefore(radiusLeaf(radius))
+                          .eachAfter(packChildren(padding, 0.5))
+                          .eachBefore(translateChild(1));
+                    } else {
+                      root.eachBefore(radiusLeaf(defaultRadius))
+                          .eachAfter(packChildren(constantZero, 1))
+                          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
+                          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
+                    }
+                    return root;
+                  }
+
+                  pack.radius = function(x) {
+                    return arguments.length ? (radius = optional(x), pack) : radius;
+                  };
+
+                  pack.size = function(x) {
+                    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
+                  };
+
+                  pack.padding = function(x) {
+                    return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding;
+                  };
+
+                  return pack;
+                };
+
+                function radiusLeaf(radius) {
+                  return function(node) {
+                    if (!node.children) {
+                      node.r = Math.max(0, +radius(node) || 0);
+                    }
+                  };
+                }
+
+                function packChildren(padding, k) {
+                  return function(node) {
+                    if (children = node.children) {
+                      var children,
+                          i,
+                          n = children.length,
+                          r = padding(node) * k || 0,
+                          e;
+
+                      if (r) for (i = 0; i < n; ++i) children[i].r += r;
+                      e = packEnclose(children);
+                      if (r) for (i = 0; i < n; ++i) children[i].r -= r;
+                      node.r = e + r;
+                    }
+                  };
+                }
+
+                function translateChild(k) {
+                  return function(node) {
+                    var parent = node.parent;
+                    node.r *= k;
+                    if (parent) {
+                      node.x = parent.x + k * node.x;
+                      node.y = parent.y + k * node.y;
+                    }
+                  };
+                }
+
+                var roundNode = function(node) {
+                  node.x0 = Math.round(node.x0);
+                  node.y0 = Math.round(node.y0);
+                  node.x1 = Math.round(node.x1);
+                  node.y1 = Math.round(node.y1);
+                };
+
+                var treemapDice = function(parent, x0, y0, x1, y1) {
+                  var nodes = parent.children,
+                      node,
+                      i = -1,
+                      n = nodes.length,
+                      k = parent.value && (x1 - x0) / parent.value;
+
+                  while (++i < n) {
+                    node = nodes[i], node.y0 = y0, node.y1 = y1;
+                    node.x0 = x0, node.x1 = x0 += node.value * k;
+                  }
+                };
+
+                var partition = function() {
+                  var dx = 1,
+                      dy = 1,
+                      padding = 0,
+                      round = false;
+
+                  function partition(root) {
+                    var n = root.height + 1;
+                    root.x0 =
+                    root.y0 = padding;
+                    root.x1 = dx;
+                    root.y1 = dy / n;
+                    root.eachBefore(positionNode(dy, n));
+                    if (round) root.eachBefore(roundNode);
+                    return root;
+                  }
+
+                  function positionNode(dy, n) {
+                    return function(node) {
+                      if (node.children) {
+                        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
+                      }
+                      var x0 = node.x0,
+                          y0 = node.y0,
+                          x1 = node.x1 - padding,
+                          y1 = node.y1 - padding;
+                      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+                      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+                      node.x0 = x0;
+                      node.y0 = y0;
+                      node.x1 = x1;
+                      node.y1 = y1;
+                    };
+                  }
+
+                  partition.round = function(x) {
+                    return arguments.length ? (round = !!x, partition) : round;
+                  };
+
+                  partition.size = function(x) {
+                    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
+                  };
+
+                  partition.padding = function(x) {
+                    return arguments.length ? (padding = +x, partition) : padding;
+                  };
+
+                  return partition;
+                };
+
+                var keyPrefix$1 = "$";
+                var preroot = {depth: -1};
+                var ambiguous = {};
+
+                function defaultId(d) {
+                  return d.id;
+                }
+
+                function defaultParentId(d) {
+                  return d.parentId;
+                }
+
+                var stratify = function() {
+                  var id = defaultId,
+                      parentId = defaultParentId;
+
+                  function stratify(data) {
+                    var d,
+                        i,
+                        n = data.length,
+                        root,
+                        parent,
+                        node,
+                        nodes = new Array(n),
+                        nodeId,
+                        nodeKey,
+                        nodeByKey = {};
+
+                    for (i = 0; i < n; ++i) {
+                      d = data[i], node = nodes[i] = new Node(d);
+                      if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
+                        nodeKey = keyPrefix$1 + (node.id = nodeId);
+                        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
+                      }
+                    }
+
+                    for (i = 0; i < n; ++i) {
+                      node = nodes[i], nodeId = parentId(data[i], i, data);
+                      if (nodeId == null || !(nodeId += "")) {
+                        if (root) throw new Error("multiple roots");
+                        root = node;
+                      } else {
+                        parent = nodeByKey[keyPrefix$1 + nodeId];
+                        if (!parent) throw new Error("missing: " + nodeId);
+                        if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
+                        if (parent.children) parent.children.push(node);
+                        else parent.children = [node];
+                        node.parent = parent;
+                      }
+                    }
+
+                    if (!root) throw new Error("no root");
+                    root.parent = preroot;
+                    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
+                    root.parent = null;
+                    if (n > 0) throw new Error("cycle");
+
+                    return root;
+                  }
+
+                  stratify.id = function(x) {
+                    return arguments.length ? (id = required(x), stratify) : id;
+                  };
+
+                  stratify.parentId = function(x) {
+                    return arguments.length ? (parentId = required(x), stratify) : parentId;
+                  };
+
+                  return stratify;
+                };
+
+                function defaultSeparation$1(a, b) {
+                  return a.parent === b.parent ? 1 : 2;
+                }
+
+                // function radialSeparation(a, b) {
+                //   return (a.parent === b.parent ? 1 : 2) / a.depth;
+                // }
+
+                // This function is used to traverse the left contour of a subtree (or
+                // subforest). It returns the successor of v on this contour. This successor is
+                // either given by the leftmost child of v or by the thread of v. The function
+                // returns null if and only if v is on the highest level of its subtree.
+                function nextLeft(v) {
+                  var children = v.children;
+                  return children ? children[0] : v.t;
+                }
+
+                // This function works analogously to nextLeft.
+                function nextRight(v) {
+                  var children = v.children;
+                  return children ? children[children.length - 1] : v.t;
+                }
+
+                // Shifts the current subtree rooted at w+. This is done by increasing
+                // prelim(w+) and mod(w+) by shift.
+                function moveSubtree(wm, wp, shift) {
+                  var change = shift / (wp.i - wm.i);
+                  wp.c -= change;
+                  wp.s += shift;
+                  wm.c += change;
+                  wp.z += shift;
+                  wp.m += shift;
+                }
+
+                // All other shifts, applied to the smaller subtrees between w- and w+, are
+                // performed by this function. To prepare the shifts, we have to adjust
+                // change(w+), shift(w+), and change(w-).
+                function executeShifts(v) {
+                  var shift = 0,
+                      change = 0,
+                      children = v.children,
+                      i = children.length,
+                      w;
+                  while (--i >= 0) {
+                    w = children[i];
+                    w.z += shift;
+                    w.m += shift;
+                    shift += w.s + (change += w.c);
+                  }
+                }
+
+                // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
+                // returns the specified (default) ancestor.
+                function nextAncestor(vim, v, ancestor) {
+                  return vim.a.parent === v.parent ? vim.a : ancestor;
+                }
+
+                function TreeNode(node, i) {
+                  this._ = node;
+                  this.parent = null;
+                  this.children = null;
+                  this.A = null; // default ancestor
+                  this.a = this; // ancestor
+                  this.z = 0; // prelim
+                  this.m = 0; // mod
+                  this.c = 0; // change
+                  this.s = 0; // shift
+                  this.t = null; // thread
+                  this.i = i; // number
+                }
+
+                TreeNode.prototype = Object.create(Node.prototype);
+
+                function treeRoot(root) {
+                  var tree = new TreeNode(root, 0),
+                      node,
+                      nodes = [tree],
+                      child,
+                      children,
+                      i,
+                      n;
+
+                  while (node = nodes.pop()) {
+                    if (children = node._.children) {
+                      node.children = new Array(n = children.length);
+                      for (i = n - 1; i >= 0; --i) {
+                        nodes.push(child = node.children[i] = new TreeNode(children[i], i));
+                        child.parent = node;
+                      }
+                    }
+                  }
+
+                  (tree.parent = new TreeNode(null, 0)).children = [tree];
+                  return tree;
+                }
+
+                // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+                var tree = function() {
+                  var separation = defaultSeparation$1,
+                      dx = 1,
+                      dy = 1,
+                      nodeSize = null;
+
+                  function tree(root) {
+                    var t = treeRoot(root);
+
+                    // Compute the layout using Buchheim et al.’s algorithm.
+                    t.eachAfter(firstWalk), t.parent.m = -t.z;
+                    t.eachBefore(secondWalk);
+
+                    // If a fixed node size is specified, scale x and y.
+                    if (nodeSize) root.eachBefore(sizeNode);
+
+                    // If a fixed tree size is specified, scale x and y based on the extent.
+                    // Compute the left-most, right-most, and depth-most nodes for extents.
+                    else {
+                      var left = root,
+                          right = root,
+                          bottom = root;
+                      root.eachBefore(function(node) {
+                        if (node.x < left.x) left = node;
+                        if (node.x > right.x) right = node;
+                        if (node.depth > bottom.depth) bottom = node;
+                      });
+                      var s = left === right ? 1 : separation(left, right) / 2,
+                          tx = s - left.x,
+                          kx = dx / (right.x + s + tx),
+                          ky = dy / (bottom.depth || 1);
+                      root.eachBefore(function(node) {
+                        node.x = (node.x + tx) * kx;
+                        node.y = node.depth * ky;
+                      });
+                    }
+
+                    return root;
+                  }
+
+                  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
+                  // applied recursively to the children of v, as well as the function
+                  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
+                  // node v is placed to the midpoint of its outermost children.
+                  function firstWalk(v) {
+                    var children = v.children,
+                        siblings = v.parent.children,
+                        w = v.i ? siblings[v.i - 1] : null;
+                    if (children) {
+                      executeShifts(v);
+                      var midpoint = (children[0].z + children[children.length - 1].z) / 2;
+                      if (w) {
+                        v.z = w.z + separation(v._, w._);
+                        v.m = v.z - midpoint;
+                      } else {
+                        v.z = midpoint;
+                      }
+                    } else if (w) {
+                      v.z = w.z + separation(v._, w._);
+                    }
+                    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
+                  }
+
+                  // Computes all real x-coordinates by summing up the modifiers recursively.
+                  function secondWalk(v) {
+                    v._.x = v.z + v.parent.m;
+                    v.m += v.parent.m;
+                  }
+
+                  // The core of the algorithm. Here, a new subtree is combined with the
+                  // previous subtrees. Threads are used to traverse the inside and outside
+                  // contours of the left and right subtree up to the highest common level. The
+                  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
+                  // superscript o means outside and i means inside, the subscript - means left
+                  // subtree and + means right subtree. For summing up the modifiers along the
+                  // contour, we use respective variables si+, si-, so-, and so+. Whenever two
+                  // nodes of the inside contours conflict, we compute the left one of the
+                  // greatest uncommon ancestors using the function ANCESTOR and call MOVE
+                  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
+                  // Finally, we add a new thread (if necessary).
+                  function apportion(v, w, ancestor) {
+                    if (w) {
+                      var vip = v,
+                          vop = v,
+                          vim = w,
+                          vom = vip.parent.children[0],
+                          sip = vip.m,
+                          sop = vop.m,
+                          sim = vim.m,
+                          som = vom.m,
+                          shift;
+                      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
+                        vom = nextLeft(vom);
+                        vop = nextRight(vop);
+                        vop.a = v;
+                        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
+                        if (shift > 0) {
+                          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
+                          sip += shift;
+                          sop += shift;
+                        }
+                        sim += vim.m;
+                        sip += vip.m;
+                        som += vom.m;
+                        sop += vop.m;
+                      }
+                      if (vim && !nextRight(vop)) {
+                        vop.t = vim;
+                        vop.m += sim - sop;
+                      }
+                      if (vip && !nextLeft(vom)) {
+                        vom.t = vip;
+                        vom.m += sip - som;
+                        ancestor = v;
+                      }
+                    }
+                    return ancestor;
+                  }
+
+                  function sizeNode(node) {
+                    node.x *= dx;
+                    node.y = node.depth * dy;
+                  }
+
+                  tree.separation = function(x) {
+                    return arguments.length ? (separation = x, tree) : separation;
+                  };
+
+                  tree.size = function(x) {
+                    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
+                  };
+
+                  tree.nodeSize = function(x) {
+                    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
+                  };
+
+                  return tree;
+                };
+
+                var treemapSlice = function(parent, x0, y0, x1, y1) {
+                  var nodes = parent.children,
+                      node,
+                      i = -1,
+                      n = nodes.length,
+                      k = parent.value && (y1 - y0) / parent.value;
+
+                  while (++i < n) {
+                    node = nodes[i], node.x0 = x0, node.x1 = x1;
+                    node.y0 = y0, node.y1 = y0 += node.value * k;
+                  }
+                };
+
+                var phi = (1 + Math.sqrt(5)) / 2;
+
+                function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
+                  var rows = [],
+                      nodes = parent.children,
+                      row,
+                      nodeValue,
+                      i0 = 0,
+                      i1,
+                      n = nodes.length,
+                      dx, dy,
+                      value = parent.value,
+                      sumValue,
+                      minValue,
+                      maxValue,
+                      newRatio,
+                      minRatio,
+                      alpha,
+                      beta;
+
+                  while (i0 < n) {
+                    dx = x1 - x0, dy = y1 - y0;
+                    minValue = maxValue = sumValue = nodes[i0].value;
+                    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
+                    beta = sumValue * sumValue * alpha;
+                    minRatio = Math.max(maxValue / beta, beta / minValue);
+
+                    // Keep adding nodes while the aspect ratio maintains or improves.
+                    for (i1 = i0 + 1; i1 < n; ++i1) {
+                      sumValue += nodeValue = nodes[i1].value;
+                      if (nodeValue < minValue) minValue = nodeValue;
+                      if (nodeValue > maxValue) maxValue = nodeValue;
+                      beta = sumValue * sumValue * alpha;
+                      newRatio = Math.max(maxValue / beta, beta / minValue);
+                      if (newRatio > minRatio) { sumValue -= nodeValue; break; }
+                      minRatio = newRatio;
+                    }
+
+                    // Position and record the row orientation.
+                    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
+                    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
+                    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
+                    value -= sumValue, i0 = i1;
+                  }
+
+                  return rows;
+                }
+
+                var squarify = (function custom(ratio) {
+
+                  function squarify(parent, x0, y0, x1, y1) {
+                    squarifyRatio(ratio, parent, x0, y0, x1, y1);
+                  }
+
+                  squarify.ratio = function(x) {
+                    return custom((x = +x) > 1 ? x : 1);
+                  };
+
+                  return squarify;
+                })(phi);
+
+                var index$1 = function() {
+                  var tile = squarify,
+                      round = false,
+                      dx = 1,
+                      dy = 1,
+                      paddingStack = [0],
+                      paddingInner = constantZero,
+                      paddingTop = constantZero,
+                      paddingRight = constantZero,
+                      paddingBottom = constantZero,
+                      paddingLeft = constantZero;
+
+                  function treemap(root) {
+                    root.x0 =
+                    root.y0 = 0;
+                    root.x1 = dx;
+                    root.y1 = dy;
+                    root.eachBefore(positionNode);
+                    paddingStack = [0];
+                    if (round) root.eachBefore(roundNode);
+                    return root;
+                  }
+
+                  function positionNode(node) {
+                    var p = paddingStack[node.depth],
+                        x0 = node.x0 + p,
+                        y0 = node.y0 + p,
+                        x1 = node.x1 - p,
+                        y1 = node.y1 - p;
+                    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+                    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+                    node.x0 = x0;
+                    node.y0 = y0;
+                    node.x1 = x1;
+                    node.y1 = y1;
+                    if (node.children) {
+                      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
+                      x0 += paddingLeft(node) - p;
+                      y0 += paddingTop(node) - p;
+                      x1 -= paddingRight(node) - p;
+                      y1 -= paddingBottom(node) - p;
+                      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+                      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+                      tile(node, x0, y0, x1, y1);
+                    }
+                  }
+
+                  treemap.round = function(x) {
+                    return arguments.length ? (round = !!x, treemap) : round;
+                  };
+
+                  treemap.size = function(x) {
+                    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
+                  };
+
+                  treemap.tile = function(x) {
+                    return arguments.length ? (tile = required(x), treemap) : tile;
+                  };
+
+                  treemap.padding = function(x) {
+                    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
+                  };
+
+                  treemap.paddingInner = function(x) {
+                    return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner;
+                  };
+
+                  treemap.paddingOuter = function(x) {
+                    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
+                  };
+
+                  treemap.paddingTop = function(x) {
+                    return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop;
+                  };
+
+                  treemap.paddingRight = function(x) {
+                    return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight;
+                  };
+
+                  treemap.paddingBottom = function(x) {
+                    return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom;
+                  };
+
+                  treemap.paddingLeft = function(x) {
+                    return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft;
+                  };
+
+                  return treemap;
+                };
+
+                var binary = function(parent, x0, y0, x1, y1) {
+                  var nodes = parent.children,
+                      i, n = nodes.length,
+                      sum, sums = new Array(n + 1);
+
+                  for (sums[0] = sum = i = 0; i < n; ++i) {
+                    sums[i + 1] = sum += nodes[i].value;
+                  }
+
+                  partition(0, n, parent.value, x0, y0, x1, y1);
+
+                  function partition(i, j, value, x0, y0, x1, y1) {
+                    if (i >= j - 1) {
+                      var node = nodes[i];
+                      node.x0 = x0, node.y0 = y0;
+                      node.x1 = x1, node.y1 = y1;
+                      return;
+                    }
+
+                    var valueOffset = sums[i],
+                        valueTarget = (value / 2) + valueOffset,
+                        k = i + 1,
+                        hi = j - 1;
+
+                    while (k < hi) {
+                      var mid = k + hi >>> 1;
+                      if (sums[mid] < valueTarget) k = mid + 1;
+                      else hi = mid;
+                    }
+
+                    var valueLeft = sums[k] - valueOffset,
+                        valueRight = value - valueLeft;
+
+                    if ((y1 - y0) > (x1 - x0)) {
+                      var yk = (y0 * valueRight + y1 * valueLeft) / value;
+                      partition(i, k, valueLeft, x0, y0, x1, yk);
+                      partition(k, j, valueRight, x0, yk, x1, y1);
+                    } else {
+                      var xk = (x0 * valueRight + x1 * valueLeft) / value;
+                      partition(i, k, valueLeft, x0, y0, xk, y1);
+                      partition(k, j, valueRight, xk, y0, x1, y1);
+                    }
+                  }
+                };
+
+                var sliceDice = function(parent, x0, y0, x1, y1) {
+                  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
+                };
+
+                var resquarify = (function custom(ratio) {
+
+                  function resquarify(parent, x0, y0, x1, y1) {
+                    if ((rows = parent._squarify) && (rows.ratio === ratio)) {
+                      var rows,
+                          row,
+                          nodes,
+                          i,
+                          j = -1,
+                          n,
+                          m = rows.length,
+                          value = parent.value;
+
+                      while (++j < m) {
+                        row = rows[j], nodes = row.children;
+                        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
+                        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
+                        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
+                        value -= row.value;
+                      }
+                    } else {
+                      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
+                      rows.ratio = ratio;
+                    }
+                  }
+
+                  resquarify.ratio = function(x) {
+                    return custom((x = +x) > 1 ? x : 1);
+                  };
+
+                  return resquarify;
+                })(phi);
+
+                var center$1 = function(x, y) {
+                  var nodes;
+
+                  if (x == null) x = 0;
+                  if (y == null) y = 0;
+
+                  function force() {
+                    var i,
+                        n = nodes.length,
+                        node,
+                        sx = 0,
+                        sy = 0;
+
+                    for (i = 0; i < n; ++i) {
+                      node = nodes[i], sx += node.x, sy += node.y;
+                    }
+
+                    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
+                      node = nodes[i], node.x -= sx, node.y -= sy;
+                    }
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                  };
+
+                  force.x = function(_) {
+                    return arguments.length ? (x = +_, force) : x;
+                  };
+
+                  force.y = function(_) {
+                    return arguments.length ? (y = +_, force) : y;
+                  };
+
+                  return force;
+                };
+
+                var constant$7 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var jiggle = function() {
+                  return (Math.random() - 0.5) * 1e-6;
+                };
+
+                function x$1(d) {
+                  return d.x + d.vx;
+                }
+
+                function y$1(d) {
+                  return d.y + d.vy;
+                }
+
+                var collide = function(radius) {
+                  var nodes,
+                      radii,
+                      strength = 1,
+                      iterations = 1;
+
+                  if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
+
+                  function force() {
+                    var i, n = nodes.length,
+                        tree,
+                        node,
+                        xi,
+                        yi,
+                        ri,
+                        ri2;
+
+                    for (var k = 0; k < iterations; ++k) {
+                      tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);
+                      for (i = 0; i < n; ++i) {
+                        node = nodes[i];
+                        ri = radii[i], ri2 = ri * ri;
+                        xi = node.x + node.vx;
+                        yi = node.y + node.vy;
+                        tree.visit(apply);
+                      }
+                    }
+
+                    function apply(quad, x0, y0, x1, y1) {
+                      var data = quad.data, rj = quad.r, r = ri + rj;
+                      if (data) {
+                        if (data.index > i) {
+                          var x = xi - data.x - data.vx,
+                              y = yi - data.y - data.vy,
+                              l = x * x + y * y;
+                          if (l < r * r) {
+                            if (x === 0) x = jiggle(), l += x * x;
+                            if (y === 0) y = jiggle(), l += y * y;
+                            l = (r - (l = Math.sqrt(l))) / l * strength;
+                            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
+                            node.vy += (y *= l) * r;
+                            data.vx -= x * (r = 1 - r);
+                            data.vy -= y * r;
+                          }
+                        }
+                        return;
+                      }
+                      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
+                    }
+                  }
+
+                  function prepare(quad) {
+                    if (quad.data) return quad.r = radii[quad.data.index];
+                    for (var i = quad.r = 0; i < 4; ++i) {
+                      if (quad[i] && quad[i].r > quad.r) {
+                        quad.r = quad[i].r;
+                      }
+                    }
+                  }
+
+                  function initialize() {
+                    if (!nodes) return;
+                    var i, n = nodes.length;
+                    radii = new Array(n);
+                    for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                    initialize();
+                  };
+
+                  force.iterations = function(_) {
+                    return arguments.length ? (iterations = +_, force) : iterations;
+                  };
+
+                  force.strength = function(_) {
+                    return arguments.length ? (strength = +_, force) : strength;
+                  };
+
+                  force.radius = function(_) {
+                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
+                  };
+
+                  return force;
+                };
+
+                function index$2(d, i) {
+                  return i;
+                }
+
+                function find(nodeById, nodeId) {
+                  var node = nodeById.get(nodeId);
+                  if (!node) throw new Error("missing: " + nodeId);
+                  return node;
+                }
+
+                var link = function(links) {
+                  var id = index$2,
+                      strength = defaultStrength,
+                      strengths,
+                      distance = constant$7(30),
+                      distances,
+                      nodes,
+                      count,
+                      bias,
+                      iterations = 1;
+
+                  if (links == null) links = [];
+
+                  function defaultStrength(link) {
+                    return 1 / Math.min(count[link.source.index], count[link.target.index]);
+                  }
+
+                  function force(alpha) {
+                    for (var k = 0, n = links.length; k < iterations; ++k) {
+                      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
+                        link = links[i], source = link.source, target = link.target;
+                        x = target.x + target.vx - source.x - source.vx || jiggle();
+                        y = target.y + target.vy - source.y - source.vy || jiggle();
+                        l = Math.sqrt(x * x + y * y);
+                        l = (l - distances[i]) / l * alpha * strengths[i];
+                        x *= l, y *= l;
+                        target.vx -= x * (b = bias[i]);
+                        target.vy -= y * b;
+                        source.vx += x * (b = 1 - b);
+                        source.vy += y * b;
+                      }
+                    }
+                  }
+
+                  function initialize() {
+                    if (!nodes) return;
+
+                    var i,
+                        n = nodes.length,
+                        m = links.length,
+                        nodeById = map$1(nodes, id),
+                        link;
+
+                    for (i = 0, count = new Array(n); i < n; ++i) {
+                      count[i] = 0;
+                    }
+
+                    for (i = 0; i < m; ++i) {
+                      link = links[i], link.index = i;
+                      if (typeof link.source !== "object") link.source = find(nodeById, link.source);
+                      if (typeof link.target !== "object") link.target = find(nodeById, link.target);
+                      ++count[link.source.index], ++count[link.target.index];
+                    }
+
+                    for (i = 0, bias = new Array(m); i < m; ++i) {
+                      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
+                    }
+
+                    strengths = new Array(m), initializeStrength();
+                    distances = new Array(m), initializeDistance();
+                  }
+
+                  function initializeStrength() {
+                    if (!nodes) return;
+
+                    for (var i = 0, n = links.length; i < n; ++i) {
+                      strengths[i] = +strength(links[i], i, links);
+                    }
+                  }
+
+                  function initializeDistance() {
+                    if (!nodes) return;
+
+                    for (var i = 0, n = links.length; i < n; ++i) {
+                      distances[i] = +distance(links[i], i, links);
+                    }
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                    initialize();
+                  };
+
+                  force.links = function(_) {
+                    return arguments.length ? (links = _, initialize(), force) : links;
+                  };
+
+                  force.id = function(_) {
+                    return arguments.length ? (id = _, force) : id;
+                  };
+
+                  force.iterations = function(_) {
+                    return arguments.length ? (iterations = +_, force) : iterations;
+                  };
+
+                  force.strength = function(_) {
+                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
+                  };
+
+                  force.distance = function(_) {
+                    return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
+                  };
+
+                  return force;
+                };
+
+                function x$2(d) {
+                  return d.x;
+                }
+
+                function y$2(d) {
+                  return d.y;
+                }
+
+                var initialRadius = 10;
+                var initialAngle = Math.PI * (3 - Math.sqrt(5));
+
+                var simulation = function(nodes) {
+                  var simulation,
+                      alpha = 1,
+                      alphaMin = 0.001,
+                      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
+                      alphaTarget = 0,
+                      velocityDecay = 0.6,
+                      forces = map$1(),
+                      stepper = timer(step),
+                      event = dispatch("tick", "end");
+
+                  if (nodes == null) nodes = [];
+
+                  function step() {
+                    tick();
+                    event.call("tick", simulation);
+                    if (alpha < alphaMin) {
+                      stepper.stop();
+                      event.call("end", simulation);
+                    }
+                  }
+
+                  function tick() {
+                    var i, n = nodes.length, node;
+
+                    alpha += (alphaTarget - alpha) * alphaDecay;
+
+                    forces.each(function(force) {
+                      force(alpha);
+                    });
+
+                    for (i = 0; i < n; ++i) {
+                      node = nodes[i];
+                      if (node.fx == null) node.x += node.vx *= velocityDecay;
+                      else node.x = node.fx, node.vx = 0;
+                      if (node.fy == null) node.y += node.vy *= velocityDecay;
+                      else node.y = node.fy, node.vy = 0;
+                    }
+                  }
+
+                  function initializeNodes() {
+                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+                      node = nodes[i], node.index = i;
+                      if (isNaN(node.x) || isNaN(node.y)) {
+                        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
+                        node.x = radius * Math.cos(angle);
+                        node.y = radius * Math.sin(angle);
+                      }
+                      if (isNaN(node.vx) || isNaN(node.vy)) {
+                        node.vx = node.vy = 0;
+                      }
+                    }
+                  }
+
+                  function initializeForce(force) {
+                    if (force.initialize) force.initialize(nodes);
+                    return force;
+                  }
+
+                  initializeNodes();
+
+                  return simulation = {
+                    tick: tick,
+
+                    restart: function() {
+                      return stepper.restart(step), simulation;
+                    },
+
+                    stop: function() {
+                      return stepper.stop(), simulation;
+                    },
+
+                    nodes: function(_) {
+                      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
+                    },
+
+                    alpha: function(_) {
+                      return arguments.length ? (alpha = +_, simulation) : alpha;
+                    },
+
+                    alphaMin: function(_) {
+                      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
+                    },
+
+                    alphaDecay: function(_) {
+                      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
+                    },
+
+                    alphaTarget: function(_) {
+                      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
+                    },
+
+                    velocityDecay: function(_) {
+                      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
+                    },
+
+                    force: function(name, _) {
+                      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
+                    },
+
+                    find: function(x, y, radius) {
+                      var i = 0,
+                          n = nodes.length,
+                          dx,
+                          dy,
+                          d2,
+                          node,
+                          closest;
+
+                      if (radius == null) radius = Infinity;
+                      else radius *= radius;
+
+                      for (i = 0; i < n; ++i) {
+                        node = nodes[i];
+                        dx = x - node.x;
+                        dy = y - node.y;
+                        d2 = dx * dx + dy * dy;
+                        if (d2 < radius) closest = node, radius = d2;
+                      }
+
+                      return closest;
+                    },
+
+                    on: function(name, _) {
+                      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
+                    }
+                  };
+                };
+
+                var manyBody = function() {
+                  var nodes,
+                      node,
+                      alpha,
+                      strength = constant$7(-30),
+                      strengths,
+                      distanceMin2 = 1,
+                      distanceMax2 = Infinity,
+                      theta2 = 0.81;
+
+                  function force(_) {
+                    var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);
+                    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
+                  }
+
+                  function initialize() {
+                    if (!nodes) return;
+                    var i, n = nodes.length;
+                    strengths = new Array(n);
+                    for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);
+                  }
+
+                  function accumulate(quad) {
+                    var strength = 0, q, c, x$$1, y$$1, i;
+
+                    // For internal nodes, accumulate forces from child quadrants.
+                    if (quad.length) {
+                      for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
+                        if ((q = quad[i]) && (c = q.value)) {
+                          strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
+                        }
+                      }
+                      quad.x = x$$1 / strength;
+                      quad.y = y$$1 / strength;
+                    }
+
+                    // For leaf nodes, accumulate forces from coincident quadrants.
+                    else {
+                      q = quad;
+                      q.x = q.data.x;
+                      q.y = q.data.y;
+                      do strength += strengths[q.data.index];
+                      while (q = q.next);
+                    }
+
+                    quad.value = strength;
+                  }
+
+                  function apply(quad, x1, _, x2) {
+                    if (!quad.value) return true;
+
+                    var x$$1 = quad.x - node.x,
+                        y$$1 = quad.y - node.y,
+                        w = x2 - x1,
+                        l = x$$1 * x$$1 + y$$1 * y$$1;
+
+                    // Apply the Barnes-Hut approximation if possible.
+                    // Limit forces for very close nodes; randomize direction if coincident.
+                    if (w * w / theta2 < l) {
+                      if (l < distanceMax2) {
+                        if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+                        if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+                        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+                        node.vx += x$$1 * quad.value * alpha / l;
+                        node.vy += y$$1 * quad.value * alpha / l;
+                      }
+                      return true;
+                    }
+
+                    // Otherwise, process points directly.
+                    else if (quad.length || l >= distanceMax2) return;
+
+                    // Limit forces for very close nodes; randomize direction if coincident.
+                    if (quad.data !== node || quad.next) {
+                      if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+                      if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+                      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+                    }
+
+                    do if (quad.data !== node) {
+                      w = strengths[quad.data.index] * alpha / l;
+                      node.vx += x$$1 * w;
+                      node.vy += y$$1 * w;
+                    } while (quad = quad.next);
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                    initialize();
+                  };
+
+                  force.strength = function(_) {
+                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+                  };
+
+                  force.distanceMin = function(_) {
+                    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
+                  };
+
+                  force.distanceMax = function(_) {
+                    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
+                  };
+
+                  force.theta = function(_) {
+                    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
+                  };
+
+                  return force;
+                };
+
+                var x$3 = function(x) {
+                  var strength = constant$7(0.1),
+                      nodes,
+                      strengths,
+                      xz;
+
+                  if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
+
+                  function force(alpha) {
+                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+                      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
+                    }
+                  }
+
+                  function initialize() {
+                    if (!nodes) return;
+                    var i, n = nodes.length;
+                    strengths = new Array(n);
+                    xz = new Array(n);
+                    for (i = 0; i < n; ++i) {
+                      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+                    }
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                    initialize();
+                  };
+
+                  force.strength = function(_) {
+                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+                  };
+
+                  force.x = function(_) {
+                    return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
+                  };
+
+                  return force;
+                };
+
+                var y$3 = function(y) {
+                  var strength = constant$7(0.1),
+                      nodes,
+                      strengths,
+                      yz;
+
+                  if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
+
+                  function force(alpha) {
+                    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+                      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
+                    }
+                  }
+
+                  function initialize() {
+                    if (!nodes) return;
+                    var i, n = nodes.length;
+                    strengths = new Array(n);
+                    yz = new Array(n);
+                    for (i = 0; i < n; ++i) {
+                      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+                    }
+                  }
+
+                  force.initialize = function(_) {
+                    nodes = _;
+                    initialize();
+                  };
+
+                  force.strength = function(_) {
+                    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+                  };
+
+                  force.y = function(_) {
+                    return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
+                  };
+
+                  return force;
+                };
+
+                function nopropagation() {
+                  exports.event.stopImmediatePropagation();
+                }
+
+                var noevent = function() {
+                  exports.event.preventDefault();
+                  exports.event.stopImmediatePropagation();
+                };
+
+                var dragDisable = function(view) {
+                  var root = view.document.documentElement,
+                      selection$$1 = select(view).on("dragstart.drag", noevent, true);
+                  if ("onselectstart" in root) {
+                    selection$$1.on("selectstart.drag", noevent, true);
+                  } else {
+                    root.__noselect = root.style.MozUserSelect;
+                    root.style.MozUserSelect = "none";
+                  }
+                };
+
+                function yesdrag(view, noclick) {
+                  var root = view.document.documentElement,
+                      selection$$1 = select(view).on("dragstart.drag", null);
+                  if (noclick) {
+                    selection$$1.on("click.drag", noevent, true);
+                    setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
+                  }
+                  if ("onselectstart" in root) {
+                    selection$$1.on("selectstart.drag", null);
+                  } else {
+                    root.style.MozUserSelect = root.__noselect;
+                    delete root.__noselect;
+                  }
+                }
+
+                var constant$8 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
+                  this.target = target;
+                  this.type = type;
+                  this.subject = subject;
+                  this.identifier = id;
+                  this.active = active;
+                  this.x = x;
+                  this.y = y;
+                  this.dx = dx;
+                  this.dy = dy;
+                  this._ = dispatch;
+                }
+
+                DragEvent.prototype.on = function() {
+                  var value = this._.on.apply(this._, arguments);
+                  return value === this._ ? this : value;
+                };
+
+                // Ignore right-click, since that should open the context menu.
+                function defaultFilter() {
+                  return !exports.event.button;
+                }
+
+                function defaultContainer() {
+                  return this.parentNode;
+                }
+
+                function defaultSubject(d) {
+                  return d == null ? {x: exports.event.x, y: exports.event.y} : d;
+                }
+
+                var drag = function() {
+                  var filter = defaultFilter,
+                      container = defaultContainer,
+                      subject = defaultSubject,
+                      gestures = {},
+                      listeners = dispatch("start", "drag", "end"),
+                      active = 0,
+                      mousemoving,
+                      touchending;
+
+                  function drag(selection$$1) {
+                    selection$$1
+                        .on("mousedown.drag", mousedowned)
+                        .on("touchstart.drag", touchstarted)
+                        .on("touchmove.drag", touchmoved)
+                        .on("touchend.drag touchcancel.drag", touchended)
+                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
+                  }
+
+                  function mousedowned() {
+                    if (touchending || !filter.apply(this, arguments)) return;
+                    var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
+                    if (!gesture) return;
+                    select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
+                    dragDisable(exports.event.view);
+                    nopropagation();
+                    mousemoving = false;
+                    gesture("start");
+                  }
+
+                  function mousemoved() {
+                    noevent();
+                    mousemoving = true;
+                    gestures.mouse("drag");
+                  }
+
+                  function mouseupped() {
+                    select(exports.event.view).on("mousemove.drag mouseup.drag", null);
+                    yesdrag(exports.event.view, mousemoving);
+                    noevent();
+                    gestures.mouse("end");
+                  }
+
+                  function touchstarted() {
+                    if (!filter.apply(this, arguments)) return;
+                    var touches$$1 = exports.event.changedTouches,
+                        c = container.apply(this, arguments),
+                        n = touches$$1.length, i, gesture;
+
+                    for (i = 0; i < n; ++i) {
+                      if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
+                        nopropagation();
+                        gesture("start");
+                      }
+                    }
+                  }
+
+                  function touchmoved() {
+                    var touches$$1 = exports.event.changedTouches,
+                        n = touches$$1.length, i, gesture;
+
+                    for (i = 0; i < n; ++i) {
+                      if (gesture = gestures[touches$$1[i].identifier]) {
+                        noevent();
+                        gesture("drag");
+                      }
+                    }
+                  }
+
+                  function touchended() {
+                    var touches$$1 = exports.event.changedTouches,
+                        n = touches$$1.length, i, gesture;
+
+                    if (touchending) clearTimeout(touchending);
+                    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+                    for (i = 0; i < n; ++i) {
+                      if (gesture = gestures[touches$$1[i].identifier]) {
+                        nopropagation();
+                        gesture("end");
+                      }
+                    }
+                  }
+
+                  function beforestart(id, container, point, that, args) {
+                    var p = point(container, id), s, dx, dy,
+                        sublisteners = listeners.copy();
+
+                    if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
+                      if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
+                      dx = s.x - p[0] || 0;
+                      dy = s.y - p[1] || 0;
+                      return true;
+                    })) return;
+
+                    return function gesture(type) {
+                      var p0 = p, n;
+                      switch (type) {
+                        case "start": gestures[id] = gesture, n = active++; break;
+                        case "end": delete gestures[id], --active; // nobreak
+                        case "drag": p = point(container, id), n = active; break;
+                      }
+                      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
+                    };
+                  }
+
+                  drag.filter = function(_) {
+                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter;
+                  };
+
+                  drag.container = function(_) {
+                    return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container;
+                  };
+
+                  drag.subject = function(_) {
+                    return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject;
+                  };
+
+                  drag.on = function() {
+                    var value = listeners.on.apply(listeners, arguments);
+                    return value === listeners ? drag : value;
+                  };
+
+                  return drag;
+                };
+
+                var constant$9 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function x$4(d) {
+                  return d[0];
+                }
+
+                function y$4(d) {
+                  return d[1];
+                }
+
+                function RedBlackTree() {
+                  this._ = null; // root node
+                }
+
+                function RedBlackNode(node) {
+                  node.U = // parent node
+                  node.C = // color - true for red, false for black
+                  node.L = // left node
+                  node.R = // right node
+                  node.P = // previous node
+                  node.N = null; // next node
+                }
+
+                RedBlackTree.prototype = {
+                  constructor: RedBlackTree,
+
+                  insert: function(after, node) {
+                    var parent, grandpa, uncle;
+
+                    if (after) {
+                      node.P = after;
+                      node.N = after.N;
+                      if (after.N) after.N.P = node;
+                      after.N = node;
+                      if (after.R) {
+                        after = after.R;
+                        while (after.L) after = after.L;
+                        after.L = node;
+                      } else {
+                        after.R = node;
+                      }
+                      parent = after;
+                    } else if (this._) {
+                      after = RedBlackFirst(this._);
+                      node.P = null;
+                      node.N = after;
+                      after.P = after.L = node;
+                      parent = after;
+                    } else {
+                      node.P = node.N = null;
+                      this._ = node;
+                      parent = null;
+                    }
+                    node.L = node.R = null;
+                    node.U = parent;
+                    node.C = true;
+
+                    after = node;
+                    while (parent && parent.C) {
+                      grandpa = parent.U;
+                      if (parent === grandpa.L) {
+                        uncle = grandpa.R;
+                        if (uncle && uncle.C) {
+                          parent.C = uncle.C = false;
+                          grandpa.C = true;
+                          after = grandpa;
+                        } else {
+                          if (after === parent.R) {
+                            RedBlackRotateLeft(this, parent);
+                            after = parent;
+                            parent = after.U;
+                          }
+                          parent.C = false;
+                          grandpa.C = true;
+                          RedBlackRotateRight(this, grandpa);
+                        }
+                      } else {
+                        uncle = grandpa.L;
+                        if (uncle && uncle.C) {
+                          parent.C = uncle.C = false;
+                          grandpa.C = true;
+                          after = grandpa;
+                        } else {
+                          if (after === parent.L) {
+                            RedBlackRotateRight(this, parent);
+                            after = parent;
+                            parent = after.U;
+                          }
+                          parent.C = false;
+                          grandpa.C = true;
+                          RedBlackRotateLeft(this, grandpa);
+                        }
+                      }
+                      parent = after.U;
+                    }
+                    this._.C = false;
+                  },
+
+                  remove: function(node) {
+                    if (node.N) node.N.P = node.P;
+                    if (node.P) node.P.N = node.N;
+                    node.N = node.P = null;
+
+                    var parent = node.U,
+                        sibling,
+                        left = node.L,
+                        right = node.R,
+                        next,
+                        red;
+
+                    if (!left) next = right;
+                    else if (!right) next = left;
+                    else next = RedBlackFirst(right);
+
+                    if (parent) {
+                      if (parent.L === node) parent.L = next;
+                      else parent.R = next;
+                    } else {
+                      this._ = next;
+                    }
+
+                    if (left && right) {
+                      red = next.C;
+                      next.C = node.C;
+                      next.L = left;
+                      left.U = next;
+                      if (next !== right) {
+                        parent = next.U;
+                        next.U = node.U;
+                        node = next.R;
+                        parent.L = node;
+                        next.R = right;
+                        right.U = next;
+                      } else {
+                        next.U = parent;
+                        parent = next;
+                        node = next.R;
+                      }
+                    } else {
+                      red = node.C;
+                      node = next;
+                    }
+
+                    if (node) node.U = parent;
+                    if (red) return;
+                    if (node && node.C) { node.C = false; return; }
+
+                    do {
+                      if (node === this._) break;
+                      if (node === parent.L) {
+                        sibling = parent.R;
+                        if (sibling.C) {
+                          sibling.C = false;
+                          parent.C = true;
+                          RedBlackRotateLeft(this, parent);
+                          sibling = parent.R;
+                        }
+                        if ((sibling.L && sibling.L.C)
+                            || (sibling.R && sibling.R.C)) {
+                          if (!sibling.R || !sibling.R.C) {
+                            sibling.L.C = false;
+                            sibling.C = true;
+                            RedBlackRotateRight(this, sibling);
+                            sibling = parent.R;
+                          }
+                          sibling.C = parent.C;
+                          parent.C = sibling.R.C = false;
+                          RedBlackRotateLeft(this, parent);
+                          node = this._;
+                          break;
+                        }
+                      } else {
+                        sibling = parent.L;
+                        if (sibling.C) {
+                          sibling.C = false;
+                          parent.C = true;
+                          RedBlackRotateRight(this, parent);
+                          sibling = parent.L;
+                        }
+                        if ((sibling.L && sibling.L.C)
+                          || (sibling.R && sibling.R.C)) {
+                          if (!sibling.L || !sibling.L.C) {
+                            sibling.R.C = false;
+                            sibling.C = true;
+                            RedBlackRotateLeft(this, sibling);
+                            sibling = parent.L;
+                          }
+                          sibling.C = parent.C;
+                          parent.C = sibling.L.C = false;
+                          RedBlackRotateRight(this, parent);
+                          node = this._;
+                          break;
+                        }
+                      }
+                      sibling.C = true;
+                      node = parent;
+                      parent = parent.U;
+                    } while (!node.C);
+
+                    if (node) node.C = false;
+                  }
+                };
+
+                function RedBlackRotateLeft(tree, node) {
+                  var p = node,
+                      q = node.R,
+                      parent = p.U;
+
+                  if (parent) {
+                    if (parent.L === p) parent.L = q;
+                    else parent.R = q;
+                  } else {
+                    tree._ = q;
+                  }
+
+                  q.U = parent;
+                  p.U = q;
+                  p.R = q.L;
+                  if (p.R) p.R.U = p;
+                  q.L = p;
+                }
+
+                function RedBlackRotateRight(tree, node) {
+                  var p = node,
+                      q = node.L,
+                      parent = p.U;
+
+                  if (parent) {
+                    if (parent.L === p) parent.L = q;
+                    else parent.R = q;
+                  } else {
+                    tree._ = q;
+                  }
+
+                  q.U = parent;
+                  p.U = q;
+                  p.L = q.R;
+                  if (p.L) p.L.U = p;
+                  q.R = p;
+                }
+
+                function RedBlackFirst(node) {
+                  while (node.L) node = node.L;
+                  return node;
+                }
+
+                function createEdge(left, right, v0, v1) {
+                  var edge = [null, null],
+                      index = edges.push(edge) - 1;
+                  edge.left = left;
+                  edge.right = right;
+                  if (v0) setEdgeEnd(edge, left, right, v0);
+                  if (v1) setEdgeEnd(edge, right, left, v1);
+                  cells[left.index].halfedges.push(index);
+                  cells[right.index].halfedges.push(index);
+                  return edge;
+                }
+
+                function createBorderEdge(left, v0, v1) {
+                  var edge = [v0, v1];
+                  edge.left = left;
+                  return edge;
+                }
+
+                function setEdgeEnd(edge, left, right, vertex) {
+                  if (!edge[0] && !edge[1]) {
+                    edge[0] = vertex;
+                    edge.left = left;
+                    edge.right = right;
+                  } else if (edge.left === right) {
+                    edge[1] = vertex;
+                  } else {
+                    edge[0] = vertex;
+                  }
+                }
+
+                // Liang–Barsky line clipping.
+                function clipEdge(edge, x0, y0, x1, y1) {
+                  var a = edge[0],
+                      b = edge[1],
+                      ax = a[0],
+                      ay = a[1],
+                      bx = b[0],
+                      by = b[1],
+                      t0 = 0,
+                      t1 = 1,
+                      dx = bx - ax,
+                      dy = by - ay,
+                      r;
+
+                  r = x0 - ax;
+                  if (!dx && r > 0) return;
+                  r /= dx;
+                  if (dx < 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  } else if (dx > 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  }
+
+                  r = x1 - ax;
+                  if (!dx && r < 0) return;
+                  r /= dx;
+                  if (dx < 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  } else if (dx > 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  }
+
+                  r = y0 - ay;
+                  if (!dy && r > 0) return;
+                  r /= dy;
+                  if (dy < 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  } else if (dy > 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  }
+
+                  r = y1 - ay;
+                  if (!dy && r < 0) return;
+                  r /= dy;
+                  if (dy < 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  } else if (dy > 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  }
+
+                  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
+
+                  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
+                  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
+                  return true;
+                }
+
+                function connectEdge(edge, x0, y0, x1, y1) {
+                  var v1 = edge[1];
+                  if (v1) return true;
+
+                  var v0 = edge[0],
+                      left = edge.left,
+                      right = edge.right,
+                      lx = left[0],
+                      ly = left[1],
+                      rx = right[0],
+                      ry = right[1],
+                      fx = (lx + rx) / 2,
+                      fy = (ly + ry) / 2,
+                      fm,
+                      fb;
+
+                  if (ry === ly) {
+                    if (fx < x0 || fx >= x1) return;
+                    if (lx > rx) {
+                      if (!v0) v0 = [fx, y0];
+                      else if (v0[1] >= y1) return;
+                      v1 = [fx, y1];
+                    } else {
+                      if (!v0) v0 = [fx, y1];
+                      else if (v0[1] < y0) return;
+                      v1 = [fx, y0];
+                    }
+                  } else {
+                    fm = (lx - rx) / (ry - ly);
+                    fb = fy - fm * fx;
+                    if (fm < -1 || fm > 1) {
+                      if (lx > rx) {
+                        if (!v0) v0 = [(y0 - fb) / fm, y0];
+                        else if (v0[1] >= y1) return;
+                        v1 = [(y1 - fb) / fm, y1];
+                      } else {
+                        if (!v0) v0 = [(y1 - fb) / fm, y1];
+                        else if (v0[1] < y0) return;
+                        v1 = [(y0 - fb) / fm, y0];
+                      }
+                    } else {
+                      if (ly < ry) {
+                        if (!v0) v0 = [x0, fm * x0 + fb];
+                        else if (v0[0] >= x1) return;
+                        v1 = [x1, fm * x1 + fb];
+                      } else {
+                        if (!v0) v0 = [x1, fm * x1 + fb];
+                        else if (v0[0] < x0) return;
+                        v1 = [x0, fm * x0 + fb];
+                      }
+                    }
+                  }
+
+                  edge[0] = v0;
+                  edge[1] = v1;
+                  return true;
+                }
+
+                function clipEdges(x0, y0, x1, y1) {
+                  var i = edges.length,
+                      edge;
+
+                  while (i--) {
+                    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
+                        || !clipEdge(edge, x0, y0, x1, y1)
+                        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3
+                            || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {
+                      delete edges[i];
+                    }
+                  }
+                }
+
+                function createCell(site) {
+                  return cells[site.index] = {
+                    site: site,
+                    halfedges: []
+                  };
+                }
+
+                function cellHalfedgeAngle(cell, edge) {
+                  var site = cell.site,
+                      va = edge.left,
+                      vb = edge.right;
+                  if (site === vb) vb = va, va = site;
+                  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
+                  if (site === va) va = edge[1], vb = edge[0];
+                  else va = edge[0], vb = edge[1];
+                  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
+                }
+
+                function cellHalfedgeStart(cell, edge) {
+                  return edge[+(edge.left !== cell.site)];
+                }
+
+                function cellHalfedgeEnd(cell, edge) {
+                  return edge[+(edge.left === cell.site)];
+                }
+
+                function sortCellHalfedges() {
+                  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
+                    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
+                      var index = new Array(m),
+                          array = new Array(m);
+                      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
+                      index.sort(function(i, j) { return array[j] - array[i]; });
+                      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
+                      for (j = 0; j < m; ++j) halfedges[j] = array[j];
+                    }
+                  }
+                }
+
+                function clipCells(x0, y0, x1, y1) {
+                  var nCells = cells.length,
+                      iCell,
+                      cell,
+                      site,
+                      iHalfedge,
+                      halfedges,
+                      nHalfedges,
+                      start,
+                      startX,
+                      startY,
+                      end,
+                      endX,
+                      endY,
+                      cover = true;
+
+                  for (iCell = 0; iCell < nCells; ++iCell) {
+                    if (cell = cells[iCell]) {
+                      site = cell.site;
+                      halfedges = cell.halfedges;
+                      iHalfedge = halfedges.length;
+
+                      // Remove any dangling clipped edges.
+                      while (iHalfedge--) {
+                        if (!edges[halfedges[iHalfedge]]) {
+                          halfedges.splice(iHalfedge, 1);
+                        }
+                      }
+
+                      // Insert any border edges as necessary.
+                      iHalfedge = 0, nHalfedges = halfedges.length;
+                      while (iHalfedge < nHalfedges) {
+                        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
+                        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
+                        if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {
+                          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
+                              Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]
+                              : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]
+                              : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]
+                              : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]
+                              : null)) - 1);
+                          ++nHalfedges;
+                        }
+                      }
+
+                      if (nHalfedges) cover = false;
+                    }
+                  }
+
+                  // If there weren’t any edges, have the closest site cover the extent.
+                  // It doesn’t matter which corner of the extent we measure!
+                  if (cover) {
+                    var dx, dy, d2, dc = Infinity;
+
+                    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
+                      if (cell = cells[iCell]) {
+                        site = cell.site;
+                        dx = site[0] - x0;
+                        dy = site[1] - y0;
+                        d2 = dx * dx + dy * dy;
+                        if (d2 < dc) dc = d2, cover = cell;
+                      }
+                    }
+
+                    if (cover) {
+                      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
+                      cover.halfedges.push(
+                        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
+                        edges.push(createBorderEdge(site, v01, v11)) - 1,
+                        edges.push(createBorderEdge(site, v11, v10)) - 1,
+                        edges.push(createBorderEdge(site, v10, v00)) - 1
+                      );
+                    }
+                  }
+
+                  // Lastly delete any cells with no edges; these were entirely clipped.
+                  for (iCell = 0; iCell < nCells; ++iCell) {
+                    if (cell = cells[iCell]) {
+                      if (!cell.halfedges.length) {
+                        delete cells[iCell];
+                      }
+                    }
+                  }
+                }
+
+                var circlePool = [];
+
+                var firstCircle;
+
+                function Circle() {
+                  RedBlackNode(this);
+                  this.x =
+                  this.y =
+                  this.arc =
+                  this.site =
+                  this.cy = null;
+                }
+
+                function attachCircle(arc) {
+                  var lArc = arc.P,
+                      rArc = arc.N;
+
+                  if (!lArc || !rArc) return;
+
+                  var lSite = lArc.site,
+                      cSite = arc.site,
+                      rSite = rArc.site;
+
+                  if (lSite === rSite) return;
+
+                  var bx = cSite[0],
+                      by = cSite[1],
+                      ax = lSite[0] - bx,
+                      ay = lSite[1] - by,
+                      cx = rSite[0] - bx,
+                      cy = rSite[1] - by;
+
+                  var d = 2 * (ax * cy - ay * cx);
+                  if (d >= -epsilon2$1) return;
+
+                  var ha = ax * ax + ay * ay,
+                      hc = cx * cx + cy * cy,
+                      x = (cy * ha - ay * hc) / d,
+                      y = (ax * hc - cx * ha) / d;
+
+                  var circle = circlePool.pop() || new Circle;
+                  circle.arc = arc;
+                  circle.site = cSite;
+                  circle.x = x + bx;
+                  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
+
+                  arc.circle = circle;
+
+                  var before = null,
+                      node = circles._;
+
+                  while (node) {
+                    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
+                      if (node.L) node = node.L;
+                      else { before = node.P; break; }
+                    } else {
+                      if (node.R) node = node.R;
+                      else { before = node; break; }
+                    }
+                  }
+
+                  circles.insert(before, circle);
+                  if (!before) firstCircle = circle;
+                }
+
+                function detachCircle(arc) {
+                  var circle = arc.circle;
+                  if (circle) {
+                    if (!circle.P) firstCircle = circle.N;
+                    circles.remove(circle);
+                    circlePool.push(circle);
+                    RedBlackNode(circle);
+                    arc.circle = null;
+                  }
+                }
+
+                var beachPool = [];
+
+                function Beach() {
+                  RedBlackNode(this);
+                  this.edge =
+                  this.site =
+                  this.circle = null;
+                }
+
+                function createBeach(site) {
+                  var beach = beachPool.pop() || new Beach;
+                  beach.site = site;
+                  return beach;
+                }
+
+                function detachBeach(beach) {
+                  detachCircle(beach);
+                  beaches.remove(beach);
+                  beachPool.push(beach);
+                  RedBlackNode(beach);
+                }
+
+                function removeBeach(beach) {
+                  var circle = beach.circle,
+                      x = circle.x,
+                      y = circle.cy,
+                      vertex = [x, y],
+                      previous = beach.P,
+                      next = beach.N,
+                      disappearing = [beach];
+
+                  detachBeach(beach);
+
+                  var lArc = previous;
+                  while (lArc.circle
+                      && Math.abs(x - lArc.circle.x) < epsilon$3
+                      && Math.abs(y - lArc.circle.cy) < epsilon$3) {
+                    previous = lArc.P;
+                    disappearing.unshift(lArc);
+                    detachBeach(lArc);
+                    lArc = previous;
+                  }
+
+                  disappearing.unshift(lArc);
+                  detachCircle(lArc);
+
+                  var rArc = next;
+                  while (rArc.circle
+                      && Math.abs(x - rArc.circle.x) < epsilon$3
+                      && Math.abs(y - rArc.circle.cy) < epsilon$3) {
+                    next = rArc.N;
+                    disappearing.push(rArc);
+                    detachBeach(rArc);
+                    rArc = next;
+                  }
+
+                  disappearing.push(rArc);
+                  detachCircle(rArc);
+
+                  var nArcs = disappearing.length,
+                      iArc;
+                  for (iArc = 1; iArc < nArcs; ++iArc) {
+                    rArc = disappearing[iArc];
+                    lArc = disappearing[iArc - 1];
+                    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
+                  }
+
+                  lArc = disappearing[0];
+                  rArc = disappearing[nArcs - 1];
+                  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
+
+                  attachCircle(lArc);
+                  attachCircle(rArc);
+                }
+
+                function addBeach(site) {
+                  var x = site[0],
+                      directrix = site[1],
+                      lArc,
+                      rArc,
+                      dxl,
+                      dxr,
+                      node = beaches._;
+
+                  while (node) {
+                    dxl = leftBreakPoint(node, directrix) - x;
+                    if (dxl > epsilon$3) node = node.L; else {
+                      dxr = x - rightBreakPoint(node, directrix);
+                      if (dxr > epsilon$3) {
+                        if (!node.R) {
+                          lArc = node;
+                          break;
+                        }
+                        node = node.R;
+                      } else {
+                        if (dxl > -epsilon$3) {
+                          lArc = node.P;
+                          rArc = node;
+                        } else if (dxr > -epsilon$3) {
+                          lArc = node;
+                          rArc = node.N;
+                        } else {
+                          lArc = rArc = node;
+                        }
+                        break;
+                      }
+                    }
+                  }
+
+                  createCell(site);
+                  var newArc = createBeach(site);
+                  beaches.insert(lArc, newArc);
+
+                  if (!lArc && !rArc) return;
+
+                  if (lArc === rArc) {
+                    detachCircle(lArc);
+                    rArc = createBeach(lArc.site);
+                    beaches.insert(newArc, rArc);
+                    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
+                    attachCircle(lArc);
+                    attachCircle(rArc);
+                    return;
+                  }
+
+                  if (!rArc) { // && lArc
+                    newArc.edge = createEdge(lArc.site, newArc.site);
+                    return;
+                  }
+
+                  // else lArc !== rArc
+                  detachCircle(lArc);
+                  detachCircle(rArc);
+
+                  var lSite = lArc.site,
+                      ax = lSite[0],
+                      ay = lSite[1],
+                      bx = site[0] - ax,
+                      by = site[1] - ay,
+                      rSite = rArc.site,
+                      cx = rSite[0] - ax,
+                      cy = rSite[1] - ay,
+                      d = 2 * (bx * cy - by * cx),
+                      hb = bx * bx + by * by,
+                      hc = cx * cx + cy * cy,
+                      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
+
+                  setEdgeEnd(rArc.edge, lSite, rSite, vertex);
+                  newArc.edge = createEdge(lSite, site, null, vertex);
+                  rArc.edge = createEdge(site, rSite, null, vertex);
+                  attachCircle(lArc);
+                  attachCircle(rArc);
+                }
+
+                function leftBreakPoint(arc, directrix) {
+                  var site = arc.site,
+                      rfocx = site[0],
+                      rfocy = site[1],
+                      pby2 = rfocy - directrix;
+
+                  if (!pby2) return rfocx;
+
+                  var lArc = arc.P;
+                  if (!lArc) return -Infinity;
+
+                  site = lArc.site;
+                  var lfocx = site[0],
+                      lfocy = site[1],
+                      plby2 = lfocy - directrix;
+
+                  if (!plby2) return lfocx;
+
+                  var hl = lfocx - rfocx,
+                      aby2 = 1 / pby2 - 1 / plby2,
+                      b = hl / plby2;
+
+                  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
+
+                  return (rfocx + lfocx) / 2;
+                }
+
+                function rightBreakPoint(arc, directrix) {
+                  var rArc = arc.N;
+                  if (rArc) return leftBreakPoint(rArc, directrix);
+                  var site = arc.site;
+                  return site[1] === directrix ? site[0] : Infinity;
+                }
+
+                var epsilon$3 = 1e-6;
+                var epsilon2$1 = 1e-12;
+                var beaches;
+                var cells;
+                var circles;
+                var edges;
+
+                function triangleArea(a, b, c) {
+                  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
+                }
+
+                function lexicographic(a, b) {
+                  return b[1] - a[1]
+                      || b[0] - a[0];
+                }
+
+                function Diagram(sites, extent) {
+                  var site = sites.sort(lexicographic).pop(),
+                      x,
+                      y,
+                      circle;
+
+                  edges = [];
+                  cells = new Array(sites.length);
+                  beaches = new RedBlackTree;
+                  circles = new RedBlackTree;
+
+                  while (true) {
+                    circle = firstCircle;
+                    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
+                      if (site[0] !== x || site[1] !== y) {
+                        addBeach(site);
+                        x = site[0], y = site[1];
+                      }
+                      site = sites.pop();
+                    } else if (circle) {
+                      removeBeach(circle.arc);
+                    } else {
+                      break;
+                    }
+                  }
+
+                  sortCellHalfedges();
+
+                  if (extent) {
+                    var x0 = +extent[0][0],
+                        y0 = +extent[0][1],
+                        x1 = +extent[1][0],
+                        y1 = +extent[1][1];
+                    clipEdges(x0, y0, x1, y1);
+                    clipCells(x0, y0, x1, y1);
+                  }
+
+                  this.edges = edges;
+                  this.cells = cells;
+
+                  beaches =
+                  circles =
+                  edges =
+                  cells = null;
+                }
+
+                Diagram.prototype = {
+                  constructor: Diagram,
+
+                  polygons: function() {
+                    var edges = this.edges;
+
+                    return this.cells.map(function(cell) {
+                      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
+                      polygon.data = cell.site.data;
+                      return polygon;
+                    });
+                  },
+
+                  triangles: function() {
+                    var triangles = [],
+                        edges = this.edges;
+
+                    this.cells.forEach(function(cell, i) {
+                      var site = cell.site,
+                          halfedges = cell.halfedges,
+                          j = -1,
+                          m = halfedges.length,
+                          s0,
+                          e1 = edges[halfedges[m - 1]],
+                          s1 = e1.left === site ? e1.right : e1.left;
+
+                      while (++j < m) {
+                        s0 = s1;
+                        e1 = edges[halfedges[j]];
+                        s1 = e1.left === site ? e1.right : e1.left;
+                        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
+                          triangles.push([site.data, s0.data, s1.data]);
+                        }
+                      }
+                    });
+
+                    return triangles;
+                  },
+
+                  links: function() {
+                    return this.edges.filter(function(edge) {
+                      return edge.right;
+                    }).map(function(edge) {
+                      return {
+                        source: edge.left.data,
+                        target: edge.right.data
+                      };
+                    });
+                  },
+
+                  find: function(x, y, radius) {
+                    var that = this,
+                        i0, i1 = that._found || 0,
+                        cell = that.cells[i1] || that.cells[i1 = 0],
+                        dx = x - cell.site[0],
+                        dy = y - cell.site[1],
+                        d2 = dx * dx + dy * dy;
+
+                    do {
+                      cell = that.cells[i0 = i1], i1 = null;
+                      cell.halfedges.forEach(function(e) {
+                        var edge = that.edges[e], v = edge.left;
+                        if ((v === cell.site || !v) && !(v = edge.right)) return;
+                        var vx = x - v[0],
+                            vy = y - v[1],
+                            v2 = vx * vx + vy * vy;
+                        if (v2 < d2) d2 = v2, i1 = v.index;
+                      });
+                    } while (i1 !== null);
+
+                    that._found = i0;
+
+                    return radius == null || d2 <= radius * radius ? cell.site : null;
+                  }
+                };
+
+                var voronoi = function() {
+                  var x$$1 = x$4,
+                      y$$1 = y$4,
+                      extent = null;
+
+                  function voronoi(data) {
+                    return new Diagram(data.map(function(d, i) {
+                      var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3];
+                      s.index = i;
+                      s.data = d;
+                      return s;
+                    }), extent);
+                  }
+
+                  voronoi.polygons = function(data) {
+                    return voronoi(data).polygons();
+                  };
+
+                  voronoi.links = function(data) {
+                    return voronoi(data).links();
+                  };
+
+                  voronoi.triangles = function(data) {
+                    return voronoi(data).triangles();
+                  };
+
+                  voronoi.x = function(_) {
+                    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1;
+                  };
+
+                  voronoi.y = function(_) {
+                    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1;
+                  };
+
+                  voronoi.extent = function(_) {
+                    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
+                  };
+
+                  voronoi.size = function(_) {
+                    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
+                  };
+
+                  return voronoi;
+                };
+
+                var constant$10 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function ZoomEvent(target, type, transform) {
+                  this.target = target;
+                  this.type = type;
+                  this.transform = transform;
+                }
+
+                function Transform(k, x, y) {
+                  this.k = k;
+                  this.x = x;
+                  this.y = y;
+                }
+
+                Transform.prototype = {
+                  constructor: Transform,
+                  scale: function(k) {
+                    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
+                  },
+                  translate: function(x, y) {
+                    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
+                  },
+                  apply: function(point) {
+                    return [point[0] * this.k + this.x, point[1] * this.k + this.y];
+                  },
+                  applyX: function(x) {
+                    return x * this.k + this.x;
+                  },
+                  applyY: function(y) {
+                    return y * this.k + this.y;
+                  },
+                  invert: function(location) {
+                    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
+                  },
+                  invertX: function(x) {
+                    return (x - this.x) / this.k;
+                  },
+                  invertY: function(y) {
+                    return (y - this.y) / this.k;
+                  },
+                  rescaleX: function(x) {
+                    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
+                  },
+                  rescaleY: function(y) {
+                    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
+                  },
+                  toString: function() {
+                    return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
+                  }
+                };
+
+                var identity$6 = new Transform(1, 0, 0);
+
+                transform.prototype = Transform.prototype;
+
+                function transform(node) {
+                  return node.__zoom || identity$6;
+                }
+
+                function nopropagation$1() {
+                  exports.event.stopImmediatePropagation();
+                }
+
+                var noevent$1 = function() {
+                  exports.event.preventDefault();
+                  exports.event.stopImmediatePropagation();
+                };
+
+                // Ignore right-click, since that should open the context menu.
+                function defaultFilter$1() {
+                  return !exports.event.button;
+                }
+
+                function defaultExtent() {
+                  var e = this, w, h;
+                  if (e instanceof SVGElement) {
+                    e = e.ownerSVGElement || e;
+                    w = e.width.baseVal.value;
+                    h = e.height.baseVal.value;
+                  } else {
+                    w = e.clientWidth;
+                    h = e.clientHeight;
+                  }
+                  return [[0, 0], [w, h]];
+                }
+
+                function defaultTransform() {
+                  return this.__zoom || identity$6;
+                }
+
+                var zoom = function() {
+                  var filter = defaultFilter$1,
+                      extent = defaultExtent,
+                      k0 = 0,
+                      k1 = Infinity,
+                      x0 = -k1,
+                      x1 = k1,
+                      y0 = x0,
+                      y1 = x1,
+                      duration = 250,
+                      gestures = [],
+                      listeners = dispatch("start", "zoom", "end"),
+                      touchstarting,
+                      touchending,
+                      touchDelay = 500,
+                      wheelDelay = 150;
+
+                  function zoom(selection$$1) {
+                    selection$$1
+                        .on("wheel.zoom", wheeled)
+                        .on("mousedown.zoom", mousedowned)
+                        .on("dblclick.zoom", dblclicked)
+                        .on("touchstart.zoom", touchstarted)
+                        .on("touchmove.zoom", touchmoved)
+                        .on("touchend.zoom touchcancel.zoom", touchended)
+                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+                        .property("__zoom", defaultTransform);
+                  }
+
+                  zoom.transform = function(collection, transform) {
+                    var selection$$1 = collection.selection ? collection.selection() : collection;
+                    selection$$1.property("__zoom", defaultTransform);
+                    if (collection !== selection$$1) {
+                      schedule(collection, transform);
+                    } else {
+                      selection$$1.interrupt().each(function() {
+                        gesture(this, arguments)
+                            .start()
+                            .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
+                            .end();
+                      });
+                    }
+                  };
+
+                  zoom.scaleBy = function(selection$$1, k) {
+                    zoom.scaleTo(selection$$1, function() {
+                      var k0 = this.__zoom.k,
+                          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+                      return k0 * k1;
+                    });
+                  };
+
+                  zoom.scaleTo = function(selection$$1, k) {
+                    zoom.transform(selection$$1, function() {
+                      var e = extent.apply(this, arguments),
+                          t0 = this.__zoom,
+                          p0 = centroid(e),
+                          p1 = t0.invert(p0),
+                          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+                      return constrain(translate(scale(t0, k1), p0, p1), e);
+                    });
+                  };
+
+                  zoom.translateBy = function(selection$$1, x, y) {
+                    zoom.transform(selection$$1, function() {
+                      return constrain(this.__zoom.translate(
+                        typeof x === "function" ? x.apply(this, arguments) : x,
+                        typeof y === "function" ? y.apply(this, arguments) : y
+                      ), extent.apply(this, arguments));
+                    });
+                  };
+
+                  function scale(transform, k) {
+                    k = Math.max(k0, Math.min(k1, k));
+                    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
+                  }
+
+                  function translate(transform, p0, p1) {
+                    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
+                    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
+                  }
+
+                  function constrain(transform, extent) {
+                    var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),
+                        dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);
+                    return dx || dy ? transform.translate(dx, dy) : transform;
+                  }
+
+                  function centroid(extent) {
+                    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
+                  }
+
+                  function schedule(transition$$1, transform, center) {
+                    transition$$1
+                        .on("start.zoom", function() { gesture(this, arguments).start(); })
+                        .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
+                        .tween("zoom", function() {
+                          var that = this,
+                              args = arguments,
+                              g = gesture(that, args),
+                              e = extent.apply(that, args),
+                              p = center || centroid(e),
+                              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
+                              a = that.__zoom,
+                              b = typeof transform === "function" ? transform.apply(that, args) : transform,
+                              i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
+                          return function(t) {
+                            if (t === 1) t = b; // Avoid rounding error on end.
+                            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
+                            g.zoom(null, t);
+                          };
+                        });
+                  }
+
+                  function gesture(that, args) {
+                    for (var i = 0, n = gestures.length, g; i < n; ++i) {
+                      if ((g = gestures[i]).that === that) {
+                        return g;
+                      }
+                    }
+                    return new Gesture(that, args);
+                  }
+
+                  function Gesture(that, args) {
+                    this.that = that;
+                    this.args = args;
+                    this.index = -1;
+                    this.active = 0;
+                    this.extent = extent.apply(that, args);
+                  }
+
+                  Gesture.prototype = {
+                    start: function() {
+                      if (++this.active === 1) {
+                        this.index = gestures.push(this) - 1;
+                        this.emit("start");
+                      }
+                      return this;
+                    },
+                    zoom: function(key, transform) {
+                      if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
+                      if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
+                      if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
+                      this.that.__zoom = transform;
+                      this.emit("zoom");
+                      return this;
+                    },
+                    end: function() {
+                      if (--this.active === 0) {
+                        gestures.splice(this.index, 1);
+                        this.index = -1;
+                        this.emit("end");
+                      }
+                      return this;
+                    },
+                    emit: function(type) {
+                      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
+                    }
+                  };
+
+                  function wheeled() {
+                    if (!filter.apply(this, arguments)) return;
+                    var g = gesture(this, arguments),
+                        t = this.__zoom,
+                        k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
+                        p = mouse(this);
+
+                    // If the mouse is in the same location as before, reuse it.
+                    // If there were recent wheel events, reset the wheel idle timeout.
+                    if (g.wheel) {
+                      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
+                        g.mouse[1] = t.invert(g.mouse[0] = p);
+                      }
+                      clearTimeout(g.wheel);
+                    }
+
+                    // If this wheel event won’t trigger a transform change, ignore it.
+                    else if (t.k === k) return;
+
+                    // Otherwise, capture the mouse point and location at the start.
+                    else {
+                      g.mouse = [p, t.invert(p)];
+                      interrupt(this);
+                      g.start();
+                    }
+
+                    noevent$1();
+                    g.wheel = setTimeout(wheelidled, wheelDelay);
+                    g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
+
+                    function wheelidled() {
+                      g.wheel = null;
+                      g.end();
+                    }
+                  }
+
+                  function mousedowned() {
+                    if (touchending || !filter.apply(this, arguments)) return;
+                    var g = gesture(this, arguments),
+                        v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
+                        p = mouse(this);
+
+                    dragDisable(exports.event.view);
+                    nopropagation$1();
+                    g.mouse = [p, this.__zoom.invert(p)];
+                    interrupt(this);
+                    g.start();
+
+                    function mousemoved() {
+                      noevent$1();
+                      g.moved = true;
+                      g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
+                    }
+
+                    function mouseupped() {
+                      v.on("mousemove.zoom mouseup.zoom", null);
+                      yesdrag(exports.event.view, g.moved);
+                      noevent$1();
+                      g.end();
+                    }
+                  }
+
+                  function dblclicked() {
+                    if (!filter.apply(this, arguments)) return;
+                    var t0 = this.__zoom,
+                        p0 = mouse(this),
+                        p1 = t0.invert(p0),
+                        k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
+                        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
+
+                    noevent$1();
+                    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
+                    else select(this).call(zoom.transform, t1);
+                  }
+
+                  function touchstarted() {
+                    if (!filter.apply(this, arguments)) return;
+                    var g = gesture(this, arguments),
+                        touches$$1 = exports.event.changedTouches,
+                        n = touches$$1.length, i, t, p;
+
+                    nopropagation$1();
+                    for (i = 0; i < n; ++i) {
+                      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+                      p = [p, this.__zoom.invert(p), t.identifier];
+                      if (!g.touch0) g.touch0 = p;
+                      else if (!g.touch1) g.touch1 = p;
+                    }
+                    if (touchstarting) {
+                      touchstarting = clearTimeout(touchstarting);
+                      if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);
+                    }
+                    if (exports.event.touches.length === n) {
+                      touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
+                      interrupt(this);
+                      g.start();
+                    }
+                  }
+
+                  function touchmoved() {
+                    var g = gesture(this, arguments),
+                        touches$$1 = exports.event.changedTouches,
+                        n = touches$$1.length, i, t, p, l;
+
+                    noevent$1();
+                    if (touchstarting) touchstarting = clearTimeout(touchstarting);
+                    for (i = 0; i < n; ++i) {
+                      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+                      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
+                      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
+                    }
+                    t = g.that.__zoom;
+                    if (g.touch1) {
+                      var p0 = g.touch0[0], l0 = g.touch0[1],
+                          p1 = g.touch1[0], l1 = g.touch1[1],
+                          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
+                          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
+                      t = scale(t, Math.sqrt(dp / dl));
+                      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
+                      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+                    }
+                    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
+                    else return;
+                    g.zoom("touch", constrain(translate(t, p, l), g.extent));
+                  }
+
+                  function touchended() {
+                    var g = gesture(this, arguments),
+                        touches$$1 = exports.event.changedTouches,
+                        n = touches$$1.length, i, t;
+
+                    nopropagation$1();
+                    if (touchending) clearTimeout(touchending);
+                    touchending = setTimeout(function() { touchending = null; }, touchDelay);
+                    for (i = 0; i < n; ++i) {
+                      t = touches$$1[i];
+                      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
+                      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
+                    }
+                    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
+                    if (!g.touch0) g.end();
+                  }
+
+                  zoom.filter = function(_) {
+                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter;
+                  };
+
+                  zoom.extent = function(_) {
+                    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
+                  };
+
+                  zoom.scaleExtent = function(_) {
+                    return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
+                  };
+
+                  zoom.translateExtent = function(_) {
+                    return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
+                  };
+
+                  zoom.duration = function(_) {
+                    return arguments.length ? (duration = +_, zoom) : duration;
+                  };
+
+                  zoom.on = function() {
+                    var value = listeners.on.apply(listeners, arguments);
+                    return value === listeners ? zoom : value;
+                  };
+
+                  return zoom;
+                };
+
+                var constant$11 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var BrushEvent = function(target, type, selection) {
+                  this.target = target;
+                  this.type = type;
+                  this.selection = selection;
+                };
+
+                function nopropagation$2() {
+                  exports.event.stopImmediatePropagation();
+                }
+
+                var noevent$2 = function() {
+                  exports.event.preventDefault();
+                  exports.event.stopImmediatePropagation();
+                };
+
+                var MODE_DRAG = {name: "drag"};
+                var MODE_SPACE = {name: "space"};
+                var MODE_HANDLE = {name: "handle"};
+                var MODE_CENTER = {name: "center"};
+
+                var X = {
+                  name: "x",
+                  handles: ["e", "w"].map(type$1),
+                  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
+                  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
+                };
+
+                var Y = {
+                  name: "y",
+                  handles: ["n", "s"].map(type$1),
+                  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
+                  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
+                };
+
+                var XY = {
+                  name: "xy",
+                  handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1),
+                  input: function(xy) { return xy; },
+                  output: function(xy) { return xy; }
+                };
+
+                var cursors = {
+                  overlay: "crosshair",
+                  selection: "move",
+                  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 flipX = {
+                  e: "w",
+                  w: "e",
+                  nw: "ne",
+                  ne: "nw",
+                  se: "sw",
+                  sw: "se"
+                };
+
+                var flipY = {
+                  n: "s",
+                  s: "n",
+                  nw: "sw",
+                  ne: "se",
+                  se: "ne",
+                  sw: "nw"
+                };
+
+                var signsX = {
+                  overlay: +1,
+                  selection: +1,
+                  n: null,
+                  e: +1,
+                  s: null,
+                  w: -1,
+                  nw: -1,
+                  ne: +1,
+                  se: +1,
+                  sw: -1
+                };
+
+                var signsY = {
+                  overlay: +1,
+                  selection: +1,
+                  n: -1,
+                  e: null,
+                  s: +1,
+                  w: null,
+                  nw: -1,
+                  ne: -1,
+                  se: +1,
+                  sw: +1
+                };
+
+                function type$1(t) {
+                  return {type: t};
+                }
+
+                // Ignore right-click, since that should open the context menu.
+                function defaultFilter$2() {
+                  return !exports.event.button;
+                }
+
+                function defaultExtent$1() {
+                  var svg = this.ownerSVGElement || this;
+                  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
+                }
+
+                // Like d3.local, but with the name “__brush” rather than auto-generated.
+                function local$1(node) {
+                  while (!node.__brush) if (!(node = node.parentNode)) return;
+                  return node.__brush;
+                }
+
+                function empty$1(extent) {
+                  return extent[0][0] === extent[1][0]
+                      || extent[0][1] === extent[1][1];
+                }
+
+                function brushSelection(node) {
+                  var state = node.__brush;
+                  return state ? state.dim.output(state.selection) : null;
+                }
+
+                function brushX() {
+                  return brush$1(X);
+                }
+
+                function brushY() {
+                  return brush$1(Y);
+                }
+
+                var brush = function() {
+                  return brush$1(XY);
+                };
+
+                function brush$1(dim) {
+                  var extent = defaultExtent$1,
+                      filter = defaultFilter$2,
+                      listeners = dispatch(brush, "start", "brush", "end"),
+                      handleSize = 6,
+                      touchending;
+
+                  function brush(group) {
+                    var overlay = group
+                        .property("__brush", initialize)
+                      .selectAll(".overlay")
+                      .data([type$1("overlay")]);
+
+                    overlay.enter().append("rect")
+                        .attr("class", "overlay")
+                        .attr("pointer-events", "all")
+                        .attr("cursor", cursors.overlay)
+                      .merge(overlay)
+                        .each(function() {
+                          var extent = local$1(this).extent;
+                          select(this)
+                              .attr("x", extent[0][0])
+                              .attr("y", extent[0][1])
+                              .attr("width", extent[1][0] - extent[0][0])
+                              .attr("height", extent[1][1] - extent[0][1]);
+                        });
+
+                    group.selectAll(".selection")
+                      .data([type$1("selection")])
+                      .enter().append("rect")
+                        .attr("class", "selection")
+                        .attr("cursor", cursors.selection)
+                        .attr("fill", "#777")
+                        .attr("fill-opacity", 0.3)
+                        .attr("stroke", "#fff")
+                        .attr("shape-rendering", "crispEdges");
+
+                    var handle = group.selectAll(".handle")
+                      .data(dim.handles, function(d) { return d.type; });
+
+                    handle.exit().remove();
+
+                    handle.enter().append("rect")
+                        .attr("class", function(d) { return "handle handle--" + d.type; })
+                        .attr("cursor", function(d) { return cursors[d.type]; });
+
+                    group
+                        .each(redraw)
+                        .attr("fill", "none")
+                        .attr("pointer-events", "all")
+                        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+                        .on("mousedown.brush touchstart.brush", started);
+                  }
+
+                  brush.move = function(group, selection$$1) {
+                    if (group.selection) {
+                      group
+                          .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
+                          .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
+                          .tween("brush", function() {
+                            var that = this,
+                                state = that.__brush,
+                                emit = emitter(that, arguments),
+                                selection0 = state.selection,
+                                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
+                                i = interpolate(selection0, selection1);
+
+                            function tween(t) {
+                              state.selection = t === 1 && empty$1(selection1) ? null : i(t);
+                              redraw.call(that);
+                              emit.brush();
+                            }
+
+                            return selection0 && selection1 ? tween : tween(1);
+                          });
+                    } else {
+                      group
+                          .each(function() {
+                            var that = this,
+                                args = arguments,
+                                state = that.__brush,
+                                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
+                                emit = emitter(that, args).beforestart();
+
+                            interrupt(that);
+                            state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
+                            redraw.call(that);
+                            emit.start().brush().end();
+                          });
+                    }
+                  };
+
+                  function redraw() {
+                    var group = select(this),
+                        selection$$1 = local$1(this).selection;
+
+                    if (selection$$1) {
+                      group.selectAll(".selection")
+                          .style("display", null)
+                          .attr("x", selection$$1[0][0])
+                          .attr("y", selection$$1[0][1])
+                          .attr("width", selection$$1[1][0] - selection$$1[0][0])
+                          .attr("height", selection$$1[1][1] - selection$$1[0][1]);
+
+                      group.selectAll(".handle")
+                          .style("display", null)
+                          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
+                          .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
+                          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
+                          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
+                    }
+
+                    else {
+                      group.selectAll(".selection,.handle")
+                          .style("display", "none")
+                          .attr("x", null)
+                          .attr("y", null)
+                          .attr("width", null)
+                          .attr("height", null);
+                    }
+                  }
+
+                  function emitter(that, args) {
+                    return that.__brush.emitter || new Emitter(that, args);
+                  }
+
+                  function Emitter(that, args) {
+                    this.that = that;
+                    this.args = args;
+                    this.state = that.__brush;
+                    this.active = 0;
+                  }
+
+                  Emitter.prototype = {
+                    beforestart: function() {
+                      if (++this.active === 1) this.state.emitter = this, this.starting = true;
+                      return this;
+                    },
+                    start: function() {
+                      if (this.starting) this.starting = false, this.emit("start");
+                      return this;
+                    },
+                    brush: function() {
+                      this.emit("brush");
+                      return this;
+                    },
+                    end: function() {
+                      if (--this.active === 0) delete this.state.emitter, this.emit("end");
+                      return this;
+                    },
+                    emit: function(type) {
+                      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
+                    }
+                  };
+
+                  function started() {
+                    if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }
+                    else if (touchending) return;
+                    if (!filter.apply(this, arguments)) return;
+
+                    var that = this,
+                        type = exports.event.target.__data__.type,
+                        mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
+                        signX = dim === Y ? null : signsX[type],
+                        signY = dim === X ? null : signsY[type],
+                        state = local$1(that),
+                        extent = state.extent,
+                        selection$$1 = state.selection,
+                        W = extent[0][0], w0, w1,
+                        N = extent[0][1], n0, n1,
+                        E = extent[1][0], e0, e1,
+                        S = extent[1][1], s0, s1,
+                        dx,
+                        dy,
+                        moving,
+                        shifting = signX && signY && exports.event.shiftKey,
+                        lockX,
+                        lockY,
+                        point0 = mouse(that),
+                        point = point0,
+                        emit = emitter(that, arguments).beforestart();
+
+                    if (type === "overlay") {
+                      state.selection = selection$$1 = [
+                        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
+                        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
+                      ];
+                    } else {
+                      w0 = selection$$1[0][0];
+                      n0 = selection$$1[0][1];
+                      e0 = selection$$1[1][0];
+                      s0 = selection$$1[1][1];
+                    }
+
+                    w1 = w0;
+                    n1 = n0;
+                    e1 = e0;
+                    s1 = s0;
+
+                    var group = select(that)
+                        .attr("pointer-events", "none");
+
+                    var overlay = group.selectAll(".overlay")
+                        .attr("cursor", cursors[type]);
+
+                    if (exports.event.touches) {
+                      group
+                          .on("touchmove.brush", moved, true)
+                          .on("touchend.brush touchcancel.brush", ended, true);
+                    } else {
+                      var view = select(exports.event.view)
+                          .on("keydown.brush", keydowned, true)
+                          .on("keyup.brush", keyupped, true)
+                          .on("mousemove.brush", moved, true)
+                          .on("mouseup.brush", ended, true);
+
+                      dragDisable(exports.event.view);
+                    }
+
+                    nopropagation$2();
+                    interrupt(that);
+                    redraw.call(that);
+                    emit.start();
+
+                    function moved() {
+                      var point1 = mouse(that);
+                      if (shifting && !lockX && !lockY) {
+                        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
+                        else lockX = true;
+                      }
+                      point = point1;
+                      moving = true;
+                      noevent$2();
+                      move();
+                    }
+
+                    function move() {
+                      var t;
+
+                      dx = point[0] - point0[0];
+                      dy = point[1] - point0[1];
+
+                      switch (mode) {
+                        case MODE_SPACE:
+                        case MODE_DRAG: {
+                          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
+                          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
+                          break;
+                        }
+                        case MODE_HANDLE: {
+                          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
+                          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
+                          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
+                          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
+                          break;
+                        }
+                        case MODE_CENTER: {
+                          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
+                          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
+                          break;
+                        }
+                      }
+
+                      if (e1 < w1) {
+                        signX *= -1;
+                        t = w0, w0 = e0, e0 = t;
+                        t = w1, w1 = e1, e1 = t;
+                        if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
+                      }
+
+                      if (s1 < n1) {
+                        signY *= -1;
+                        t = n0, n0 = s0, s0 = t;
+                        t = n1, n1 = s1, s1 = t;
+                        if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
+                      }
+
+                      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
+                      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
+                      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
+
+                      if (selection$$1[0][0] !== w1
+                          || selection$$1[0][1] !== n1
+                          || selection$$1[1][0] !== e1
+                          || selection$$1[1][1] !== s1) {
+                        state.selection = [[w1, n1], [e1, s1]];
+                        redraw.call(that);
+                        emit.brush();
+                      }
+                    }
+
+                    function ended() {
+                      nopropagation$2();
+                      if (exports.event.touches) {
+                        if (exports.event.touches.length) return;
+                        if (touchending) clearTimeout(touchending);
+                        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+                        group.on("touchmove.brush touchend.brush touchcancel.brush", null);
+                      } else {
+                        yesdrag(exports.event.view, moving);
+                        view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
+                      }
+                      group.attr("pointer-events", "all");
+                      overlay.attr("cursor", cursors.overlay);
+                      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
+                      if (empty$1(selection$$1)) state.selection = null, redraw.call(that);
+                      emit.end();
+                    }
+
+                    function keydowned() {
+                      switch (exports.event.keyCode) {
+                        case 16: { // SHIFT
+                          shifting = signX && signY;
+                          break;
+                        }
+                        case 18: { // ALT
+                          if (mode === MODE_HANDLE) {
+                            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+                            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+                            mode = MODE_CENTER;
+                            move();
+                          }
+                          break;
+                        }
+                        case 32: { // SPACE; takes priority over ALT
+                          if (mode === MODE_HANDLE || mode === MODE_CENTER) {
+                            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
+                            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
+                            mode = MODE_SPACE;
+                            overlay.attr("cursor", cursors.selection);
+                            move();
+                          }
+                          break;
+                        }
+                        default: return;
+                      }
+                      noevent$2();
+                    }
+
+                    function keyupped() {
+                      switch (exports.event.keyCode) {
+                        case 16: { // SHIFT
+                          if (shifting) {
+                            lockX = lockY = shifting = false;
+                            move();
+                          }
+                          break;
+                        }
+                        case 18: { // ALT
+                          if (mode === MODE_CENTER) {
+                            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+                            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+                            mode = MODE_HANDLE;
+                            move();
+                          }
+                          break;
+                        }
+                        case 32: { // SPACE
+                          if (mode === MODE_SPACE) {
+                            if (exports.event.altKey) {
+                              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+                              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+                              mode = MODE_CENTER;
+                            } else {
+                              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+                              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+                              mode = MODE_HANDLE;
+                            }
+                            overlay.attr("cursor", cursors[type]);
+                            move();
+                          }
+                          break;
+                        }
+                        default: return;
+                      }
+                      noevent$2();
+                    }
+                  }
+
+                  function initialize() {
+                    var state = this.__brush || {selection: null};
+                    state.extent = extent.apply(this, arguments);
+                    state.dim = dim;
+                    return state;
+                  }
+
+                  brush.extent = function(_) {
+                    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
+                  };
+
+                  brush.filter = function(_) {
+                    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter;
+                  };
+
+                  brush.handleSize = function(_) {
+                    return arguments.length ? (handleSize = +_, brush) : handleSize;
+                  };
+
+                  brush.on = function() {
+                    var value = listeners.on.apply(listeners, arguments);
+                    return value === listeners ? brush : value;
+                  };
+
+                  return brush;
+                }
+
+                var cos = Math.cos;
+                var sin = Math.sin;
+                var pi$3 = Math.PI;
+                var halfPi$2 = pi$3 / 2;
+                var tau$3 = pi$3 * 2;
+                var max$1 = Math.max;
+
+                function compareValue(compare) {
+                  return function(a, b) {
+                    return compare(
+                      a.source.value + a.target.value,
+                      b.source.value + b.target.value
+                    );
+                  };
+                }
+
+                var chord = function() {
+                  var padAngle = 0,
+                      sortGroups = null,
+                      sortSubgroups = null,
+                      sortChords = null;
+
+                  function chord(matrix) {
+                    var n = matrix.length,
+                        groupSums = [],
+                        groupIndex = range(n),
+                        subgroupIndex = [],
+                        chords = [],
+                        groups = chords.groups = new Array(n),
+                        subgroups = new Array(n * n),
+                        k,
+                        x,
+                        x0,
+                        dx,
+                        i,
+                        j;
+
+                    // Compute the sum.
+                    k = 0, i = -1; while (++i < n) {
+                      x = 0, j = -1; while (++j < n) {
+                        x += matrix[i][j];
+                      }
+                      groupSums.push(x);
+                      subgroupIndex.push(range(n));
+                      k += x;
+                    }
+
+                    // Sort groups…
+                    if (sortGroups) groupIndex.sort(function(a, b) {
+                      return sortGroups(groupSums[a], groupSums[b]);
+                    });
+
+                    // Sort subgroups…
+                    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
+                      d.sort(function(a, b) {
+                        return sortSubgroups(matrix[i][a], matrix[i][b]);
+                      });
+                    });
+
+                    // Convert the sum to scaling factor for [0, 2pi].
+                    // TODO Allow start and end angle to be specified?
+                    // TODO Allow padding to be specified as percentage?
+                    k = max$1(0, tau$3 - padAngle * n) / k;
+                    dx = k ? padAngle : tau$3 / n;
+
+                    // Compute the start and end angle for each group and subgroup.
+                    // Note: Opera has a bug reordering object literal properties!
+                    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[dj * n + di] = {
+                          index: di,
+                          subindex: dj,
+                          startAngle: a0,
+                          endAngle: a1,
+                          value: v
+                        };
+                      }
+                      groups[di] = {
+                        index: di,
+                        startAngle: x0,
+                        endAngle: x,
+                        value: groupSums[di]
+                      };
+                      x += dx;
+                    }
+
+                    // Generate chords for each (non-empty) subgroup-subgroup link.
+                    i = -1; while (++i < n) {
+                      j = i - 1; while (++j < n) {
+                        var source = subgroups[j * n + i],
+                            target = subgroups[i * n + j];
+                        if (source.value || target.value) {
+                          chords.push(source.value < target.value
+                              ? {source: target, target: source}
+                              : {source: source, target: target});
+                        }
+                      }
+                    }
+
+                    return sortChords ? chords.sort(sortChords) : chords;
+                  }
+
+                  chord.padAngle = function(_) {
+                    return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
+                  };
+
+                  chord.sortGroups = function(_) {
+                    return arguments.length ? (sortGroups = _, chord) : sortGroups;
+                  };
+
+                  chord.sortSubgroups = function(_) {
+                    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
+                  };
+
+                  chord.sortChords = function(_) {
+                    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
+                  };
+
+                  return chord;
+                };
+
+                var slice$5 = Array.prototype.slice;
+
+                var constant$12 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                function defaultSource(d) {
+                  return d.source;
+                }
+
+                function defaultTarget(d) {
+                  return d.target;
+                }
+
+                function defaultRadius$1(d) {
+                  return d.radius;
+                }
+
+                function defaultStartAngle(d) {
+                  return d.startAngle;
+                }
+
+                function defaultEndAngle(d) {
+                  return d.endAngle;
+                }
+
+                var ribbon = function() {
+                  var source = defaultSource,
+                      target = defaultTarget,
+                      radius = defaultRadius$1,
+                      startAngle = defaultStartAngle,
+                      endAngle = defaultEndAngle,
+                      context = null;
+
+                  function ribbon() {
+                    var buffer,
+                        argv = slice$5.call(arguments),
+                        s = source.apply(this, argv),
+                        t = target.apply(this, argv),
+                        sr = +radius.apply(this, (argv[0] = s, argv)),
+                        sa0 = startAngle.apply(this, argv) - halfPi$2,
+                        sa1 = endAngle.apply(this, argv) - halfPi$2,
+                        sx0 = sr * cos(sa0),
+                        sy0 = sr * sin(sa0),
+                        tr = +radius.apply(this, (argv[0] = t, argv)),
+                        ta0 = startAngle.apply(this, argv) - halfPi$2,
+                        ta1 = endAngle.apply(this, argv) - halfPi$2;
+
+                    if (!context) context = buffer = path();
+
+                    context.moveTo(sx0, sy0);
+                    context.arc(0, 0, sr, sa0, sa1);
+                    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
+                      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
+                      context.arc(0, 0, tr, ta0, ta1);
+                    }
+                    context.quadraticCurveTo(0, 0, sx0, sy0);
+                    context.closePath();
+
+                    if (buffer) return context = null, buffer + "" || null;
+                  }
+
+                  ribbon.radius = function(_) {
+                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius;
+                  };
+
+                  ribbon.startAngle = function(_) {
+                    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle;
+                  };
+
+                  ribbon.endAngle = function(_) {
+                    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle;
+                  };
+
+                  ribbon.source = function(_) {
+                    return arguments.length ? (source = _, ribbon) : source;
+                  };
+
+                  ribbon.target = function(_) {
+                    return arguments.length ? (target = _, ribbon) : target;
+                  };
+
+                  ribbon.context = function(_) {
+                    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
+                  };
+
+                  return ribbon;
+                };
+
+                // Adds floating point numbers with twice the normal precision.
+                // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
+                // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
+                // 305–363 (1997).
+                // Code adapted from GeographicLib by Charles F. F. Karney,
+                // http://geographiclib.sourceforge.net/
+
+                var adder = function() {
+                  return new Adder;
+                };
+
+                function Adder() {
+                  this.reset();
+                }
+
+                Adder.prototype = {
+                  constructor: Adder,
+                  reset: function() {
+                    this.s = // rounded value
+                    this.t = 0; // exact error
+                  },
+                  add: function(y) {
+                    add$1(temp, y, this.t);
+                    add$1(this, temp.s, this.s);
+                    if (this.s) this.t += temp.t;
+                    else this.s = temp.t;
+                  },
+                  valueOf: function() {
+                    return this.s;
+                  }
+                };
+
+                var temp = new Adder;
+
+                function add$1(adder, a, b) {
+                  var x = adder.s = a + b,
+                      bv = x - a,
+                      av = x - bv;
+                  adder.t = (a - av) + (b - bv);
+                }
+
+                var epsilon$4 = 1e-6;
+                var epsilon2$2 = 1e-12;
+                var pi$4 = Math.PI;
+                var halfPi$3 = pi$4 / 2;
+                var quarterPi = pi$4 / 4;
+                var tau$4 = pi$4 * 2;
+
+                var degrees$1 = 180 / pi$4;
+                var radians = pi$4 / 180;
+
+                var abs = Math.abs;
+                var atan = Math.atan;
+                var atan2 = Math.atan2;
+                var cos$1 = Math.cos;
+                var ceil = Math.ceil;
+                var exp = Math.exp;
+
+                var log$1 = Math.log;
+                var pow$1 = Math.pow;
+                var sin$1 = Math.sin;
+                var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
+                var sqrt$1 = Math.sqrt;
+                var tan = Math.tan;
+
+                function acos(x) {
+                  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
+                }
+
+                function asin$1(x) {
+                  return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);
+                }
+
+                function haversin(x) {
+                  return (x = sin$1(x / 2)) * x;
+                }
+
+                function noop$2() {}
+
+                function streamGeometry(geometry, stream) {
+                  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
+                    streamGeometryType[geometry.type](geometry, stream);
+                  }
+                }
+
+                var streamObjectType = {
+                  Feature: function(feature, stream) {
+                    streamGeometry(feature.geometry, stream);
+                  },
+                  FeatureCollection: function(object, stream) {
+                    var features = object.features, i = -1, n = features.length;
+                    while (++i < n) streamGeometry(features[i].geometry, stream);
+                  }
+                };
+
+                var streamGeometryType = {
+                  Sphere: function(object, stream) {
+                    stream.sphere();
+                  },
+                  Point: function(object, stream) {
+                    object = object.coordinates;
+                    stream.point(object[0], object[1], object[2]);
+                  },
+                  MultiPoint: function(object, stream) {
+                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+                    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
+                  },
+                  LineString: function(object, stream) {
+                    streamLine(object.coordinates, stream, 0);
+                  },
+                  MultiLineString: function(object, stream) {
+                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+                    while (++i < n) streamLine(coordinates[i], stream, 0);
+                  },
+                  Polygon: function(object, stream) {
+                    streamPolygon(object.coordinates, stream);
+                  },
+                  MultiPolygon: function(object, stream) {
+                    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+                    while (++i < n) streamPolygon(coordinates[i], stream);
+                  },
+                  GeometryCollection: function(object, stream) {
+                    var geometries = object.geometries, i = -1, n = geometries.length;
+                    while (++i < n) streamGeometry(geometries[i], stream);
+                  }
+                };
+
+                function streamLine(coordinates, stream, closed) {
+                  var i = -1, n = coordinates.length - closed, coordinate;
+                  stream.lineStart();
+                  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
+                  stream.lineEnd();
+                }
+
+                function streamPolygon(coordinates, stream) {
+                  var i = -1, n = coordinates.length;
+                  stream.polygonStart();
+                  while (++i < n) streamLine(coordinates[i], stream, 1);
+                  stream.polygonEnd();
+                }
+
+                var geoStream = function(object, stream) {
+                  if (object && streamObjectType.hasOwnProperty(object.type)) {
+                    streamObjectType[object.type](object, stream);
+                  } else {
+                    streamGeometry(object, stream);
+                  }
+                };
+
+                var areaRingSum = adder();
+
+                var areaSum = adder();
+                var lambda00;
+                var phi00;
+                var lambda0;
+                var cosPhi0;
+                var sinPhi0;
+
+                var areaStream = {
+                  point: noop$2,
+                  lineStart: noop$2,
+                  lineEnd: noop$2,
+                  polygonStart: function() {
+                    areaRingSum.reset();
+                    areaStream.lineStart = areaRingStart;
+                    areaStream.lineEnd = areaRingEnd;
+                  },
+                  polygonEnd: function() {
+                    var areaRing = +areaRingSum;
+                    areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);
+                    this.lineStart = this.lineEnd = this.point = noop$2;
+                  },
+                  sphere: function() {
+                    areaSum.add(tau$4);
+                  }
+                };
+
+                function areaRingStart() {
+                  areaStream.point = areaPointFirst;
+                }
+
+                function areaRingEnd() {
+                  areaPoint(lambda00, phi00);
+                }
+
+                function areaPointFirst(lambda, phi) {
+                  areaStream.point = areaPoint;
+                  lambda00 = lambda, phi00 = phi;
+                  lambda *= radians, phi *= radians;
+                  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
+                }
+
+                function areaPoint(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  phi = phi / 2 + quarterPi; // half the angular distance from south pole
+
+                  // Spherical excess E for a spherical triangle with vertices: south pole,
+                  // previous point, current point.  Uses a formula derived from Cagnoli’s
+                  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
+                  var dLambda = lambda - lambda0,
+                      sdLambda = dLambda >= 0 ? 1 : -1,
+                      adLambda = sdLambda * dLambda,
+                      cosPhi = cos$1(phi),
+                      sinPhi = sin$1(phi),
+                      k = sinPhi0 * sinPhi,
+                      u = cosPhi0 * cosPhi + k * cos$1(adLambda),
+                      v = k * sdLambda * sin$1(adLambda);
+                  areaRingSum.add(atan2(v, u));
+
+                  // Advance the previous points.
+                  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
+                }
+
+                var area$2 = function(object) {
+                  areaSum.reset();
+                  geoStream(object, areaStream);
+                  return areaSum * 2;
+                };
+
+                function spherical(cartesian) {
+                  return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];
+                }
+
+                function cartesian(spherical) {
+                  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
+                  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
+                }
+
+                function cartesianDot(a, b) {
+                  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+                }
+
+                function 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]];
+                }
+
+                // TODO return a
+                function cartesianAddInPlace(a, b) {
+                  a[0] += b[0], a[1] += b[1], a[2] += b[2];
+                }
+
+                function cartesianScale(vector, k) {
+                  return [vector[0] * k, vector[1] * k, vector[2] * k];
+                }
+
+                // TODO return d
+                function cartesianNormalizeInPlace(d) {
+                  var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
+                  d[0] /= l, d[1] /= l, d[2] /= l;
+                }
+
+                var lambda0$1;
+                var phi0;
+                var lambda1;
+                var phi1;
+                var lambda2;
+                var lambda00$1;
+                var phi00$1;
+                var p0;
+                var deltaSum = adder();
+                var ranges;
+                var range$1;
+
+                var boundsStream = {
+                  point: boundsPoint,
+                  lineStart: boundsLineStart,
+                  lineEnd: boundsLineEnd,
+                  polygonStart: function() {
+                    boundsStream.point = boundsRingPoint;
+                    boundsStream.lineStart = boundsRingStart;
+                    boundsStream.lineEnd = boundsRingEnd;
+                    deltaSum.reset();
+                    areaStream.polygonStart();
+                  },
+                  polygonEnd: function() {
+                    areaStream.polygonEnd();
+                    boundsStream.point = boundsPoint;
+                    boundsStream.lineStart = boundsLineStart;
+                    boundsStream.lineEnd = boundsLineEnd;
+                    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
+                    else if (deltaSum > epsilon$4) phi1 = 90;
+                    else if (deltaSum < -epsilon$4) phi0 = -90;
+                    range$1[0] = lambda0$1, range$1[1] = lambda1;
+                  }
+                };
+
+                function boundsPoint(lambda, phi) {
+                  ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
+                  if (phi < phi0) phi0 = phi;
+                  if (phi > phi1) phi1 = phi;
+                }
+
+                function linePoint(lambda, phi) {
+                  var p = cartesian([lambda * radians, phi * radians]);
+                  if (p0) {
+                    var normal = cartesianCross(p0, p),
+                        equatorial = [normal[1], -normal[0], 0],
+                        inflection = cartesianCross(equatorial, normal);
+                    cartesianNormalizeInPlace(inflection);
+                    inflection = spherical(inflection);
+                    var delta = lambda - lambda2,
+                        sign$$1 = delta > 0 ? 1 : -1,
+                        lambdai = inflection[0] * degrees$1 * sign$$1,
+                        phii,
+                        antimeridian = abs(delta) > 180;
+                    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+                      phii = inflection[1] * degrees$1;
+                      if (phii > phi1) phi1 = phii;
+                    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+                      phii = -inflection[1] * degrees$1;
+                      if (phii < phi0) phi0 = phii;
+                    } else {
+                      if (phi < phi0) phi0 = phi;
+                      if (phi > phi1) phi1 = phi;
+                    }
+                    if (antimeridian) {
+                      if (lambda < lambda2) {
+                        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+                      } else {
+                        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+                      }
+                    } else {
+                      if (lambda1 >= lambda0$1) {
+                        if (lambda < lambda0$1) lambda0$1 = lambda;
+                        if (lambda > lambda1) lambda1 = lambda;
+                      } else {
+                        if (lambda > lambda2) {
+                          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+                        } else {
+                          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+                        }
+                      }
+                    }
+                  } else {
+                    boundsPoint(lambda, phi);
+                  }
+                  p0 = p, lambda2 = lambda;
+                }
+
+                function boundsLineStart() {
+                  boundsStream.point = linePoint;
+                }
+
+                function boundsLineEnd() {
+                  range$1[0] = lambda0$1, range$1[1] = lambda1;
+                  boundsStream.point = boundsPoint;
+                  p0 = null;
+                }
+
+                function boundsRingPoint(lambda, phi) {
+                  if (p0) {
+                    var delta = lambda - lambda2;
+                    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
+                  } else {
+                    lambda00$1 = lambda, phi00$1 = phi;
+                  }
+                  areaStream.point(lambda, phi);
+                  linePoint(lambda, phi);
+                }
+
+                function boundsRingStart() {
+                  areaStream.lineStart();
+                }
+
+                function boundsRingEnd() {
+                  boundsRingPoint(lambda00$1, phi00$1);
+                  areaStream.lineEnd();
+                  if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);
+                  range$1[0] = lambda0$1, range$1[1] = lambda1;
+                  p0 = null;
+                }
+
+                // Finds the left-right distance between two longitudes.
+                // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
+                // the distance between ±180° to be 360°.
+                function angle(lambda0, lambda1) {
+                  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
+                }
+
+                function rangeCompare(a, b) {
+                  return a[0] - b[0];
+                }
+
+                function rangeContains(range, x) {
+                  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
+                }
+
+                var bounds = function(feature) {
+                  var i, n, a, b, merged, deltaMax, delta;
+
+                  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
+                  ranges = [];
+                  geoStream(feature, boundsStream);
+
+                  // First, sort ranges by their minimum longitudes.
+                  if (n = ranges.length) {
+                    ranges.sort(rangeCompare);
+
+                    // Then, merge any ranges that overlap.
+                    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
+                      b = ranges[i];
+                      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
+                        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
+                        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
+                      } else {
+                        merged.push(a = b);
+                      }
+                    }
+
+                    // Finally, find the largest gap between the merged ranges.
+                    // The final bounding box will be the inverse of this gap.
+                    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
+                      b = merged[i];
+                      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
+                    }
+                  }
+
+                  ranges = range$1 = null;
+
+                  return lambda0$1 === Infinity || phi0 === Infinity
+                      ? [[NaN, NaN], [NaN, NaN]]
+                      : [[lambda0$1, phi0], [lambda1, phi1]];
+                };
+
+                var W0;
+                var W1;
+                var X0;
+                var Y0;
+                var Z0;
+                var X1;
+                var Y1;
+                var Z1;
+                var X2;
+                var Y2;
+                var Z2;
+                var lambda00$2;
+                var phi00$2;
+                var x0;
+                var y0;
+                var z0; // previous point
+
+                var centroidStream = {
+                  sphere: noop$2,
+                  point: centroidPoint,
+                  lineStart: centroidLineStart,
+                  lineEnd: centroidLineEnd,
+                  polygonStart: function() {
+                    centroidStream.lineStart = centroidRingStart;
+                    centroidStream.lineEnd = centroidRingEnd;
+                  },
+                  polygonEnd: function() {
+                    centroidStream.lineStart = centroidLineStart;
+                    centroidStream.lineEnd = centroidLineEnd;
+                  }
+                };
+
+                // Arithmetic mean of Cartesian vectors.
+                function centroidPoint(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  var cosPhi = cos$1(phi);
+                  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
+                }
+
+                function centroidPointCartesian(x, y, z) {
+                  ++W0;
+                  X0 += (x - X0) / W0;
+                  Y0 += (y - Y0) / W0;
+                  Z0 += (z - Z0) / W0;
+                }
+
+                function centroidLineStart() {
+                  centroidStream.point = centroidLinePointFirst;
+                }
+
+                function centroidLinePointFirst(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  var cosPhi = cos$1(phi);
+                  x0 = cosPhi * cos$1(lambda);
+                  y0 = cosPhi * sin$1(lambda);
+                  z0 = sin$1(phi);
+                  centroidStream.point = centroidLinePoint;
+                  centroidPointCartesian(x0, y0, z0);
+                }
+
+                function centroidLinePoint(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  var cosPhi = cos$1(phi),
+                      x = cosPhi * cos$1(lambda),
+                      y = cosPhi * sin$1(lambda),
+                      z = sin$1(phi),
+                      w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
+                  W1 += w;
+                  X1 += w * (x0 + (x0 = x));
+                  Y1 += w * (y0 + (y0 = y));
+                  Z1 += w * (z0 + (z0 = z));
+                  centroidPointCartesian(x0, y0, z0);
+                }
+
+                function centroidLineEnd() {
+                  centroidStream.point = centroidPoint;
+                }
+
+                // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
+                // J. Applied Mechanics 42, 239 (1975).
+                function centroidRingStart() {
+                  centroidStream.point = centroidRingPointFirst;
+                }
+
+                function centroidRingEnd() {
+                  centroidRingPoint(lambda00$2, phi00$2);
+                  centroidStream.point = centroidPoint;
+                }
+
+                function centroidRingPointFirst(lambda, phi) {
+                  lambda00$2 = lambda, phi00$2 = phi;
+                  lambda *= radians, phi *= radians;
+                  centroidStream.point = centroidRingPoint;
+                  var cosPhi = cos$1(phi);
+                  x0 = cosPhi * cos$1(lambda);
+                  y0 = cosPhi * sin$1(lambda);
+                  z0 = sin$1(phi);
+                  centroidPointCartesian(x0, y0, z0);
+                }
+
+                function centroidRingPoint(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  var cosPhi = cos$1(phi),
+                      x = cosPhi * cos$1(lambda),
+                      y = cosPhi * sin$1(lambda),
+                      z = sin$1(phi),
+                      cx = y0 * z - z0 * y,
+                      cy = z0 * x - x0 * z,
+                      cz = x0 * y - y0 * x,
+                      m = sqrt$1(cx * cx + cy * cy + cz * cz),
+                      u = x0 * x + y0 * y + z0 * z,
+                      v = m && -acos(u) / m, // area weight
+                      w = atan2(m, u); // line weight
+                  X2 += v * cx;
+                  Y2 += v * cy;
+                  Z2 += v * cz;
+                  W1 += w;
+                  X1 += w * (x0 + (x0 = x));
+                  Y1 += w * (y0 + (y0 = y));
+                  Z1 += w * (z0 + (z0 = z));
+                  centroidPointCartesian(x0, y0, z0);
+                }
+
+                var centroid$1 = function(object) {
+                  W0 = W1 =
+                  X0 = Y0 = Z0 =
+                  X1 = Y1 = Z1 =
+                  X2 = Y2 = Z2 = 0;
+                  geoStream(object, centroidStream);
+
+                  var x = X2,
+                      y = Y2,
+                      z = Z2,
+                      m = x * x + y * y + z * z;
+
+                  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
+                  if (m < epsilon2$2) {
+                    x = X1, y = Y1, z = Z1;
+                    // If the feature has zero length, fall back to arithmetic mean of point vectors.
+                    if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;
+                    m = x * x + y * y + z * z;
+                    // If the feature still has an undefined ccentroid, then return.
+                    if (m < epsilon2$2) return [NaN, NaN];
+                  }
+
+                  return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];
+                };
+
+                var constant$13 = function(x) {
+                  return function() {
+                    return x;
+                  };
+                };
+
+                var compose = function(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 rotationIdentity(lambda, phi) {
+                  return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+                }
+
+                rotationIdentity.invert = rotationIdentity;
+
+                function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
+                  return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
+                    : rotationLambda(deltaLambda))
+                    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
+                    : rotationIdentity);
+                }
+
+                function forwardRotationLambda(deltaLambda) {
+                  return function(lambda, phi) {
+                    return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+                  };
+                }
+
+                function rotationLambda(deltaLambda) {
+                  var rotation = forwardRotationLambda(deltaLambda);
+                  rotation.invert = forwardRotationLambda(-deltaLambda);
+                  return rotation;
+                }
+
+                function rotationPhiGamma(deltaPhi, deltaGamma) {
+                  var cosDeltaPhi = cos$1(deltaPhi),
+                      sinDeltaPhi = sin$1(deltaPhi),
+                      cosDeltaGamma = cos$1(deltaGamma),
+                      sinDeltaGamma = sin$1(deltaGamma);
+
+                  function rotation(lambda, phi) {
+                    var cosPhi = cos$1(phi),
+                        x = cos$1(lambda) * cosPhi,
+                        y = sin$1(lambda) * cosPhi,
+                        z = sin$1(phi),
+                        k = z * cosDeltaPhi + x * sinDeltaPhi;
+                    return [
+                      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
+                      asin$1(k * cosDeltaGamma + y * sinDeltaGamma)
+                    ];
+                  }
+
+                  rotation.invert = function(lambda, phi) {
+                    var cosPhi = cos$1(phi),
+                        x = cos$1(lambda) * cosPhi,
+                        y = sin$1(lambda) * cosPhi,
+                        z = sin$1(phi),
+                        k = z * cosDeltaGamma - y * sinDeltaGamma;
+                    return [
+                      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
+                      asin$1(k * cosDeltaPhi - x * sinDeltaPhi)
+                    ];
+                  };
+
+                  return rotation;
+                }
+
+                var rotation = function(rotate) {
+                  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
+
+                  function forward(coordinates) {
+                    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
+                    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+                  }
+
+                  forward.invert = function(coordinates) {
+                    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
+                    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+                  };
+
+                  return forward;
+                };
+
+                // Generates a circle centered at [0°, 0°], with a given radius and precision.
+                function circleStream(stream, radius, delta, direction, t0, t1) {
+                  if (!delta) return;
+                  var cosRadius = cos$1(radius),
+                      sinRadius = sin$1(radius),
+                      step = direction * delta;
+                  if (t0 == null) {
+                    t0 = radius + direction * tau$4;
+                    t1 = radius - step / 2;
+                  } else {
+                    t0 = circleRadius(cosRadius, t0);
+                    t1 = circleRadius(cosRadius, t1);
+                    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;
+                  }
+                  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
+                    point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
+                    stream.point(point[0], point[1]);
+                  }
+                }
+
+                // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
+                function circleRadius(cosRadius, point) {
+                  point = cartesian(point), point[0] -= cosRadius;
+                  cartesianNormalizeInPlace(point);
+                  var radius = acos(-point[1]);
+                  return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;
+                }
+
+                var circle$1 = function() {
+                  var center = constant$13([0, 0]),
+                      radius = constant$13(90),
+                      precision = constant$13(6),
+                      ring,
+                      rotate,
+                      stream = {point: point};
+
+                  function point(x, y) {
+                    ring.push(x = rotate(x, y));
+                    x[0] *= degrees$1, x[1] *= degrees$1;
+                  }
+
+                  function circle() {
+                    var c = center.apply(this, arguments),
+                        r = radius.apply(this, arguments) * radians,
+                        p = precision.apply(this, arguments) * radians;
+                    ring = [];
+                    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
+                    circleStream(stream, r, p, 1);
+                    c = {type: "Polygon", coordinates: [ring]};
+                    ring = rotate = null;
+                    return c;
+                  }
+
+                  circle.center = function(_) {
+                    return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center;
+                  };
+
+                  circle.radius = function(_) {
+                    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius;
+                  };
+
+                  circle.precision = function(_) {
+                    return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision;
+                  };
+
+                  return circle;
+                };
+
+                var clipBuffer = function() {
+                  var lines = [],
+                      line;
+                  return {
+                    point: function(x, y) {
+                      line.push([x, y]);
+                    },
+                    lineStart: function() {
+                      lines.push(line = []);
+                    },
+                    lineEnd: noop$2,
+                    rejoin: function() {
+                      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
+                    },
+                    result: function() {
+                      var result = lines;
+                      lines = [];
+                      line = null;
+                      return result;
+                    }
+                  };
+                };
+
+                var clipLine = function(a, b, x0, y0, x1, y1) {
+                  var ax = a[0],
+                      ay = a[1],
+                      bx = b[0],
+                      by = b[1],
+                      t0 = 0,
+                      t1 = 1,
+                      dx = bx - ax,
+                      dy = by - ay,
+                      r;
+
+                  r = x0 - ax;
+                  if (!dx && r > 0) return;
+                  r /= dx;
+                  if (dx < 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  } else if (dx > 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  }
+
+                  r = x1 - ax;
+                  if (!dx && r < 0) return;
+                  r /= dx;
+                  if (dx < 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  } else if (dx > 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  }
+
+                  r = y0 - ay;
+                  if (!dy && r > 0) return;
+                  r /= dy;
+                  if (dy < 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  } else if (dy > 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  }
+
+                  r = y1 - ay;
+                  if (!dy && r < 0) return;
+                  r /= dy;
+                  if (dy < 0) {
+                    if (r > t1) return;
+                    if (r > t0) t0 = r;
+                  } else if (dy > 0) {
+                    if (r < t0) return;
+                    if (r < t1) t1 = r;
+                  }
+
+                  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
+                  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
+                  return true;
+                };
+
+                var pointEqual = function(a, b) {
+                  return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;
+                };
+
+                function Intersection(point, points, other, entry) {
+                  this.x = point;
+                  this.z = points;
+                  this.o = other; // another intersection
+                  this.e = entry; // is an entry?
+                  this.v = false; // visited
+                  this.n = this.p = null; // next & previous
+                }
+
+                // A generalized polygon clipping algorithm: given a polygon that has been cut
+                // into its visible line segments, and rejoins the segments by interpolating
+                // along the clip edge.
+                var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
+                  var subject = [],
+                      clip = [],
+                      i,
+                      n;
+
+                  segments.forEach(function(segment) {
+                    if ((n = segment.length - 1) <= 0) return;
+                    var n, p0 = segment[0], p1 = segment[n], x;
+
+                    // If the first and last points of a segment are coincident, then treat as a
+                    // closed ring. TODO if all rings are closed, then the winding order of the
+                    // exterior ring should be checked.
+                    if (pointEqual(p0, p1)) {
+                      stream.lineStart();
+                      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
+                      stream.lineEnd();
+                      return;
+                    }
+
+                    subject.push(x = new Intersection(p0, segment, null, true));
+                    clip.push(x.o = new Intersection(p0, null, x, false));
+                    subject.push(x = new Intersection(p1, segment, null, false));
+                    clip.push(x.o = new Intersection(p1, null, x, true));
+                  });
+
+                  if (!subject.length) return;
+
+                  clip.sort(compareIntersection);
+                  link$1(subject);
+                  link$1(clip);
+
+                  for (i = 0, n = clip.length; i < n; ++i) {
+                    clip[i].e = startInside = !startInside;
+                  }
+
+                  var start = subject[0],
+                      points,
+                      point;
+
+                  while (1) {
+                    // Find first unvisited intersection.
+                    var current = start,
+                        isSubject = true;
+                    while (current.v) if ((current = current.n) === start) return;
+                    points = current.z;
+                    stream.lineStart();
+                    do {
+                      current.v = current.o.v = true;
+                      if (current.e) {
+                        if (isSubject) {
+                          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
+                        } else {
+                          interpolate(current.x, current.n.x, 1, stream);
+                        }
+                        current = current.n;
+                      } else {
+                        if (isSubject) {
+                          points = current.p.z;
+                          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
+                        } else {
+                          interpolate(current.x, current.p.x, -1, stream);
+                        }
+                        current = current.p;
+                      }
+                      current = current.o;
+                      points = current.z;
+                      isSubject = !isSubject;
+                    } while (!current.v);
+                    stream.lineEnd();
+                  }
+                };
+
+                function link$1(array) {
+                  if (!(n = array.length)) return;
+                  var n,
+                      i = 0,
+                      a = array[0],
+                      b;
+                  while (++i < n) {
+                    a.n = b = array[i];
+                    b.p = a;
+                    a = b;
+                  }
+                  a.n = b = array[0];
+                  b.p = a;
+                }
+
+                var clipMax = 1e9;
+                var clipMin = -clipMax;
+
+                // TODO Use d3-polygon’s polygonContains here for the ring check?
+                // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
+
+                function clipExtent(x0, y0, x1, y1) {
+
+                  function visible(x, y) {
+                    return x0 <= x && x <= x1 && y0 <= y && y <= y1;
+                  }
+
+                  function interpolate(from, to, direction, stream) {
+                    var a = 0, a1 = 0;
+                    if (from == null
+                        || (a = corner(from, direction)) !== (a1 = corner(to, direction))
+                        || comparePoint(from, to) < 0 ^ direction > 0) {
+                      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
+                      while ((a = (a + direction + 4) % 4) !== a1);
+                    } else {
+                      stream.point(to[0], to[1]);
+                    }
+                  }
+
+                  function corner(p, direction) {
+                    return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3
+                        : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1
+                        : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0
+                        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
+                  }
+
+                  function compareIntersection(a, b) {
+                    return comparePoint(a.x, b.x);
+                  }
+
+                  function comparePoint(a, b) {
+                    var ca = corner(a, 1),
+                        cb = corner(b, 1);
+                    return ca !== cb ? ca - cb
+                        : ca === 0 ? b[1] - a[1]
+                        : ca === 1 ? a[0] - b[0]
+                        : ca === 2 ? a[1] - b[1]
+                        : b[0] - a[0];
+                  }
+
+                  return function(stream) {
+                    var activeStream = stream,
+                        bufferStream = clipBuffer(),
+                        segments,
+                        polygon,
+                        ring,
+                        x__, y__, v__, // first point
+                        x_, y_, v_, // previous point
+                        first,
+                        clean;
+
+                    var clipStream = {
+                      point: point,
+                      lineStart: lineStart,
+                      lineEnd: lineEnd,
+                      polygonStart: polygonStart,
+                      polygonEnd: polygonEnd
+                    };
+
+                    function point(x, y) {
+                      if (visible(x, y)) activeStream.point(x, y);
+                    }
+
+                    function polygonInside() {
+                      var winding = 0;
+
+                      for (var i = 0, n = polygon.length; i < n; ++i) {
+                        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
+                          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
+                          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
+                          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
+                        }
+                      }
+
+                      return winding;
+                    }
+
+                    // Buffer geometry within a polygon and then clip it en masse.
+                    function polygonStart() {
+                      activeStream = bufferStream, segments = [], polygon = [], clean = true;
+                    }
+
+                    function polygonEnd() {
+                      var startInside = polygonInside(),
+                          cleanInside = clean && startInside,
+                          visible = (segments = merge(segments)).length;
+                      if (cleanInside || visible) {
+                        stream.polygonStart();
+                        if (cleanInside) {
+                          stream.lineStart();
+                          interpolate(null, null, 1, stream);
+                          stream.lineEnd();
+                        }
+                        if (visible) {
+                          clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
+                        }
+                        stream.polygonEnd();
+                      }
+                      activeStream = stream, segments = polygon = ring = null;
+                    }
+
+                    function lineStart() {
+                      clipStream.point = linePoint;
+                      if (polygon) polygon.push(ring = []);
+                      first = true;
+                      v_ = false;
+                      x_ = y_ = NaN;
+                    }
+
+                    // TODO rather than special-case polygons, simply handle them separately.
+                    // Ideally, coincident intersection points should be jittered to avoid
+                    // clipping issues.
+                    function lineEnd() {
+                      if (segments) {
+                        linePoint(x__, y__);
+                        if (v__ && v_) bufferStream.rejoin();
+                        segments.push(bufferStream.result());
+                      }
+                      clipStream.point = point;
+                      if (v_) activeStream.lineEnd();
+                    }
+
+                    function linePoint(x, y) {
+                      var v = visible(x, y);
+                      if (polygon) ring.push([x, y]);
+                      if (first) {
+                        x__ = x, y__ = y, v__ = v;
+                        first = false;
+                        if (v) {
+                          activeStream.lineStart();
+                          activeStream.point(x, y);
+                        }
+                      } else {
+                        if (v && v_) activeStream.point(x, y);
+                        else {
+                          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
+                              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
+                          if (clipLine(a, b, x0, y0, x1, y1)) {
+                            if (!v_) {
+                              activeStream.lineStart();
+                              activeStream.point(a[0], a[1]);
+                            }
+                            activeStream.point(b[0], b[1]);
+                            if (!v) activeStream.lineEnd();
+                            clean = false;
+                          } else if (v) {
+                            activeStream.lineStart();
+                            activeStream.point(x, y);
+                            clean = false;
+                          }
+                        }
+                      }
+                      x_ = x, y_ = y, v_ = v;
+                    }
+
+                    return clipStream;
+                  };
+                }
+
+                var extent$1 = function() {
+                  var x0 = 0,
+                      y0 = 0,
+                      x1 = 960,
+                      y1 = 500,
+                      cache,
+                      cacheStream,
+                      clip;
+
+                  return clip = {
+                    stream: function(stream) {
+                      return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
+                    },
+                    extent: function(_) {
+                      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
+                    }
+                  };
+                };
+
+                var lengthSum = adder();
+                var lambda0$2;
+                var sinPhi0$1;
+                var cosPhi0$1;
+
+                var lengthStream = {
+                  sphere: noop$2,
+                  point: noop$2,
+                  lineStart: lengthLineStart,
+                  lineEnd: noop$2,
+                  polygonStart: noop$2,
+                  polygonEnd: noop$2
+                };
+
+                function lengthLineStart() {
+                  lengthStream.point = lengthPointFirst;
+                  lengthStream.lineEnd = lengthLineEnd;
+                }
+
+                function lengthLineEnd() {
+                  lengthStream.point = lengthStream.lineEnd = noop$2;
+                }
+
+                function lengthPointFirst(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
+                  lengthStream.point = lengthPoint;
+                }
+
+                function lengthPoint(lambda, phi) {
+                  lambda *= radians, phi *= radians;
+                  var sinPhi = sin$1(phi),
+                      cosPhi = cos$1(phi),
+                      delta = abs(lambda - lambda0$2),
+                      cosDelta = cos$1(delta),
+                      sinDelta = sin$1(delta),
+                      x = cosPhi * sinDelta,
+                      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
+                      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
+                  lengthSum.add(atan2(sqrt$1(x * x + y * y), z));
+                  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
+                }
+
+                var length$2 = function(object) {
+                  lengthSum.reset();
+                  geoStream(object, lengthStream);
+                  return +lengthSum;
+                };
+
+                var coordinates = [null, null];
+                var object$1 = {type: "LineString", coordinates: coordinates};
+
+                var distance = function(a, b) {
+                  coordinates[0] = a;
+                  coordinates[1] = b;
+                  return length$2(object$1);
+                };
+
+                function graticuleX(y0, y1, dy) {
+                  var y = range(y0, y1 - epsilon$4, dy).concat(y1);
+                  return function(x) { return y.map(function(y) { return [x, y]; }); };
+                }
+
+                function graticuleY(x0, x1, dx) {
+                  var x = range(x0, x1 - epsilon$4, dx).concat(x1);
+                  return function(y) { return x.map(function(x) { return [x, y]; }); };
+                }
+
+                function graticule() {
+                  var x1, x0, X1, X0,
+                      y1, y0, Y1, Y0,
+                      dx = 10, dy = dx, DX = 90, DY = 360,
+                      x, y, X, Y,
+                      precision = 2.5;
+
+                  function graticule() {
+                    return {type: "MultiLineString", coordinates: lines()};
+                  }
+
+                  function lines() {
+                    return range(ceil(X0 / DX) * DX, X1, DX).map(X)
+                        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
+                        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))
+                        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).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 graticule.extentMinor();
+                    return graticule.extentMajor(_).extentMinor(_);
+                  };
+
+                  graticule.extentMajor = 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.extentMinor = 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 graticule.stepMinor();
+                    return graticule.stepMajor(_).stepMinor(_);
+                  };
+
+                  graticule.stepMajor = function(_) {
+                    if (!arguments.length) return [DX, DY];
+                    DX = +_[0], DY = +_[1];
+                    return graticule;
+                  };
+
+                  graticule.stepMinor = function(_) {
+                    if (!arguments.length) return [dx, dy];
+                    dx = +_[0], dy = +_[1];
+                    return graticule;
+                  };
+
+                  graticule.precision = function(_) {
+                    if (!arguments.length) return precision;
+                    precision = +_;
+                    x = graticuleX(y0, y1, 90);
+                    y = graticuleY(x0, x1, precision);
+                    X = graticuleX(Y0, Y1, 90);
+                    Y = graticuleY(X0, X1, precision);
+                    return graticule;
+                  };
+
+                  return graticule
+                      .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])
+                      .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);
+                }
+
+                function graticule10() {
+                  return graticule()();
+                }
+
+                var interpolate$2 = function(a, b) {
+                  var x0 = a[0] * radians,
+                      y0 = a[1] * radians,
+                      x1 = b[0] * radians,
+                      y1 = b[1] * radians,
+                      cy0 = cos$1(y0),
+                      sy0 = sin$1(y0),
+                      cy1 = cos$1(y1),
+                      sy1 = sin$1(y1),
+                      kx0 = cy0 * cos$1(x0),
+                      ky0 = cy0 * sin$1(x0),
+                      kx1 = cy1 * cos$1(x1),
+                      ky1 = cy1 * sin$1(x1),
+                      d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
+                      k = sin$1(d);
+
+                  var interpolate = d ? function(t) {
+                    var B = sin$1(t *= d) / k,
+                        A = sin$1(d - t) / k,
+                        x = A * kx0 + B * kx1,
+                        y = A * ky0 + B * ky1,
+                        z = A * sy0 + B * sy1;
+                    return [
+                      atan2(y, x) * degrees$1,
+                      atan2(z, sqrt$1(x * x + y * y)) * degrees$1
+                    ];
+                  } : function() {
+                    return [x0 * degrees$1, y0 * degrees$1];
+                  };
+
+                  interpolate.distance = d;
+
+                  return interpolate;
+                };
+
+                var identity$7 = function(x) {
+                  return x;
+                };
+
+                var areaSum$1 = adder();
+                var areaRingSum$1 = adder();
+                var x00;
+                var y00;
+                var x0$1;
+                var y0$1;
+
+                var areaStream$1 = {
+                  point: noop$2,
+                  lineStart: noop$2,
+                  lineEnd: noop$2,
+                  polygonStart: function() {
+                    areaStream$1.lineStart = areaRingStart$1;
+                    areaStream$1.lineEnd = areaRingEnd$1;
+                  },
+                  polygonEnd: function() {
+                    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;
+                    areaSum$1.add(abs(areaRingSum$1));
+                    areaRingSum$1.reset();
+                  },
+                  result: function() {
+                    var area = areaSum$1 / 2;
+                    areaSum$1.reset();
+                    return area;
+                  }
+                };
+
+                function areaRingStart$1() {
+                  areaStream$1.point = areaPointFirst$1;
+                }
+
+                function areaPointFirst$1(x, y) {
+                  areaStream$1.point = areaPoint$1;
+                  x00 = x0$1 = x, y00 = y0$1 = y;
+                }
+
+                function areaPoint$1(x, y) {
+                  areaRingSum$1.add(y0$1 * x - x0$1 * y);
+                  x0$1 = x, y0$1 = y;
+                }
+
+                function areaRingEnd$1() {
+                  areaPoint$1(x00, y00);
+                }
+
+                var x0$2 = Infinity;
+                var y0$2 = x0$2;
+                var x1 = -x0$2;
+                var y1 = x1;
+
+                var boundsStream$1 = {
+                  point: boundsPoint$1,
+                  lineStart: noop$2,
+                  lineEnd: noop$2,
+                  polygonStart: noop$2,
+                  polygonEnd: noop$2,
+                  result: function() {
+                    var bounds = [[x0$2, y0$2], [x1, y1]];
+                    x1 = y1 = -(y0$2 = x0$2 = Infinity);
+                    return bounds;
+                  }
+                };
+
+                function boundsPoint$1(x, y) {
+                  if (x < x0$2) x0$2 = x;
+                  if (x > x1) x1 = x;
+                  if (y < y0$2) y0$2 = y;
+                  if (y > y1) y1 = y;
+                }
+
+                // TODO Enforce positive area for exterior, negative area for interior?
+
+                var X0$1 = 0;
+                var Y0$1 = 0;
+                var Z0$1 = 0;
+                var X1$1 = 0;
+                var Y1$1 = 0;
+                var Z1$1 = 0;
+                var X2$1 = 0;
+                var Y2$1 = 0;
+                var Z2$1 = 0;
+                var x00$1;
+                var y00$1;
+                var x0$3;
+                var y0$3;
+
+                var centroidStream$1 = {
+                  point: centroidPoint$1,
+                  lineStart: centroidLineStart$1,
+                  lineEnd: centroidLineEnd$1,
+                  polygonStart: function() {
+                    centroidStream$1.lineStart = centroidRingStart$1;
+                    centroidStream$1.lineEnd = centroidRingEnd$1;
+                  },
+                  polygonEnd: function() {
+                    centroidStream$1.point = centroidPoint$1;
+                    centroidStream$1.lineStart = centroidLineStart$1;
+                    centroidStream$1.lineEnd = centroidLineEnd$1;
+                  },
+                  result: function() {
+                    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
+                        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
+                        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
+                        : [NaN, NaN];
+                    X0$1 = Y0$1 = Z0$1 =
+                    X1$1 = Y1$1 = Z1$1 =
+                    X2$1 = Y2$1 = Z2$1 = 0;
+                    return centroid;
+                  }
+                };
+
+                function centroidPoint$1(x, y) {
+                  X0$1 += x;
+                  Y0$1 += y;
+                  ++Z0$1;
+                }
+
+                function centroidLineStart$1() {
+                  centroidStream$1.point = centroidPointFirstLine;
+                }
+
+                function centroidPointFirstLine(x, y) {
+                  centroidStream$1.point = centroidPointLine;
+                  centroidPoint$1(x0$3 = x, y0$3 = y);
+                }
+
+                function centroidPointLine(x, y) {
+                  var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);
+                  X1$1 += z * (x0$3 + x) / 2;
+                  Y1$1 += z * (y0$3 + y) / 2;
+                  Z1$1 += z;
+                  centroidPoint$1(x0$3 = x, y0$3 = y);
+                }
+
+                function centroidLineEnd$1() {
+                  centroidStream$1.point = centroidPoint$1;
+                }
+
+                function centroidRingStart$1() {
+                  centroidStream$1.point = centroidPointFirstRing;
+                }
+
+                function centroidRingEnd$1() {
+                  centroidPointRing(x00$1, y00$1);
+                }
+
+                function centroidPointFirstRing(x, y) {
+                  centroidStream$1.point = centroidPointRing;
+                  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
+                }
+
+                function centroidPointRing(x, y) {
+                  var dx = x - x0$3,
+                      dy = y - y0$3,
+                      z = sqrt$1(dx * dx + dy * dy);
+
+                  X1$1 += z * (x0$3 + x) / 2;
+                  Y1$1 += z * (y0$3 + y) / 2;
+                  Z1$1 += z;
+
+                  z = y0$3 * x - x0$3 * y;
+                  X2$1 += z * (x0$3 + x);
+                  Y2$1 += z * (y0$3 + y);
+                  Z2$1 += z * 3;
+                  centroidPoint$1(x0$3 = x, y0$3 = y);
+                }
+
+                function PathContext(context) {
+                  this._context = context;
+                }
+
+                PathContext.prototype = {
+                  _radius: 4.5,
+                  pointRadius: function(_) {
+                    return this._radius = _, this;
+                  },
+                  polygonStart: function() {
+                    this._line = 0;
+                  },
+                  polygonEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line === 0) this._context.closePath();
+                    this._point = NaN;
+                  },
+                  point: function(x, y) {
+                    switch (this._point) {
+                      case 0: {
+                        this._context.moveTo(x, y);
+                        this._point = 1;
+                        break;
+                      }
+                      case 1: {
+                        this._context.lineTo(x, y);
+                        break;
+                      }
+                      default: {
+                        this._context.moveTo(x + this._radius, y);
+                        this._context.arc(x, y, this._radius, 0, tau$4);
+                        break;
+                      }
+                    }
+                  },
+                  result: noop$2
+                };
+
+                function PathString() {
+                  this._string = [];
+                }
+
+                PathString.prototype = {
+                  _circle: circle$2(4.5),
+                  pointRadius: function(_) {
+                    return this._circle = circle$2(_), this;
+                  },
+                  polygonStart: function() {
+                    this._line = 0;
+                  },
+                  polygonEnd: function() {
+                    this._line = NaN;
+                  },
+                  lineStart: function() {
+                    this._point = 0;
+                  },
+                  lineEnd: function() {
+                    if (this._line === 0) this._string.push("Z");
+                    this._point = NaN;
+                  },
+                  point: function(x, y) {
+                    switch (this._point) {
+                      case 0: {
+                        this._string.push("M", x, ",", y);
+                        this._point = 1;
+                        break;
+                      }
+                      case 1: {
+                        this._string.push("L", x, ",", y);
+                        break;
+                      }
+                      default: {
+                        this._string.push("M", x, ",", y, this._circle);
+                        break;
+                      }
+                    }
+                  },
+                  result: function() {
+                    if (this._string.length) {
+                      var result = this._string.join("");
+                      this._string = [];
+                      return result;
+                    }
+                  }
+                };
+
+                function circle$2(radius) {
+                  return "m0," + radius
+                      + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
+                      + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
+                      + "z";
+                }
+
+                var index$3 = function(projection, context) {
+                  var pointRadius = 4.5,
+                      projectionStream,
+                      contextStream;
+
+                  function path(object) {
+                    if (object) {
+                      if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
+                      geoStream(object, projectionStream(contextStream));
+                    }
+                    return contextStream.result();
+                  }
+
+                  path.area = function(object) {
+                    geoStream(object, projectionStream(areaStream$1));
+                    return areaStream$1.result();
+                  };
+
+                  path.bounds = function(object) {
+                    geoStream(object, projectionStream(boundsStream$1));
+                    return boundsStream$1.result();
+                  };
+
+                  path.centroid = function(object) {
+                    geoStream(object, projectionStream(centroidStream$1));
+                    return centroidStream$1.result();
+                  };
+
+                  path.projection = function(_) {
+                    return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;
+                  };
+
+                  path.context = function(_) {
+                    if (!arguments.length) return context;
+                    contextStream = (context = _) == null ? new PathString : new PathContext(_);
+                    if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
+                    return path;
+                  };
+
+                  path.pointRadius = function(_) {
+                    if (!arguments.length) return pointRadius;
+                    pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
+                    return path;
+                  };
+
+                  return path.projection(projection).context(context);
+                };
+
+                var sum$2 = adder();
+
+                var polygonContains = function(polygon, point) {
+                  var lambda = point[0],
+                      phi = point[1],
+                      normal = [sin$1(lambda), -cos$1(lambda), 0],
+                      angle = 0,
+                      winding = 0;
+
+                  sum$2.reset();
+
+                  for (var i = 0, n = polygon.length; i < n; ++i) {
+                    if (!(m = (ring = polygon[i]).length)) continue;
+                    var ring,
+                        m,
+                        point0 = ring[m - 1],
+                        lambda0 = point0[0],
+                        phi0 = point0[1] / 2 + quarterPi,
+                        sinPhi0 = sin$1(phi0),
+                        cosPhi0 = cos$1(phi0);
+
+                    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
+                      var point1 = ring[j],
+                          lambda1 = point1[0],
+                          phi1 = point1[1] / 2 + quarterPi,
+                          sinPhi1 = sin$1(phi1),
+                          cosPhi1 = cos$1(phi1),
+                          delta = lambda1 - lambda0,
+                          sign$$1 = delta >= 0 ? 1 : -1,
+                          absDelta = sign$$1 * delta,
+                          antimeridian = absDelta > pi$4,
+                          k = sinPhi0 * sinPhi1;
+
+                      sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
+                      angle += antimeridian ? delta + sign$$1 * tau$4 : delta;
+
+                      // Are the longitudes either side of the point’s meridian (lambda),
+                      // and are the latitudes smaller than the parallel (phi)?
+                      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
+                        var arc = cartesianCross(cartesian(point0), cartesian(point1));
+                        cartesianNormalizeInPlace(arc);
+                        var intersection = cartesianCross(normal, arc);
+                        cartesianNormalizeInPlace(intersection);
+                        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);
+                        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
+                          winding += antimeridian ^ delta >= 0 ? 1 : -1;
+                        }
+                      }
+                    }
+                  }
+
+                  // First, determine whether the South pole is inside or outside:
+                  //
+                  // It is inside if:
+                  // * the polygon winds around it in a clockwise direction.
+                  // * the polygon does not (cumulatively) wind around it, but has a negative
+                  //   (counter-clockwise) area.
+                  //
+                  // Second, count the (signed) number of times a segment crosses a lambda
+                  // from the point to the South pole.  If it is zero, then the point is the
+                  // same side as the South pole.
+
+                  return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);
+                };
+
+                var clip = function(pointVisible, clipLine, interpolate, start) {
+                  return function(rotate, sink) {
+                    var line = clipLine(sink),
+                        rotatedStart = rotate.invert(start[0], start[1]),
+                        ringBuffer = clipBuffer(),
+                        ringSink = clipLine(ringBuffer),
+                        polygonStarted = false,
+                        polygon,
+                        segments,
+                        ring;
+
+                    var clip = {
+                      point: point,
+                      lineStart: lineStart,
+                      lineEnd: lineEnd,
+                      polygonStart: function() {
+                        clip.point = pointRing;
+                        clip.lineStart = ringStart;
+                        clip.lineEnd = ringEnd;
+                        segments = [];
+                        polygon = [];
+                      },
+                      polygonEnd: function() {
+                        clip.point = point;
+                        clip.lineStart = lineStart;
+                        clip.lineEnd = lineEnd;
+                        segments = merge(segments);
+                        var startInside = polygonContains(polygon, rotatedStart);
+                        if (segments.length) {
+                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+                          clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
+                        } else if (startInside) {
+                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+                          sink.lineStart();
+                          interpolate(null, null, 1, sink);
+                          sink.lineEnd();
+                        }
+                        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
+                        segments = polygon = null;
+                      },
+                      sphere: function() {
+                        sink.polygonStart();
+                        sink.lineStart();
+                        interpolate(null, null, 1, sink);
+                        sink.lineEnd();
+                        sink.polygonEnd();
+                      }
+                    };
+
+                    function point(lambda, phi) {
+                      var point = rotate(lambda, phi);
+                      if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
+                    }
+
+                    function pointLine(lambda, phi) {
+                      var point = rotate(lambda, phi);
+                      line.point(point[0], point[1]);
+                    }
+
+                    function lineStart() {
+                      clip.point = pointLine;
+                      line.lineStart();
+                    }
+
+                    function lineEnd() {
+                      clip.point = point;
+                      line.lineEnd();
+                    }
+
+                    function pointRing(lambda, phi) {
+                      ring.push([lambda, phi]);
+                      var point = rotate(lambda, phi);
+                      ringSink.point(point[0], point[1]);
+                    }
+
+                    function ringStart() {
+                      ringSink.lineStart();
+                      ring = [];
+                    }
+
+                    function ringEnd() {
+                      pointRing(ring[0][0], ring[0][1]);
+                      ringSink.lineEnd();
+
+                      var clean = ringSink.clean(),
+                          ringSegments = ringBuffer.result(),
+                          i, n = ringSegments.length, m,
+                          segment,
+                          point;
+
+                      ring.pop();
+                      polygon.push(ring);
+                      ring = null;
+
+                      if (!n) return;
+
+                      // No intersections.
+                      if (clean & 1) {
+                        segment = ringSegments[0];
+                        if ((m = segment.length - 1) > 0) {
+                          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+                          sink.lineStart();
+                          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
+                          sink.lineEnd();
+                        }
+                        return;
+                      }
+
+                      // Rejoin connected segments.
+                      // TODO reuse ringBuffer.rejoin()?
+                      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+
+                      segments.push(ringSegments.filter(validSegment));
+                    }
+
+                    return clip;
+                  };
+                };
+
+                function validSegment(segment) {
+                  return segment.length > 1;
+                }
+
+                // Intersections are sorted along the clip edge. For both antimeridian cutting
+                // and circle clipping, the same comparison is used.
+                function compareIntersection(a, b) {
+                  return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])
+                       - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);
+                }
+
+                var clipAntimeridian = clip(
+                  function() { return true; },
+                  clipAntimeridianLine,
+                  clipAntimeridianInterpolate,
+                  [-pi$4, -halfPi$3]
+                );
+
+                // Takes a line and cuts into visible segments. Return values: 0 - there were
+                // intersections or the line was empty; 1 - no intersections; 2 - there were
+                // intersections, and the first and last segments should be rejoined.
+                function clipAntimeridianLine(stream) {
+                  var lambda0 = NaN,
+                      phi0 = NaN,
+                      sign0 = NaN,
+                      clean; // no intersections
+
+                  return {
+                    lineStart: function() {
+                      stream.lineStart();
+                      clean = 1;
+                    },
+                    point: function(lambda1, phi1) {
+                      var sign1 = lambda1 > 0 ? pi$4 : -pi$4,
+                          delta = abs(lambda1 - lambda0);
+                      if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole
+                        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);
+                        stream.point(sign0, phi0);
+                        stream.lineEnd();
+                        stream.lineStart();
+                        stream.point(sign1, phi0);
+                        stream.point(lambda1, phi0);
+                        clean = 0;
+                      } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian
+                        if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies
+                        if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;
+                        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
+                        stream.point(sign0, phi0);
+                        stream.lineEnd();
+                        stream.lineStart();
+                        stream.point(sign1, phi0);
+                        clean = 0;
+                      }
+                      stream.point(lambda0 = lambda1, phi0 = phi1);
+                      sign0 = sign1;
+                    },
+                    lineEnd: function() {
+                      stream.lineEnd();
+                      lambda0 = phi0 = NaN;
+                    },
+                    clean: function() {
+                      return 2 - clean; // if intersections, rejoin first and last segments
+                    }
+                  };
+                }
+
+                function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
+                  var cosPhi0,
+                      cosPhi1,
+                      sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
+                  return abs(sinLambda0Lambda1) > epsilon$4
+                      ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
+                          - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
+                          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
+                      : (phi0 + phi1) / 2;
+                }
+
+                function clipAntimeridianInterpolate(from, to, direction, stream) {
+                  var phi;
+                  if (from == null) {
+                    phi = direction * halfPi$3;
+                    stream.point(-pi$4, phi);
+                    stream.point(0, phi);
+                    stream.point(pi$4, phi);
+                    stream.point(pi$4, 0);
+                    stream.point(pi$4, -phi);
+                    stream.point(0, -phi);
+                    stream.point(-pi$4, -phi);
+                    stream.point(-pi$4, 0);
+                    stream.point(-pi$4, phi);
+                  } else if (abs(from[0] - to[0]) > epsilon$4) {
+                    var lambda = from[0] < to[0] ? pi$4 : -pi$4;
+                    phi = direction * lambda / 2;
+                    stream.point(-lambda, phi);
+                    stream.point(0, phi);
+                    stream.point(lambda, phi);
+                  } else {
+                    stream.point(to[0], to[1]);
+                  }
+                }
+
+                var clipCircle = function(radius, delta) {
+                  var cr = cos$1(radius),
+                      smallRadius = cr > 0,
+                      notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case
+
+                  function interpolate(from, to, direction, stream) {
+                    circleStream(stream, radius, delta, direction, from, to);
+                  }
+
+                  function visible(lambda, phi) {
+                    return cos$1(lambda) * cos$1(phi) > cr;
+                  }
+
+                  // Takes a line and cuts into visible segments. Return values used for polygon
+                  // clipping: 0 - there were intersections or the line was empty; 1 - no
+                  // intersections 2 - there were intersections, and the first and last segments
+                  // should be rejoined.
+                  function clipLine(stream) {
+                    var point0, // previous point
+                        c0, // code for previous point
+                        v0, // visibility of previous point
+                        v00, // visibility of first point
+                        clean; // no intersections
+                    return {
+                      lineStart: function() {
+                        v00 = v0 = false;
+                        clean = 1;
+                      },
+                      point: function(lambda, phi) {
+                        var point1 = [lambda, phi],
+                            point2,
+                            v = visible(lambda, phi),
+                            c = smallRadius
+                              ? v ? 0 : code(lambda, phi)
+                              : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;
+                        if (!point0 && (v00 = v0 = v)) stream.lineStart();
+                        // Handle degeneracies.
+                        // TODO ignore if not clipping polygons.
+                        if (v !== v0) {
+                          point2 = intersect(point0, point1);
+                          if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
+                            point1[0] += epsilon$4;
+                            point1[1] += epsilon$4;
+                            v = visible(point1[0], point1[1]);
+                          }
+                        }
+                        if (v !== v0) {
+                          clean = 0;
+                          if (v) {
+                            // outside going in
+                            stream.lineStart();
+                            point2 = intersect(point1, point0);
+                            stream.point(point2[0], point2[1]);
+                          } else {
+                            // inside going out
+                            point2 = intersect(point0, point1);
+                            stream.point(point2[0], point2[1]);
+                            stream.lineEnd();
+                          }
+                          point0 = point2;
+                        } else if (notHemisphere && point0 && smallRadius ^ v) {
+                          var t;
+                          // If the codes for two points are different, or are both zero,
+                          // and there this segment intersects with the small circle.
+                          if (!(c & c0) && (t = intersect(point1, point0, true))) {
+                            clean = 0;
+                            if (smallRadius) {
+                              stream.lineStart();
+                              stream.point(t[0][0], t[0][1]);
+                              stream.point(t[1][0], t[1][1]);
+                              stream.lineEnd();
+                            } else {
+                              stream.point(t[1][0], t[1][1]);
+                              stream.lineEnd();
+                              stream.lineStart();
+                              stream.point(t[0][0], t[0][1]);
+                            }
+                          }
+                        }
+                        if (v && (!point0 || !pointEqual(point0, point1))) {
+                          stream.point(point1[0], point1[1]);
+                        }
+                        point0 = point1, v0 = v, c0 = c;
+                      },
+                      lineEnd: function() {
+                        if (v0) stream.lineEnd();
+                        point0 = null;
+                      },
+                      // Rejoin first and last segments if there were intersections and the first
+                      // and last points were visible.
+                      clean: function() {
+                        return clean | ((v00 && v0) << 1);
+                      }
+                    };
+                  }
+
+                  // Intersects the great circle between a and b with the clip circle.
+                  function intersect(a, b, two) {
+                    var pa = cartesian(a),
+                        pb = cartesian(b);
+
+                    // We have two planes, n1.p = d1 and n2.p = d2.
+                    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
+                    var n1 = [1, 0, 0], // normal
+                        n2 = cartesianCross(pa, pb),
+                        n2n2 = cartesianDot(n2, n2),
+                        n1n2 = n2[0], // cartesianDot(n1, n2),
+                        determinant = n2n2 - n1n2 * n1n2;
+
+                    // Two polar points.
+                    if (!determinant) return !two && a;
+
+                    var c1 =  cr * n2n2 / determinant,
+                        c2 = -cr * n1n2 / determinant,
+                        n1xn2 = cartesianCross(n1, n2),
+                        A = cartesianScale(n1, c1),
+                        B = cartesianScale(n2, c2);
+                    cartesianAddInPlace(A, B);
+
+                    // Solve |p(t)|^2 = 1.
+                    var u = n1xn2,
+                        w = cartesianDot(A, u),
+                        uu = cartesianDot(u, u),
+                        t2 = w * w - uu * (cartesianDot(A, A) - 1);
+
+                    if (t2 < 0) return;
+
+                    var t = sqrt$1(t2),
+                        q = cartesianScale(u, (-w - t) / uu);
+                    cartesianAddInPlace(q, A);
+                    q = spherical(q);
+
+                    if (!two) return q;
+
+                    // Two intersection points.
+                    var lambda0 = a[0],
+                        lambda1 = b[0],
+                        phi0 = a[1],
+                        phi1 = b[1],
+                        z;
+
+                    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
+
+                    var delta = lambda1 - lambda0,
+                        polar = abs(delta - pi$4) < epsilon$4,
+                        meridian = polar || delta < epsilon$4;
+
+                    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
+
+                    // Check that the first point is between a and b.
+                    if (meridian
+                        ? polar
+                          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)
+                          : phi0 <= q[1] && q[1] <= phi1
+                        : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
+                      var q1 = cartesianScale(u, (-w + t) / uu);
+                      cartesianAddInPlace(q1, A);
+                      return [q, spherical(q1)];
+                    }
+                  }
+
+                  // Generates a 4-bit vector representing the location of a point relative to
+                  // the small circle's bounding box.
+                  function code(lambda, phi) {
+                    var r = smallRadius ? radius : pi$4 - radius,
+                        code = 0;
+                    if (lambda < -r) code |= 1; // left
+                    else if (lambda > r) code |= 2; // right
+                    if (phi < -r) code |= 4; // below
+                    else if (phi > r) code |= 8; // above
+                    return code;
+                  }
+
+                  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);
+                };
+
+                var transform$1 = function(methods) {
+                  return {
+                    stream: transformer(methods)
+                  };
+                };
+
+                function transformer(methods) {
+                  return function(stream) {
+                    var s = new TransformStream;
+                    for (var key in methods) s[key] = methods[key];
+                    s.stream = stream;
+                    return s;
+                  };
+                }
+
+                function TransformStream() {}
+
+                TransformStream.prototype = {
+                  constructor: TransformStream,
+                  point: function(x, y) { this.stream.point(x, y); },
+                  sphere: function() { this.stream.sphere(); },
+                  lineStart: function() { this.stream.lineStart(); },
+                  lineEnd: function() { this.stream.lineEnd(); },
+                  polygonStart: function() { this.stream.polygonStart(); },
+                  polygonEnd: function() { this.stream.polygonEnd(); }
+                };
+
+                function fitExtent(projection, extent, object) {
+                  var w = extent[1][0] - extent[0][0],
+                      h = extent[1][1] - extent[0][1],
+                      clip = projection.clipExtent && projection.clipExtent();
+
+                  projection
+                      .scale(150)
+                      .translate([0, 0]);
+
+                  if (clip != null) projection.clipExtent(null);
+
+                  geoStream(object, projection.stream(boundsStream$1));
+
+                  var b = boundsStream$1.result(),
+                      k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
+                      x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
+                      y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
+
+                  if (clip != null) projection.clipExtent(clip);
+
+                  return projection
+                      .scale(k * 150)
+                      .translate([x, y]);
+                }
+
+                function fitSize(projection, size, object) {
+                  return fitExtent(projection, [[0, 0], size], object);
+                }
+
+                var maxDepth = 16;
+                var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
+
+                var resample = function(project, delta2) {
+                  return +delta2 ? resample$1(project, delta2) : resampleNone(project);
+                };
+
+                function resampleNone(project) {
+                  return transformer({
+                    point: function(x, y) {
+                      x = project(x, y);
+                      this.stream.point(x[0], x[1]);
+                    }
+                  });
+                }
+
+                function resample$1(project, delta2) {
+
+                  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
+                    var dx = x1 - x0,
+                        dy = y1 - y0,
+                        d2 = dx * dx + dy * dy;
+                    if (d2 > 4 * delta2 && depth--) {
+                      var a = a0 + a1,
+                          b = b0 + b1,
+                          c = c0 + c1,
+                          m = sqrt$1(a * a + b * b + c * c),
+                          phi2 = asin$1(c /= m),
+                          lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),
+                          p = project(lambda2, phi2),
+                          x2 = p[0],
+                          y2 = p[1],
+                          dx2 = x2 - x0,
+                          dy2 = y2 - y0,
+                          dz = dy * dx2 - dx * dy2;
+                      if (dz * dz / d2 > delta2 // perpendicular projected distance
+                          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
+                          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
+                        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
+                        stream.point(x2, y2);
+                        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
+                      }
+                    }
+                  }
+                  return function(stream) {
+                    var lambda00, x00, y00, a00, b00, c00, // first point
+                        lambda0, x0, y0, a0, b0, c0; // previous point
+
+                    var resampleStream = {
+                      point: point,
+                      lineStart: lineStart,
+                      lineEnd: lineEnd,
+                      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
+                      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
+                    };
+
+                    function point(x, y) {
+                      x = project(x, y);
+                      stream.point(x[0], x[1]);
+                    }
+
+                    function lineStart() {
+                      x0 = NaN;
+                      resampleStream.point = linePoint;
+                      stream.lineStart();
+                    }
+
+                    function linePoint(lambda, phi) {
+                      var c = cartesian([lambda, phi]), p = project(lambda, phi);
+                      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
+                      stream.point(x0, y0);
+                    }
+
+                    function lineEnd() {
+                      resampleStream.point = point;
+                      stream.lineEnd();
+                    }
+
+                    function ringStart() {
+                      lineStart();
+                      resampleStream.point = ringPoint;
+                      resampleStream.lineEnd = ringEnd;
+                    }
+
+                    function ringPoint(lambda, phi) {
+                      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
+                      resampleStream.point = linePoint;
+                    }
+
+                    function ringEnd() {
+                      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
+                      resampleStream.lineEnd = lineEnd;
+                      lineEnd();
+                    }
+
+                    return resampleStream;
+                  };
+                }
+
+                var transformRadians = transformer({
+                  point: function(x, y) {
+                    this.stream.point(x * radians, y * radians);
+                  }
+                });
+
+                function projection(project) {
+                  return projectionMutator(function() { return project; })();
+                }
+
+                function projectionMutator(projectAt) {
+                  var project,
+                      k = 150, // scale
+                      x = 480, y = 250, // translate
+                      dx, dy, lambda = 0, phi = 0, // center
+                      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
+                      theta = null, preclip = clipAntimeridian, // clip angle
+                      x0 = null, y0, x1, y1, postclip = identity$7, // clip extent
+                      delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
+                      cache,
+                      cacheStream;
+
+                  function projection(point) {
+                    point = projectRotate(point[0] * radians, point[1] * radians);
+                    return [point[0] * k + dx, dy - point[1] * k];
+                  }
+
+                  function invert(point) {
+                    point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
+                    return point && [point[0] * degrees$1, point[1] * degrees$1];
+                  }
+
+                  function projectTransform(x, y) {
+                    return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
+                  }
+
+                  projection.stream = function(stream) {
+                    return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
+                  };
+
+                  projection.clipAngle = function(_) {
+                    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
+                  };
+
+                  projection.clipExtent = function(_) {
+                    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+                  };
+
+                  projection.scale = function(_) {
+                    return arguments.length ? (k = +_, recenter()) : k;
+                  };
+
+                  projection.translate = function(_) {
+                    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
+                  };
+
+                  projection.center = function(_) {
+                    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
+                  };
+
+                  projection.rotate = function(_) {
+                    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
+                  };
+
+                  projection.precision = function(_) {
+                    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);
+                  };
+
+                  projection.fitExtent = function(extent, object) {
+                    return fitExtent(projection, extent, object);
+                  };
+
+                  projection.fitSize = function(size, object) {
+                    return fitSize(projection, size, object);
+                  };
+
+                  function recenter() {
+                    projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
+                    var center = project(lambda, phi);
+                    dx = x - center[0] * k;
+                    dy = y + center[1] * k;
+                    return reset();
+                  }
+
+                  function reset() {
+                    cache = cacheStream = null;
+                    return projection;
+                  }
+
+                  return function() {
+                    project = projectAt.apply(this, arguments);
+                    projection.invert = project.invert && invert;
+                    return recenter();
+                  };
+                }
+
+                function conicProjection(projectAt) {
+                  var phi0 = 0,
+                      phi1 = pi$4 / 3,
+                      m = projectionMutator(projectAt),
+                      p = m(phi0, phi1);
+
+                  p.parallels = function(_) {
+                    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
+                  };
+
+                  return p;
+                }
+
+                function cylindricalEqualAreaRaw(phi0) {
+                  var cosPhi0 = cos$1(phi0);
+
+                  function forward(lambda, phi) {
+                    return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
+                  }
+
+                  forward.invert = function(x, y) {
+                    return [x / cosPhi0, asin$1(y * cosPhi0)];
+                  };
+
+                  return forward;
+                }
+
+                function conicEqualAreaRaw(y0, y1) {
+                  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
+
+                  // Are the parallels symmetrical around the Equator?
+                  if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0);
+
+                  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n;
+
+                  function project(x, y) {
+                    var r = sqrt$1(c - 2 * n * sin$1(y)) / n;
+                    return [r * sin$1(x *= n), r0 - r * cos$1(x)];
+                  }
+
+                  project.invert = function(x, y) {
+                    var r0y = r0 - y;
+                    return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
+                  };
+
+                  return project;
+                }
+
+                var conicEqualArea = function() {
+                  return conicProjection(conicEqualAreaRaw)
+                      .scale(155.424)
+                      .center([0, 33.6442]);
+                };
+
+                var albers = function() {
+                  return conicEqualArea()
+                      .parallels([29.5, 45.5])
+                      .scale(1070)
+                      .translate([480, 250])
+                      .rotate([96, 0])
+                      .center([-0.6, 38.7]);
+                };
+
+                // The projections must have mutually exclusive clip regions on the sphere,
+                // as this will avoid emitting interleaving lines and polygons.
+                function multiplex(streams) {
+                  var n = streams.length;
+                  return {
+                    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
+                    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
+                    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
+                    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
+                    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
+                    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
+                  };
+                }
+
+                // A composite projection for the United States, configured by default for
+                // 960×500. The projection also works quite well at 960×600 if you change the
+                // scale to 1285 and adjust the translate accordingly. The set of standard
+                // parallels for each region comes from USGS, which is published here:
+                // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
+                var albersUsa = function() {
+                  var cache,
+                      cacheStream,
+                      lower48 = albers(), lower48Point,
+                      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
+                      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
+                      point, pointStream = {point: function(x, y) { point = [x, y]; }};
+
+                  function albersUsa(coordinates) {
+                    var x = coordinates[0], y = coordinates[1];
+                    return point = null,
+                        (lower48Point.point(x, y), point)
+                        || (alaskaPoint.point(x, y), point)
+                        || (hawaiiPoint.point(x, y), point);
+                  }
+
+                  albersUsa.invert = function(coordinates) {
+                    var k = lower48.scale(),
+                        t = lower48.translate(),
+                        x = (coordinates[0] - t[0]) / k,
+                        y = (coordinates[1] - t[1]) / k;
+                    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
+                        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
+                        : lower48).invert(coordinates);
+                  };
+
+                  albersUsa.stream = function(stream) {
+                    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
+                  };
+
+                  albersUsa.precision = function(_) {
+                    if (!arguments.length) return lower48.precision();
+                    lower48.precision(_), alaska.precision(_), hawaii.precision(_);
+                    return reset();
+                  };
+
+                  albersUsa.scale = function(_) {
+                    if (!arguments.length) return lower48.scale();
+                    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
+                    return albersUsa.translate(lower48.translate());
+                  };
+
+                  albersUsa.translate = function(_) {
+                    if (!arguments.length) return lower48.translate();
+                    var k = lower48.scale(), x = +_[0], y = +_[1];
+
+                    lower48Point = lower48
+                        .translate(_)
+                        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
+                        .stream(pointStream);
+
+                    alaskaPoint = alaska
+                        .translate([x - 0.307 * k, y + 0.201 * k])
+                        .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+                        .stream(pointStream);
+
+                    hawaiiPoint = hawaii
+                        .translate([x - 0.205 * k, y + 0.212 * k])
+                        .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+                        .stream(pointStream);
+
+                    return reset();
+                  };
+
+                  albersUsa.fitExtent = function(extent, object) {
+                    return fitExtent(albersUsa, extent, object);
+                  };
+
+                  albersUsa.fitSize = function(size, object) {
+                    return fitSize(albersUsa, size, object);
+                  };
+
+                  function reset() {
+                    cache = cacheStream = null;
+                    return albersUsa;
+                  }
+
+                  return albersUsa.scale(1070);
+                };
+
+                function azimuthalRaw(scale) {
+                  return function(x, y) {
+                    var cx = cos$1(x),
+                        cy = cos$1(y),
+                        k = scale(cx * cy);
+                    return [
+                      k * cy * sin$1(x),
+                      k * sin$1(y)
+                    ];
+                  }
+                }
+
+                function azimuthalInvert(angle) {
+                  return function(x, y) {
+                    var z = sqrt$1(x * x + y * y),
+                        c = angle(z),
+                        sc = sin$1(c),
+                        cc = cos$1(c);
+                    return [
+                      atan2(x * sc, z * cc),
+                      asin$1(z && y * sc / z)
+                    ];
+                  }
+                }
+
+                var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
+                  return sqrt$1(2 / (1 + cxcy));
+                });
+
+                azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
+                  return 2 * asin$1(z / 2);
+                });
+
+                var azimuthalEqualArea = function() {
+                  return projection(azimuthalEqualAreaRaw)
+                      .scale(124.75)
+                      .clipAngle(180 - 1e-3);
+                };
+
+                var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
+                  return (c = acos(c)) && c / sin$1(c);
+                });
+
+                azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
+                  return z;
+                });
+
+                var azimuthalEquidistant = function() {
+                  return projection(azimuthalEquidistantRaw)
+                      .scale(79.4188)
+                      .clipAngle(180 - 1e-3);
+                };
+
+                function mercatorRaw(lambda, phi) {
+                  return [lambda, log$1(tan((halfPi$3 + phi) / 2))];
+                }
+
+                mercatorRaw.invert = function(x, y) {
+                  return [x, 2 * atan(exp(y)) - halfPi$3];
+                };
+
+                var mercator = function() {
+                  return mercatorProjection(mercatorRaw)
+                      .scale(961 / tau$4);
+                };
+
+                function mercatorProjection(project) {
+                  var m = projection(project),
+                      scale = m.scale,
+                      translate = m.translate,
+                      clipExtent = m.clipExtent,
+                      clipAuto;
+
+                  m.scale = function(_) {
+                    return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();
+                  };
+
+                  m.translate = function(_) {
+                    return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();
+                  };
+
+                  m.clipExtent = function(_) {
+                    if (!arguments.length) return clipAuto ? null : clipExtent();
+                    if (clipAuto = _ == null) {
+                      var k = pi$4 * scale(),
+                          t = translate();
+                      _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
+                    }
+                    clipExtent(_);
+                    return m;
+                  };
+
+                  return m.clipExtent(null);
+                }
+
+                function tany(y) {
+                  return tan((halfPi$3 + y) / 2);
+                }
+
+                function conicConformalRaw(y0, y1) {
+                  var cy0 = cos$1(y0),
+                      n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),
+                      f = cy0 * pow$1(tany(y0), n) / n;
+
+                  if (!n) return mercatorRaw;
+
+                  function project(x, y) {
+                    if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }
+                    else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }
+                    var r = f / pow$1(tany(y), n);
+                    return [r * sin$1(n * x), f - r * cos$1(n * x)];
+                  }
+
+                  project.invert = function(x, y) {
+                    var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);
+                    return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];
+                  };
+
+                  return project;
+                }
+
+                var conicConformal = function() {
+                  return conicProjection(conicConformalRaw)
+                      .scale(109.5)
+                      .parallels([30, 30]);
+                };
+
+                function equirectangularRaw(lambda, phi) {
+                  return [lambda, phi];
+                }
+
+                equirectangularRaw.invert = equirectangularRaw;
+
+                var equirectangular = function() {
+                  return projection(equirectangularRaw)
+                      .scale(152.63);
+                };
+
+                function conicEquidistantRaw(y0, y1) {
+                  var cy0 = cos$1(y0),
+                      n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
+                      g = cy0 / n + y0;
+
+                  if (abs(n) < epsilon$4) return equirectangularRaw;
+
+                  function project(x, y) {
+                    var gy = g - y, nx = n * x;
+                    return [gy * sin$1(nx), g - gy * cos$1(nx)];
+                  }
+
+                  project.invert = function(x, y) {
+                    var gy = g - y;
+                    return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)];
+                  };
+
+                  return project;
+                }
+
+                var conicEquidistant = function() {
+                  return conicProjection(conicEquidistantRaw)
+                      .scale(131.154)
+                      .center([0, 13.9389]);
+                };
+
+                function gnomonicRaw(x, y) {
+                  var cy = cos$1(y), k = cos$1(x) * cy;
+                  return [cy * sin$1(x) / k, sin$1(y) / k];
+                }
+
+                gnomonicRaw.invert = azimuthalInvert(atan);
+
+                var gnomonic = function() {
+                  return projection(gnomonicRaw)
+                      .scale(144.049)
+                      .clipAngle(60);
+                };
+
+                function scaleTranslate(k, tx, ty) {
+                  return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({
+                    point: function(x, y) {
+                      this.stream.point(x * k + tx, y * k + ty);
+                    }
+                  });
+                }
+
+                var identity$8 = function() {
+                  var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate
+                      x0 = null, y0, x1, y1, clip = identity$7, // clip extent
+                      cache,
+                      cacheStream,
+                      projection;
+
+                  function reset() {
+                    cache = cacheStream = null;
+                    return projection;
+                  }
+
+                  return projection = {
+                    stream: function(stream) {
+                      return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
+                    },
+                    clipExtent: function(_) {
+                      return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+                    },
+                    scale: function(_) {
+                      return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k;
+                    },
+                    translate: function(_) {
+                      return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
+                    },
+                    fitExtent: function(extent, object) {
+                      return fitExtent(projection, extent, object);
+                    },
+                    fitSize: function(size, object) {
+                      return fitSize(projection, size, object);
+                    }
+                  };
+                };
+
+                function orthographicRaw(x, y) {
+                  return [cos$1(y) * sin$1(x), sin$1(y)];
+                }
+
+                orthographicRaw.invert = azimuthalInvert(asin$1);
+
+                var orthographic = function() {
+                  return projection(orthographicRaw)
+                      .scale(249.5)
+                      .clipAngle(90 + epsilon$4);
+                };
+
+                function stereographicRaw(x, y) {
+                  var cy = cos$1(y), k = 1 + cos$1(x) * cy;
+                  return [cy * sin$1(x) / k, sin$1(y) / k];
+                }
+
+                stereographicRaw.invert = azimuthalInvert(function(z) {
+                  return 2 * atan(z);
+                });
+
+                var stereographic = function() {
+                  return projection(stereographicRaw)
+                      .scale(250)
+                      .clipAngle(142);
+                };
+
+                function transverseMercatorRaw(lambda, phi) {
+                  return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];
+                }
+
+                transverseMercatorRaw.invert = function(x, y) {
+                  return [-y, 2 * atan(exp(x)) - halfPi$3];
+                };
+
+                var transverseMercator = function() {
+                  var m = mercatorProjection(transverseMercatorRaw),
+                      center = m.center,
+                      rotate = m.rotate;
+
+                  m.center = function(_) {
+                    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
+                  };
+
+                  m.rotate = function(_) {
+                    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
+                  };
+
+                  return rotate([0, 0, 90])
+                      .scale(159.155);
+                };
+
+                exports.version = version;
+                exports.bisect = bisectRight;
+                exports.bisectRight = bisectRight;
+                exports.bisectLeft = bisectLeft;
+                exports.ascending = ascending;
+                exports.bisector = bisector;
+                exports.descending = descending;
+                exports.deviation = deviation;
+                exports.extent = extent;
+                exports.histogram = histogram;
+                exports.thresholdFreedmanDiaconis = freedmanDiaconis;
+                exports.thresholdScott = scott;
+                exports.thresholdSturges = sturges;
+                exports.max = max;
+                exports.mean = mean;
+                exports.median = median;
+                exports.merge = merge;
+                exports.min = min;
+                exports.pairs = pairs;
+                exports.permute = permute;
+                exports.quantile = threshold;
+                exports.range = range;
+                exports.scan = scan;
+                exports.shuffle = shuffle;
+                exports.sum = sum;
+                exports.ticks = ticks;
+                exports.tickStep = tickStep;
+                exports.transpose = transpose;
+                exports.variance = variance;
+                exports.zip = zip;
+                exports.entries = entries;
+                exports.keys = keys;
+                exports.values = values;
+                exports.map = map$1;
+                exports.set = set;
+                exports.nest = nest;
+                exports.randomUniform = uniform;
+                exports.randomNormal = normal;
+                exports.randomLogNormal = logNormal;
+                exports.randomBates = bates;
+                exports.randomIrwinHall = irwinHall;
+                exports.randomExponential = exponential;
+                exports.easeLinear = linear;
+                exports.easeQuad = quadInOut;
+                exports.easeQuadIn = quadIn;
+                exports.easeQuadOut = quadOut;
+                exports.easeQuadInOut = quadInOut;
+                exports.easeCubic = cubicInOut;
+                exports.easeCubicIn = cubicIn;
+                exports.easeCubicOut = cubicOut;
+                exports.easeCubicInOut = cubicInOut;
+                exports.easePoly = polyInOut;
+                exports.easePolyIn = polyIn;
+                exports.easePolyOut = polyOut;
+                exports.easePolyInOut = polyInOut;
+                exports.easeSin = sinInOut;
+                exports.easeSinIn = sinIn;
+                exports.easeSinOut = sinOut;
+                exports.easeSinInOut = sinInOut;
+                exports.easeExp = expInOut;
+                exports.easeExpIn = expIn;
+                exports.easeExpOut = expOut;
+                exports.easeExpInOut = expInOut;
+                exports.easeCircle = circleInOut;
+                exports.easeCircleIn = circleIn;
+                exports.easeCircleOut = circleOut;
+                exports.easeCircleInOut = circleInOut;
+                exports.easeBounce = bounceOut;
+                exports.easeBounceIn = bounceIn;
+                exports.easeBounceOut = bounceOut;
+                exports.easeBounceInOut = bounceInOut;
+                exports.easeBack = backInOut;
+                exports.easeBackIn = backIn;
+                exports.easeBackOut = backOut;
+                exports.easeBackInOut = backInOut;
+                exports.easeElastic = elasticOut;
+                exports.easeElasticIn = elasticIn;
+                exports.easeElasticOut = elasticOut;
+                exports.easeElasticInOut = elasticInOut;
+                exports.polygonArea = area;
+                exports.polygonCentroid = centroid;
+                exports.polygonHull = hull;
+                exports.polygonContains = contains;
+                exports.polygonLength = length$1;
+                exports.path = path;
+                exports.quadtree = quadtree;
+                exports.queue = queue;
+                exports.arc = arc;
+                exports.area = area$1;
+                exports.line = line;
+                exports.pie = pie;
+                exports.radialArea = radialArea;
+                exports.radialLine = radialLine$1;
+                exports.symbol = symbol;
+                exports.symbols = symbols;
+                exports.symbolCircle = circle;
+                exports.symbolCross = cross$1;
+                exports.symbolDiamond = diamond;
+                exports.symbolSquare = square;
+                exports.symbolStar = star;
+                exports.symbolTriangle = triangle;
+                exports.symbolWye = wye;
+                exports.curveBasisClosed = basisClosed;
+                exports.curveBasisOpen = basisOpen;
+                exports.curveBasis = basis;
+                exports.curveBundle = bundle;
+                exports.curveCardinalClosed = cardinalClosed;
+                exports.curveCardinalOpen = cardinalOpen;
+                exports.curveCardinal = cardinal;
+                exports.curveCatmullRomClosed = catmullRomClosed;
+                exports.curveCatmullRomOpen = catmullRomOpen;
+                exports.curveCatmullRom = catmullRom;
+                exports.curveLinearClosed = linearClosed;
+                exports.curveLinear = curveLinear;
+                exports.curveMonotoneX = monotoneX;
+                exports.curveMonotoneY = monotoneY;
+                exports.curveNatural = natural;
+                exports.curveStep = step;
+                exports.curveStepAfter = stepAfter;
+                exports.curveStepBefore = stepBefore;
+                exports.stack = stack;
+                exports.stackOffsetExpand = expand;
+                exports.stackOffsetNone = none;
+                exports.stackOffsetSilhouette = silhouette;
+                exports.stackOffsetWiggle = wiggle;
+                exports.stackOrderAscending = ascending$1;
+                exports.stackOrderDescending = descending$2;
+                exports.stackOrderInsideOut = insideOut;
+                exports.stackOrderNone = none$1;
+                exports.stackOrderReverse = reverse;
+                exports.color = color;
+                exports.rgb = rgb;
+                exports.hsl = hsl;
+                exports.lab = lab;
+                exports.hcl = hcl;
+                exports.cubehelix = cubehelix;
+                exports.interpolate = interpolate;
+                exports.interpolateArray = array$1;
+                exports.interpolateDate = date;
+                exports.interpolateNumber = interpolateNumber;
+                exports.interpolateObject = object;
+                exports.interpolateRound = interpolateRound;
+                exports.interpolateString = interpolateString;
+                exports.interpolateTransformCss = interpolateTransformCss;
+                exports.interpolateTransformSvg = interpolateTransformSvg;
+                exports.interpolateZoom = interpolateZoom;
+                exports.interpolateRgb = interpolateRgb;
+                exports.interpolateRgbBasis = rgbBasis;
+                exports.interpolateRgbBasisClosed = rgbBasisClosed;
+                exports.interpolateHsl = hsl$2;
+                exports.interpolateHslLong = hslLong;
+                exports.interpolateLab = lab$1;
+                exports.interpolateHcl = hcl$2;
+                exports.interpolateHclLong = hclLong;
+                exports.interpolateCubehelix = cubehelix$2;
+                exports.interpolateCubehelixLong = cubehelixLong;
+                exports.interpolateBasis = basis$2;
+                exports.interpolateBasisClosed = basisClosed$1;
+                exports.quantize = quantize;
+                exports.dispatch = dispatch;
+                exports.dsvFormat = dsv;
+                exports.csvParse = csvParse;
+                exports.csvParseRows = csvParseRows;
+                exports.csvFormat = csvFormat;
+                exports.csvFormatRows = csvFormatRows;
+                exports.tsvParse = tsvParse;
+                exports.tsvParseRows = tsvParseRows;
+                exports.tsvFormat = tsvFormat;
+                exports.tsvFormatRows = tsvFormatRows;
+                exports.request = request;
+                exports.html = html;
+                exports.json = json;
+                exports.text = text;
+                exports.xml = xml;
+                exports.csv = csv$1;
+                exports.tsv = tsv$1;
+                exports.now = now;
+                exports.timer = timer;
+                exports.timerFlush = timerFlush;
+                exports.timeout = timeout$1;
+                exports.interval = interval$1;
+                exports.timeInterval = newInterval;
+                exports.timeMillisecond = millisecond;
+                exports.timeMilliseconds = milliseconds;
+                exports.timeSecond = second;
+                exports.timeSeconds = seconds;
+                exports.timeMinute = minute;
+                exports.timeMinutes = minutes;
+                exports.timeHour = hour;
+                exports.timeHours = hours;
+                exports.timeDay = day;
+                exports.timeDays = days;
+                exports.timeWeek = sunday;
+                exports.timeWeeks = sundays;
+                exports.timeSunday = sunday;
+                exports.timeSundays = sundays;
+                exports.timeMonday = monday;
+                exports.timeMondays = mondays;
+                exports.timeTuesday = tuesday;
+                exports.timeTuesdays = tuesdays;
+                exports.timeWednesday = wednesday;
+                exports.timeWednesdays = wednesdays;
+                exports.timeThursday = thursday;
+                exports.timeThursdays = thursdays;
+                exports.timeFriday = friday;
+                exports.timeFridays = fridays;
+                exports.timeSaturday = saturday;
+                exports.timeSaturdays = saturdays;
+                exports.timeMonth = month;
+                exports.timeMonths = months;
+                exports.timeYear = year;
+                exports.timeYears = years;
+                exports.utcMillisecond = millisecond;
+                exports.utcMilliseconds = milliseconds;
+                exports.utcSecond = second;
+                exports.utcSeconds = seconds;
+                exports.utcMinute = utcMinute;
+                exports.utcMinutes = utcMinutes;
+                exports.utcHour = utcHour;
+                exports.utcHours = utcHours;
+                exports.utcDay = utcDay;
+                exports.utcDays = utcDays;
+                exports.utcWeek = utcSunday;
+                exports.utcWeeks = utcSundays;
+                exports.utcSunday = utcSunday;
+                exports.utcSundays = utcSundays;
+                exports.utcMonday = utcMonday;
+                exports.utcMondays = utcMondays;
+                exports.utcTuesday = utcTuesday;
+                exports.utcTuesdays = utcTuesdays;
+                exports.utcWednesday = utcWednesday;
+                exports.utcWednesdays = utcWednesdays;
+                exports.utcThursday = utcThursday;
+                exports.utcThursdays = utcThursdays;
+                exports.utcFriday = utcFriday;
+                exports.utcFridays = utcFridays;
+                exports.utcSaturday = utcSaturday;
+                exports.utcSaturdays = utcSaturdays;
+                exports.utcMonth = utcMonth;
+                exports.utcMonths = utcMonths;
+                exports.utcYear = utcYear;
+                exports.utcYears = utcYears;
+                exports.formatLocale = formatLocale;
+                exports.formatDefaultLocale = defaultLocale;
+                exports.formatSpecifier = formatSpecifier;
+                exports.precisionFixed = precisionFixed;
+                exports.precisionPrefix = precisionPrefix;
+                exports.precisionRound = precisionRound;
+                exports.isoFormat = formatIso;
+                exports.isoParse = parseIso;
+                exports.timeFormatLocale = formatLocale$1;
+                exports.timeFormatDefaultLocale = defaultLocale$1;
+                exports.scaleBand = band;
+                exports.scalePoint = point$4;
+                exports.scaleIdentity = identity$4;
+                exports.scaleLinear = linear$2;
+                exports.scaleLog = log;
+                exports.scaleOrdinal = ordinal;
+                exports.scaleImplicit = implicit;
+                exports.scalePow = pow;
+                exports.scaleSqrt = sqrt;
+                exports.scaleQuantile = quantile$$1;
+                exports.scaleQuantize = quantize$1;
+                exports.scaleThreshold = threshold$1;
+                exports.scaleTime = time;
+                exports.scaleUtc = utcTime;
+                exports.schemeCategory10 = category10;
+                exports.schemeCategory20b = category20b;
+                exports.schemeCategory20c = category20c;
+                exports.schemeCategory20 = category20;
+                exports.scaleSequential = sequential;
+                exports.interpolateCubehelixDefault = cubehelix$3;
+                exports.interpolateRainbow = rainbow$1;
+                exports.interpolateWarm = warm;
+                exports.interpolateCool = cool;
+                exports.interpolateViridis = viridis;
+                exports.interpolateMagma = magma;
+                exports.interpolateInferno = inferno;
+                exports.interpolatePlasma = plasma;
+                exports.creator = creator;
+                exports.customEvent = customEvent;
+                exports.local = local;
+                exports.matcher = matcher$1;
+                exports.mouse = mouse;
+                exports.namespace = namespace;
+                exports.namespaces = namespaces;
+                exports.select = select;
+                exports.selectAll = selectAll;
+                exports.selection = selection;
+                exports.selector = selector;
+                exports.selectorAll = selectorAll;
+                exports.touch = touch;
+                exports.touches = touches;
+                exports.window = window;
+                exports.active = active;
+                exports.interrupt = interrupt;
+                exports.transition = transition;
+                exports.axisTop = axisTop;
+                exports.axisRight = axisRight;
+                exports.axisBottom = axisBottom;
+                exports.axisLeft = axisLeft;
+                exports.cluster = cluster;
+                exports.hierarchy = hierarchy;
+                exports.pack = index;
+                exports.packSiblings = siblings;
+                exports.packEnclose = enclose;
+                exports.partition = partition;
+                exports.stratify = stratify;
+                exports.tree = tree;
+                exports.treemap = index$1;
+                exports.treemapBinary = binary;
+                exports.treemapDice = treemapDice;
+                exports.treemapSlice = treemapSlice;
+                exports.treemapSliceDice = sliceDice;
+                exports.treemapSquarify = squarify;
+                exports.treemapResquarify = resquarify;
+                exports.forceCenter = center$1;
+                exports.forceCollide = collide;
+                exports.forceLink = link;
+                exports.forceManyBody = manyBody;
+                exports.forceSimulation = simulation;
+                exports.forceX = x$3;
+                exports.forceY = y$3;
+                exports.drag = drag;
+                exports.dragDisable = dragDisable;
+                exports.dragEnable = yesdrag;
+                exports.voronoi = voronoi;
+                exports.zoom = zoom;
+                exports.zoomIdentity = identity$6;
+                exports.zoomTransform = transform;
+                exports.brush = brush;
+                exports.brushX = brushX;
+                exports.brushY = brushY;
+                exports.brushSelection = brushSelection;
+                exports.chord = chord;
+                exports.ribbon = ribbon;
+                exports.geoAlbers = albers;
+                exports.geoAlbersUsa = albersUsa;
+                exports.geoArea = area$2;
+                exports.geoAzimuthalEqualArea = azimuthalEqualArea;
+                exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
+                exports.geoAzimuthalEquidistant = azimuthalEquidistant;
+                exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
+                exports.geoBounds = bounds;
+                exports.geoCentroid = centroid$1;
+                exports.geoCircle = circle$1;
+                exports.geoClipExtent = extent$1;
+                exports.geoConicConformal = conicConformal;
+                exports.geoConicConformalRaw = conicConformalRaw;
+                exports.geoConicEqualArea = conicEqualArea;
+                exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
+                exports.geoConicEquidistant = conicEquidistant;
+                exports.geoConicEquidistantRaw = conicEquidistantRaw;
+                exports.geoDistance = distance;
+                exports.geoEquirectangular = equirectangular;
+                exports.geoEquirectangularRaw = equirectangularRaw;
+                exports.geoGnomonic = gnomonic;
+                exports.geoGnomonicRaw = gnomonicRaw;
+                exports.geoGraticule = graticule;
+                exports.geoGraticule10 = graticule10;
+                exports.geoIdentity = identity$8;
+                exports.geoInterpolate = interpolate$2;
+                exports.geoLength = length$2;
+                exports.geoMercator = mercator;
+                exports.geoMercatorRaw = mercatorRaw;
+                exports.geoOrthographic = orthographic;
+                exports.geoOrthographicRaw = orthographicRaw;
+                exports.geoPath = index$3;
+                exports.geoProjection = projection;
+                exports.geoProjectionMutator = projectionMutator;
+                exports.geoRotation = rotation;
+                exports.geoStereographic = stereographic;
+                exports.geoStereographicRaw = stereographicRaw;
+                exports.geoStream = geoStream;
+                exports.geoTransform = transform$1;
+                exports.geoTransverseMercator = transverseMercator;
+                exports.geoTransverseMercatorRaw = transverseMercatorRaw;
+
+                Object.defineProperty(exports, '__esModule', { value: true });
+
+                })));
+
+
+                //aigner: HERE IS WHERE IT ALL STARTS!!!
+                },{}],2:[function(require,module,exports){
+                    
+
+
+                    
+                var d3 = require('d3');
+
+                var PULSE_DURATION = 700;
+                var SUB_ANIM_DELAY = 200;
+                var ACTIVE_COLOR = d3.rgb("seagreen");
+
+                function Animation(xdsms, rootId, delay) {
+                  this.rootId = rootId;
+                  if (typeof (rootId) === 'undefined') {
+                    this.rootId = 'root';
+                  }
+                  this.root = xdsms[this.rootId];
+                  this.xdsms = xdsms;
+                  this.duration = PULSE_DURATION;
+                  this.initialDelay = delay || 0;
+                }
+
+                Animation.prototype._pulse = function(delay, toBeSelected, option) {
+                  var sel = d3.select("svg." + this.rootId)
+                              .selectAll(toBeSelected)
+                              .transition().delay(delay);
+                  if (option !== "out") {
+                    sel = sel.transition().duration(200)
+                            .style('stroke-width', '8px')
+                            .style('stroke', ACTIVE_COLOR)
+                            .style('fill', function(d) {
+                              if (d.id) {
+                                return ACTIVE_COLOR.brighter();
+                              }});
+                  }
+                  if (option !== "in") {
+                    sel.transition().duration(3 * PULSE_DURATION)
+                            .style('stroke-width', null)
+                            .style('stroke', null)
+                            .style('fill', null);
+                  }
+                };
+
+                Animation.prototype._animate = function() {
+                  var self = this;
+                  var delay = this.initialDelay;
+                  var animDelay = SUB_ANIM_DELAY;
+                  var graph = self.xdsms[self.rootId].graph;
+                  
+                  var title = d3.select("svg." + self.rootId).select("g.title");
+                  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
+                  d3.select("svg." + self.rootId).select("rect.border")
+                    .transition().delay(delay)
+                      .style("stroke-width", '5px').duration(200)
+                    .transition().duration(1000)
+                      .style("stroke", 'black').style("stroke-width", '0px');
+
+                  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
+                    var offsets = [];
+                    nodesAtStep.forEach(function(nodeId) {
+                      var elapsed = delay + n * PULSE_DURATION;
+                      if (n > 0) {
+                        nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
+                          var from = graph.idxOf(prevNodeId);
+                          var to = graph.idxOf(nodeId);
+                          self._pulse(elapsed,"polyline.link_" + from + "_" + to);
+                        });
+                      }
+                      //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
+                      var gnode = "g." + nodeId;
+                      var nodeSel = d3.select("svg." + self.rootId).select(gnode);
+                      var scnId = graph.getNode(nodeId).getScenarioId();
+                      if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
+                      {
+                          self._pulse(elapsed, gnode + " > rect", "in");
+                          var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
+                          var offset = anim._animate();
+                          offsets.push(offset);
+                          self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
+                      } 
+                      else 
+                      {
+                          self._pulse(elapsed, gnode + " > rect");
+                      }
+                    }, this);
+
+                    if (offsets.length > 0) {
+                      delay += Math.max.apply(null, offsets);
+                    }
+                    delay += animDelay;
+                  }, this);
+                    
+                  title.select("text").transition()
+                    .delay(graph.nodesByStep.length * PULSE_DURATION + delay)
+                    .style("fill", null);
+
+                  return graph.nodesByStep.length * PULSE_DURATION;
+                };
+
+                Animation.prototype.run = function() {
+                  this._animate();
+                };
+
+                module.exports = Animation;
+
+                },{"d3":1}],3:[function(require,module,exports){
+                var UID = "_U_";
+                var MULTI_TYPE = "_multi";
+
+                //aigner: Node() constructor additionally gets the "xdsm"
+                function Node(xdsm, id, name, type, metadata) {
+                    
+                  var splitUndef = name.split("undefined: ")
+                  if (splitUndef.length>1) {name=splitUndef[1]}
+                  else {name=splitUndef[0]}
+                  
+                  if (typeof (name) === 'undefined') {
+                    name = id;
+                  }
+                  if (typeof (type) === 'undefined') {
+                    type = 'analysis';
+                  }
+                  this.xdsm = xdsm;
+                  this.id = id;
+                  this.name = name;
+                  this.metadata = metadata;
+                  this.isMulti = (type.search(/_multi$/) >= 0);
+                  this.type = this.isMulti ?
+                    type.substr(0, type.length - MULTI_TYPE.length) : type;
+                }
+
+                Node.prototype.isMdo = function() {
+                  return this.type === "mdo";
+                };
+
+                Node.prototype.getScenarioId = function() {
+                  if (this.isMdo()) {
+                    var idxscn = this.name.indexOf("_scn-");
+                    if (idxscn === -1) {
+                      console.log("Warning: MDO Scenario not found. " +
+                                  "Bad type or name for node: " + JSON.stringify(this));
+                      return null;
+                    }
+                    return this.name.substr(idxscn + 1);
+                  }
+                  return null;
+                };
+
+                function Edge(from, to, name, row, col, isMulti) {
+                  this.id = "link_" + from + "_" + to;
+                  this.name = name;
+                  this.row = row;
+                  this.col = col;
+                  this.iotype = row < col ? "in" : "out";
+                  this.io = {
+                    fromU: (from === UID),
+                    toU: (to === UID)
+                  };
+                  this.from = from;
+                  this.to = to;
+                  this.isMulti = isMulti;
+                }
+
+                Edge.prototype.isIO = function() {
+                  return this.io.fromU || this.io.toU;
+                };
+
+                //aigner: Function creates the xdsm graph
+                function Graph(mdo, refname) {
+                  this.nodes = [new Node(UID, UID, UID, "user",[])];
+                  this.edges = [];
+                  this.chains = [];
+                  this.refname = refname || "";
+                  
+                  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
+                  var numbering = Graph.new_number(mdo.workflow);
+                  //var numbering = Graph.number(mdo.workflow);
+                  var numPrefixes = numbering.toNum;
+                  this.nodesByStep = numbering.toNode;
+
+                  mdo.nodes.forEach(function(item) {
+                    name = document.createElement("TEXTAREA");
+                    name = numPrefixes[item.id] + ": " + item.name;
+                    this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
+                  }, this);
+
+                  this.ids = this.nodes.map(function(elt) {
+                    return elt.id;
+                  });
+                  
+                  mdo.edges.forEach(function(item) {
+                    var idA = this.idxOf(item.from);
+                    var idB = this.idxOf(item.to);
+                    
+                    var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
+                    this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
+                  }, this);
+
+                  
+                  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
+                  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
+                  // var echain = Graph.expand(mdo.workflow); 
+                  // echain.forEach(function(leafChain) {
+                    // if (leafChain.length < 2) {
+                      // throw new Error("Bad process chain (" + leafChain.length + "elt)");
+                    // } else {
+                      // this.chains.push([]);
+                      // var ids = this.nodes.map(function(elt) {
+                        // return elt.id;
+                      // });
+                      // leafChain.forEach(function(item, j) {
+                        // if (j !== 0) {
+                          // var idA = ids.indexOf(leafChain[j - 1]);
+                          // if (idA < 0) {
+                            // throw new Error("Process chain element (" +
+                                            // leafChain[j - 1] + ") not found");
+                          // }
+                          // var idB = ids.indexOf(leafChain[j]);
+                          // if (idB < 0) {
+                            // throw new Error("Process chain element (" +
+                                            // leafChain[j] + ") not found");
+                          // }
+                          // if (idA !== idB) {
+                            // this.chains[this.chains.length - 1].push([idA, idB]);
+                          // }
+                        // }
+                      // }, this);
+                    // }
+                  // }, this);
+                  
+                  
+                }
+
+                Graph.prototype.idxOf = function(nodeId) {
+                  return this.ids.indexOf(nodeId);
+                };
+                Graph.prototype.getNode = function(nodeId) {
+                  return this.nodes[this.ids.indexOf(nodeId)];
+                };
+
+                function _expand(workflow) {
+                  var ret = [];
+                  var prev;
+                  workflow.forEach(function(item) {
+                    if (item instanceof Array) {
+                      if (item[0].hasOwnProperty('parallel')) {
+                        if (prev) {
+                          ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
+                              function(elt) {
+                                return [prev].concat(_expand([elt]), prev);
+                              }));
+                        } else {
+                          throw new Error("Bad workflow structure : " +
+                              "cannot parallel loop without previous starting point.");
+                        }
+                      } else if (prev) {
+                        ret = ret.concat(_expand(item), prev);
+                      } else {
+                        ret = ret.concat(_expand(item));
+                      }
+                      prev = ret[ret.length - 1];
+                    } else if (item.hasOwnProperty('parallel')) {
+                      if (prev) {
+                        ret = ret.slice(0, ret.length - 1).concat(
+                            item.parallel.map(function(elt) {
+                              return [prev].concat(_expand([elt]));
+                            }));
+                      } else {
+                        ret = ret.concat(item.parallel.map(
+                            function(elt) {
+                              return _expand([elt]);
+                            }));
+                      }
+                      prev = undefined;
+                    } else {
+                      var i = ret.length - 1;
+                      var flagParallel = false;
+                      while (i >= 0 && (ret[i] instanceof Array)) {
+                        ret[i] = ret[i].concat(item);
+                        i -= 1;
+                        flagParallel = true;
+                      }
+                      if (!flagParallel) {
+                        ret.push(item);
+                      }
+                      prev = item;
+                    }
+                  }, this);
+                  return ret;
+                }
+
+                Graph.expand = function(item) {
+                  var expanded = _expand(item);
+                  var result = [];
+                  var current = [];
+                  expanded.forEach(function(elt) {
+                    if (elt instanceof Array) {
+                      if (current.length > 0) {
+                        current.push(elt[0]);
+                        result.push(current);
+                        current = [];
+                      }
+                      result.push(elt);
+                    } else {
+                      if (result.length > 0 && current.length === 0) {
+                        var lastChain = result[result.length - 1];
+                        var lastElt = lastChain[lastChain.length - 1];
+                        current.push(lastElt);
+                      }
+                      current.push(elt);
+                    }
+                  }, this);
+                  if (current.length > 0) {
+                    result.push(current);
+                  }
+                  return result;
+                };
+
+                Graph.new_expand = function(workflow,nodes) {
+                    var ids = nodes.map(function(elt) {
+                        return elt.id;
+                    });
+                    var result_tmp = [];
+                    for (var i=0; i < workflow.length; i++)
+                    {
+                        var stepNumber = workflow[i].step_number
+                        var edges = workflow[i].edges;
+                        for (var j=0; j < edges.length; j++)
+                        {
+                            var fromNode = edges[j][0];
+                            var toNode = edges[j][1];			
+                            var fromId = ids.indexOf(fromNode)+1;
+                            var toId = ids.indexOf(toNode)+1;
+                            result_tmp.push([fromId,toId]);
+                        }
+                    }
+                    var result = [];
+                    result.push(result_tmp)
+                    return result;
+                };
+
+                Graph.number = function(workflow, num) {
+                  num = (typeof num === 'undefined') ? 0 : num;
+                  var toNum = {};
+                  var toNode = [];
+
+                  function setStep(step, nodeId) {
+                    if (step in toNode) {
+                      toNode[step].push(nodeId);
+                    } else {
+                      toNode[step] = [nodeId];
+                    }
+                  }
+
+                  function setNum(nodeId, beg, end) {
+                    if (end === undefined) {
+                      num = String(beg);
+                      setStep(beg, nodeId);
+                    } else {
+                      num = end + "-" + beg;
+                      setStep(end, nodeId);
+                    }
+                    if (nodeId in toNum) {
+                      toNum[nodeId] += "," + num;
+                    } else {
+                      toNum[nodeId] = num;
+                    }
+                  }
+
+                  function _number(wks, num) {
+                    var ret = 0;
+                    if (wks instanceof Array) {
+                      if (wks.length === 0) {
+                        ret = num;
+                      } else if (wks.length === 1) {
+                        ret = _number(wks[0], num);
+                      } else {
+                        var head = wks[0];
+                        var tail = wks.slice(1);
+                        var beg = _number(head, num);
+                        if (tail[0] instanceof Array) {
+                          var end = _number(tail[0], beg);
+                          setNum(head, beg, end);
+                          beg = end + 1;
+                          tail.shift();
+                        }
+                        ret = _number(tail, beg);
+                      }
+                    } else if ((wks instanceof Object) && 'parallel' in wks) {
+                      var nums = wks.parallel.map(function(branch) {
+                        return _number(branch, num);
+                      });
+                      ret = Math.max.apply(null, nums);
+                    } else {
+                      setNum(wks, num);
+                      ret = num + 1;
+                    }
+                    return ret;
+                  }
+
+                  _number(workflow, num);
+                  // console.log('toNodes=', JSON.stringify(toNode));
+                  // console.log('toNum=',JSON.stringify(toNum));
+                  return {toNum: toNum, toNode: toNode};
+                };
+
+                //aigner: New numbering for the workflow nodes
+                Graph.new_number = function(workflow, num) {
+                    num = (typeof num === 'undefined') ? 0 : num;
+                    var toNum = {};
+                    var toNode = [];
+                    
+                    for (var i=0; i < workflow.length; i++)
+                    {
+                        //aigner: Number the nodes with respect to the defined process steps
+                        //--> toNum
+                        //##########################################
+                        for (var j=0; j < workflow[i].process_step_blocks.length; j++)
+                        {
+                            var proc_id_to = workflow[i].process_step_blocks[j];
+                            if (proc_id_to)
+                            {
+
+                                if (!toNum[proc_id_to])
+                                {
+                                    toNum[proc_id_to] = workflow[i].step_number;
+                                }
+                                else
+                                {
+                                    toNum[proc_id_to] += "," + workflow[i].step_number;
+                                }
+                            }
+                        }
+                        for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
+                        {
+                            var conv_id_to = workflow[i].converger_step_blocks[j];
+                            if (conv_id_to)
+                            {
+                                toNum[conv_id_to] += "," + workflow[i].step_number;
+                                var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
+                                //aigner: CAUTION --> hard coded exception for coordinator
+                                if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
+                            }
+                        }
+                        //##########################################		
+                        //--> toNode
+                        //##########################################
+                        var stepNumber = workflow[i].step_number
+                        var nodeId;
+                        if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
+                        else
+                        {
+                            var nodeIds = [];
+                            for (var j=0; j<workflow[i].edges.length ;j++)
+                            {
+                                nodeIds.push(workflow[i].edges[j][1]);
+                            }
+                            nodeId = nodeIds;
+                        }
+                        toNode[stepNumber] = nodeId;
+                        //##########################################
+                    }	
+                    return {toNum: toNum, toNode: toNode};
+                };
+
+                module.exports = Graph;
+
+                },{}],4:[function(require,module,exports){
+                function Labelizer() {}
+
+                Labelizer.strParse = function(str) {
+                  if (str === "") {
+                    return [{base: '', sub: undefined, sup: undefined}];
+                  }
+
+                  //console.log("STR-->")
+                  //console.log(str);
+                  //aigner: Space sign added
+                  var lstr = str.split(',');
+                  var underscores = /_/g;
+                  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
+
+                  var res = lstr.map(function(s) {
+                    var base;
+                    var sub;
+                    var sup;
+                    
+                    //aigner: Modification. xpath is split after each "/"
+                    var s_split = s.split("/");
+                    s = s_split[s_split.length-1];
+
+                    if ((s.match(underscores) || []).length > 1) {
+                      var mu = s.match(/(.+)^(.+)/);
+                      if (mu) {
+                        return {base: mu[1], sub: undefined, sup: mu[2]};
+                      }
+                      return {base: s, sub: undefined, sup: undefined};
+                    }
+                    var m = s.match(rg);
+                    if (m) {
+                      base = (m[1] ? m[1] : "") + m[2];
+                      if (m[3]) {
+                        sub = m[3].substring(1);
+                      }
+                      if (m[4]) {
+                        sup = m[4].substring(1);
+                      }
+                    } else {
+                      throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
+                    }
+                    return {base: base, sub: sub, sup: sup};
+                  }, this);
+                 
+                  return res;
+                };
+
+                Labelizer.labelize = function() {
+                  var ellipsis = 0;
+
+                  //aigner: createLabel modified. Hide variable names if too long.
+                  function createLabel(selection) 
+                  {
+                    selection.each(function(d) {
+                        //console.log("Labelize-->");
+                        //console.log(d);
+                      var tokens = Labelizer.strParse(d.name);
+                      var text = selection.append("text");
+
+                      var className = selection._groups[0][0].getAttribute("class");
+
+                      if (className.includes("node"))
+                      {
+                        tokens.every(function(token, i, ary)
+                        {
+                            var offsetSub = 0;
+                            var offsetSup = 0;
+                            //aigner: If the node is too big, it will not be shown at first, only when hovering
+                            if (ellipsis < 1 || i < 15) 
+                            {
+                                text.append("tspan").text(token.base);
+                                if (token.sub) 
+                                {
+                                offsetSub = 10;
+                                text.append("tspan")
+                                  .attr("class", "sub")
+                                  .attr("dy", offsetSub)
+                                  .text(token.sub);
+                                }
+                                if (token.sup) {
+                                    offsetSup = -10;
+                                    text.append("tspan")
+                                      .attr("class", "sup")
+                                      .attr("dx", -5)
+                                      .attr("dy", -offsetSub + offsetSup)
+                                      .text(token.sup);
+                                    offsetSub = 0;
+                                }
+                            } else 
+                            {
+                                text.append("tspan")
+                                    .attr("dy", -offsetSub - offsetSup)
+                                    .text("...");
+                                selection.classed("ellipsized", true);
+                                return false;
+                            }
+                            if (i < ary.length - 1) 
+                            {
+                                  text.append("tspan")
+                                    .attr("dy", -offsetSub - offsetSup)
+                                    .text(", ");
+                            }
+                            return true;
+                        }, this);
+                      }
+                      else if(className.includes("edge"))
+                      {	  
+                            var offsetSub = 0;
+                            var offsetSup = 0;
+                            //aigner: If there are more than 5 variables in an edge, they are not shown!
+                            tokens.every(function(token, i, ary)
+                            {           			
+                                if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
+                                else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
+                                else{text_tmp = "conn."}
+                                //if (ary.length>1){text_tmp = text_tmp+"s"};
+                                text.append("tspan")
+                                .attr("dy", -offsetSub - offsetSup)
+                                .text(ary.length + " " + text_tmp);                    
+                                
+                                selection.classed("ellipsized", true);
+                                return false;
+                            }, this);
+                      }
+                    });
+                  }
+
+                  createLabel.ellipsis = function(value) {  
+                    if (!arguments.length) {
+                      return ellipsis;
+                    }
+                    ellipsis = value;
+                    return createLabel;
+                  };
+
+                  return createLabel;
+                };
+
+                Labelizer.tooltipize = function() {
+                  var text = "";
+
+                  function createTooltip(selection) {
+                    var tokens = Labelizer.strParse(text);
+                    var html = [];
+                    tokens.forEach(function(token) {
+                      var item = token.base;
+                      if (token.sub) {
+                        item += "<sub>" + token.sub + "</sub>";
+                      }
+                      if (token.sup) {
+                        item += "<sup>" + token.sup + "</sup>";
+                      }
+                      html.push(item);
+                    }, this);
+                    selection.html(html.join(", "));
+                  }
+
+                  createTooltip.text = function(value) {
+                    if (!arguments.length) {
+                      return text;
+                    }
+                    text = value;
+                    return createTooltip;
+                  };
+
+                  return createTooltip;
+                };
+
+                module.exports = Labelizer;
+
+                },{}],5:[function(require,module,exports){
+                var d3 = require('d3');
+                var Labelizer = require('./labelizer.js');
+
+                var WIDTH = 1000;
+                var HEIGHT = 500;
+                var X_ORIG = 70;
+                var Y_ORIG = 20;
+                var PADDING = 20;
+                var CELL_W = 250;
+                var CELL_H = 75;
+                var MULTI_OFFSET = 3;
+
+                function Cell(x, y, width, height) {
+                  this.x = x;
+                  this.y = y;
+                  this.width = width;
+                  this.height = height;
+                }
+
+                function Xdsm(graph, svgid, tooltip) {
+                  this.graph = graph;
+                  this.tooltip = tooltip;
+                  this.svg = d3.select(".xdsm")
+                               .append("svg")
+                             .attr("width", WIDTH)
+                             .attr("height", HEIGHT)
+                             .attr("class", svgid);
+
+                  this.grid = [];
+                  this.nodes = [];
+                  this.edges = [];
+                }
+
+                Xdsm.prototype.draw = function(graphName) {
+                  var self = this;
+
+                  if (self.graph.refname) {
+                    var ref = self.svg.append('g').classed('title', true);
+
+                    var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
+                        
+                    //ref.append("text").text(graphName);
+                    var bbox = ref.nodes()[0].getBBox();
+                    ref.insert("rect", "text")
+                        .attr('x', bbox.x)
+                        .attr('y', bbox.y)
+                        .attr('width', bbox.width)
+                        .attr('height', bbox.height);
+
+                    ref.attr('transform',
+                             'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
+                  }
+
+                  self.nodes = self._createTextGroup("node");
+                  self.edges = self._createTextGroup("edge");
+
+                  // Workflow
+                  self._createWorkflow();
+
+                  // Layout texts
+                  self._layoutText(self.nodes);
+                  self._layoutText(self.edges);
+
+                  // Rectangles for nodes
+                  self.nodes.each(function(d, i) {
+                    var that = d3.select(this);
+                    that.call(self._customRect.bind(self), d, i, 0);
+                    if (d.isMulti) {
+                      that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+                      that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+                    }
+                  });
+
+                  // Trapezium for edges
+                  self.edges.each(function(d, i) {
+                    var that = d3.select(this);
+                    that.call(self._customTrapz.bind(self), d, i, 0);
+                    if (d.isMulti) {
+                      that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+                      that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+                    }
+                  });
+
+                  // Dataflow
+                  self._createDataflow(self.edges);
+                    
+                  //aigner: set svg size
+                  var w = CELL_W * (self.graph.nodes.length + 1);
+                  var h = CELL_H * (self.graph.nodes.length + 1);
+                  self.svg.attr("width", w).attr("height", h);
+
+                  var bordercolor = 'black';
+                  self.svg.append("rect")
+                            .classed("border", true)
+                            .attr("x", 4)
+                            .attr("y", 4)
+                            .attr("height", h - 4)
+                            .attr("width", w - 4)
+                            .style("stroke", bordercolor)
+                            .style("fill", "none")
+                            .style("stroke-width", 0);
+                            
+                  //aigner: PlayButton for animation
+                  var playButton = self.svg.append("g").attr("class", "playButton")
+                      .attr("transform", "translate("+ 10 +","+ 10 +")")
+                      
+                  playButton
+                    .append("rect")
+                      .attr("class", "playButton_rect")
+                      .attr("width", 50)
+                      .attr("height", 50)
+                      .attr("rx", 4)
+                      .style("fill", "#555555");
+                      
+                  playButton
+                    .append("path")
+                      .attr("class", "playButton_triangle")
+                      .attr("d", "M15 10 L15 40 L35 25 Z")
+                      .style("fill", "white");
+                      
+                  playButton.append("text")
+                      .attr("y",20)
+                      .attr("x",60)
+                      .text("Play Workflow")
+
+                  //aigner: Hide playbutton if there is no workflow process
+                  if(self.graph.nodesByStep.length<1)
+                  {
+                      playButton.attr("visibility","hidden")
+                  }
+                  playButton.append("svg:title").text("Click to play workflow");
+                };
+
+                Xdsm.prototype._createTextGroup = function(kind) {
+                  var self = this;
+
+                  var group = self.svg.append('g').attr("class", kind + "s");
+
+                  var textGroups =
+                    group.selectAll("." + kind)
+                      .data(this.graph[kind + "s"])
+                    .enter()
+                      .append("g").attr("class", function(d) {
+                        var klass = kind === "node" ? d.type : "dataInter";
+                        if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
+                          klass = "dataIO";
+                        }
+                        return d.id + " " + kind + " " + klass;
+                      }).each(function() {
+                        var labelize = Labelizer.labelize().ellipsis(5);
+                        d3.select(this).call(labelize);
+                      });
+
+                  d3.selectAll(".ellipsized")
+                    .on("mouseover", function(d) {
+                        d3.select(this).style("cursor", "pointer")
+                        self.tooltip.transition().duration(200).style("opacity", 0.9);
+                        var pipeData = d.name.split(",");
+                        var pipeVariables=[];
+                        for (var i=0; i<pipeData.length; i++)
+                        {
+                            if (pipeData[i].includes("/"))
+                            {
+                                var splitPipeData = pipeData[i].split("/");
+                                pipeVariables.push(splitPipeData[splitPipeData.length-1]);
+                            }
+                        }
+                        
+
+                        var pruned_pipeVars = {};
+                        var tooltipText="";
+                        pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
+                        for(var keyName in pruned_pipeVars) {
+                            var textTmp;
+                            var value = pruned_pipeVars[keyName]
+                            if (value>1){textTmp = String(keyName+"("+value+")")}
+                            else{textTmp=String(keyName)}
+                            if (tooltipText==""){tooltipText+=textTmp}
+                            else{tooltipText+=","+textTmp}
+                        }
+                        
+                        var tooltipize = Labelizer.tooltipize().text(tooltipText);
+                        self.tooltip.call(tooltipize)
+                          .style("width", "200px")
+                          .style("left", (d3.event.pageX) + "px")
+                          .style("top", (d3.event.pageY - 28) + "px");
+                    })
+                    .on("mouseout", function() {
+                        self.tooltip.transition().duration(500).style("opacity", 0);
+                    });
+
+                  return textGroups;
+                };
+
+                Xdsm.prototype._createWorkflow = function() {
+                  //  console.log(JSON.stringify(this.graph.chains));
+                  var workflow = this.svg.insert("g", ":first-child")
+                                    .attr("class", "workflow");
+                  workflow.selectAll("g")
+                    .data(this.graph.chains)
+                  .enter()
+                    .insert('g').attr("class", "workflow-chain")
+                    .selectAll('polyline')
+                      .data(function(d) { return d; })  // eslint-disable-line brace-style
+                    .enter()
+                      .append("polyline")
+                        .attr("class", function(d) {
+                          return "link_" + d[0] + "_" + d[1];
+                        })
+                        .attr("points", function(d) {
+                          var w = CELL_W * Math.abs(d[0] - d[1]);
+                          var h = CELL_H * Math.abs(d[0] - d[1]);
+                          var points = [];
+                          if (d[0] < d[1]) {
+                            if (d[0] !== 0) {
+                              points.push((-w) + ",0");
+                            }
+                            points.push("0,0");
+                            if (d[1] !== 0) {
+                              points.push("0," + h);
+                            }
+                          } else {
+                            if (d[0] !== 0) {
+                              points.push(w + ",0");
+                            }
+                            points.push("0,0");
+                            if (d[1] !== 0) {
+                              points.push("0," + (-h));
+                            }
+                          }
+                          return points.join(" ");
+                        })
+                      .attr("transform", function(d) {
+                        var max = Math.max(d[0], d[1]);
+                        var min = Math.min(d[0], d[1]);
+                        var w;
+                        var h;
+                        if (d[0] < d[1]) {
+                          w = CELL_W * max + X_ORIG;
+                          h = CELL_H * min + Y_ORIG;
+                        } else {
+                          w = CELL_W * min + X_ORIG;
+                          h = CELL_H * max + Y_ORIG;
+                        }
+                        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+                      });
+                };
+
+                Xdsm.prototype._createDataflow = function(edges) {
+                  var dataflow = this.svg.insert("g", ":first-child")
+                                   .attr("class", "dataflow");
+
+                  edges.each(function(d, i) {
+                    dataflow.insert("polyline", ":first-child")
+                      .attr("points", function() {
+                        var w = CELL_W * Math.abs(d.col - d.row);
+                        var h = CELL_H * Math.abs(d.col - d.row);
+                        var points = [];
+                        if (d.iotype === "in") {
+                          if (!d.io.fromU) {
+                            points.push((-w) + ",0");
+                          }
+                          points.push("0,0");
+                          if (!d.io.toU) {
+                            points.push("0," + h);
+                          }
+                        } else {
+                          if (!d.io.fromU) {
+                            points.push(w + ",0");
+                          }
+                          points.push("0,0");
+                          if (!d.io.toU) {
+                            points.push("0," + (-h));
+                          }
+                        }
+                        return points.join(" ");
+                      }).attr("transform", function() {
+                        var m = (d.col === undefined) ? i : d.col;
+                        var n = (d.row === undefined) ? i : d.row;
+                        var w = CELL_W * m + X_ORIG;
+                        var h = CELL_H * n + Y_ORIG;
+                        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+                      });
+                  });
+                };
+
+                Xdsm.prototype._layoutText = function(items) {
+                  var grid = this.grid;
+                  items.each(function(d, i) {
+                    var item = d3.select(this);
+                    if (grid[i] === undefined) {
+                      grid[i] = new Array(items.length);
+                    }
+                    item.select("text").each(function(d, j) {
+                      var that = d3.select(this);
+                      var data = item.data()[0];
+                      var m = (data.row === undefined) ? i : data.row;
+                      var n = (data.col === undefined) ? i : data.col;
+                      var bbox = that.nodes()[j].getBBox();
+                      grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
+                      that.attr("x", function() {
+                        return grid[m][n].x;
+                      }).attr("y", function() {
+                        return grid[m][n].y;
+                      }).attr("width", function() {
+                        return grid[m][n].width;
+                      }).attr("height", function() {
+                        return grid[m][n].height;
+                      });
+                    });
+                  });
+
+                  items.attr("transform", function(d, i) {
+                    var m = (d.col === undefined) ? i : d.col;
+                    var n = (d.row === undefined) ? i : d.row;
+                    var w = CELL_W * m + X_ORIG;
+                    var h = CELL_H * n + Y_ORIG;
+                    return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+                  });
+                };
+
+                Xdsm.prototype._customRect = function(node, d, i, offset) {
+                  var grid = this.grid;
+                  node.insert("rect", ":first-child").attr("x", function() {
+                    return grid[i][i].x + offset - PADDING;
+                  }).attr("y", function() {
+                    return -grid[i][i].height * 2 / 3 - PADDING - offset;
+                  }).attr("width", function() {
+                    return grid[i][i].width + (PADDING * 2);
+                  }).attr("height", function() {
+                    return grid[i][i].height + (PADDING * 2);
+                  }).attr("rx", function() {
+                    var rounded = d.type === 'optimization' ||
+                                  d.type === 'mda' ||
+                                  d.type === 'doe' ||
+                                  d.type === 'converger';
+                    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+                  }).attr("ry", function() {
+                    var rounded = d.type === 'optimization' ||
+                                  d.type === 'mda' ||
+                                  d.type === 'doe' ||
+                                  d.type === 'converger';
+                    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+                  });
+                };
+
+                Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
+                  var grid = this.grid;
+                  edge.insert("polygon", ":first-child").attr("points", function(d) {
+                    var pad = 5;
+                    var w = grid[d.row][d.col].width;
+                    var h = grid[d.row][d.col].height;
+                    var topleft = (-pad - w / 2 + offset) + ", " +
+                                  (-pad - h * 2 / 3 - offset);
+                    var topright = (w / 2 + pad + offset + 5) + ", " +
+                                   (-pad - h * 2 / 3 - offset);
+                    var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
+                                   (pad + h / 3 - offset);
+                    var botleft = (-pad - w / 2 + offset - 5) + ", " +
+                                  (pad + h / 3 - offset);
+                    var tpz = [topleft, topright, botright, botleft].join(" ");
+                    return tpz;
+                  });
+                };
+
+                module.exports = Xdsm;
+
+                },{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
+                /*
+                 * XDSMjs
+                 * Copyright 2016 Rémi Lafage
+                 */
+                "use strict";
+
+
+
+
+                var d3 = require('d3');
+                var Graph = require('./src/graph');
+                var Xdsm = require('./src/xdsm');
+                var Animation = require('./src/animation');
+
+
+                //aigner: NEW!
+                //#####################################################################//
+                //aigner: functions for drawing expand- and collapse-symbols
+                function drawExpandSymbol(aCircle, line1, line2)
+                {        
+                     aCircle = aCircle
+                        .attr("r", 10)
+                        .style("stroke", "black")
+                        .style("stroke-width", 2)
+                        .style("fill", "#99CC00")
+                        .style("fill-opacity", .6)
+                    line1 = line1
+                        .attr("x1", parseFloat(aCircle.attr("cx"))-5)
+                        .attr("y1", parseFloat(aCircle.attr("cy")))
+                        .attr("x2", parseFloat(aCircle.attr("cx"))+5)
+                        .attr("y2", parseFloat(aCircle.attr("cy")))
+                        .style("stroke", "black")
+                        .style("stroke-width", 2);
+                    line2 = line2
+                        .attr("x1", parseFloat(aCircle.attr("cx")))
+                        .attr("y1", parseFloat(aCircle.attr("cy"))-5)
+                        .attr("x2", parseFloat(aCircle.attr("cx")))
+                        .attr("y2", parseFloat(aCircle.attr("cy"))+5)
+                        .style("stroke", "black")
+                        .style("stroke-width", 2);
+                }
+                function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+                {        
+                     var xOffset=150;
+                     var yOffset=12;
+                     aCircle = aCircle
+                        .attr("cx", anXdsm.svg.attr("width")-xOffset)
+                        .attr("cy", yOffset)
+                        .attr("r", 10)
+                        .classed("remCircle",true)
+                    aMinus = aMinus
+                        .attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+                        .attr("y1", yOffset)
+                        .attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+                        .attr("y2", yOffset)
+                        .classed("remMinus",true)
+                }
+                function drawTreeRemoveSymbol(aRemoveSymbol)
+                {
+                    aRemoveSymbol = aRemoveSymbol
+                        .attr("class", "treeRemoveSymbol")
+                        .attr("transform", "translate(38,12)")
+                    var circle = aRemoveSymbol.append("circle");
+                    var minus = aRemoveSymbol.append("line");
+                    var cx = -20;
+                    var cy = 12;
+                    circle = circle
+                        .attr("cx", cx+5)
+                        .attr("cy", cy)
+                        .attr("r", 10)
+                        .classed("remCircle",true)
+                    minus = minus
+                        .attr("x1", cx)
+                        .attr("y1", cy)
+                        .attr("x2", cx+10)
+                        .attr("y2", cy)
+                        .classed("remMinus",true)
+                    aRemoveSymbol
+                        .on("mouseover", function(){
+                            d3.select(this).style("cursor", "pointer")
+                            circle.style("fill", "red").style("fill-opacity", .8);
+                            })
+                        .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+                }
+
+                //aigner: Update of the sub workflows
+                function update_subXdsm(xdsms, refName)
+                {
+                    var playButton = d3.select(".xdsm").select("."+refName).select(".playButton");
+                    var rect = playButton.select(".playButton_rect");
+                    playButton.on("mouseover",function(){
+                            d3.select(this).style("cursor", "pointer")
+                            rect.style("fill","#3399FF");
+                        })
+                        .on("mousedown", function()
+                        {
+                            rect.style("fill","#3399FF");
+                            var anim = new Animation(xdsms, refName);
+                            anim.run();
+                        })
+                        .on("mouseup", function(){rect.style("fill","#4B4B4B");})
+                        .on("mouseout", function(){rect.style("fill","#555555");})
+                }
+                //d3-context-menu for right-click-option
+                d3.contextMenu = function (menu, openCallback) {
+
+                    // create the div element that will hold the context menu
+                    d3.selectAll('.d3-context-menu').data([1])
+                        .enter()
+                        .append('div')
+                        .attr('class', 'd3-context-menu');
+
+                    // close menu
+                    d3.select('body').on('click.d3-context-menu', function() {
+                        d3.select('.d3-context-menu').style('display', 'none');
+                    });
+
+                    // this gets executed when a contextmenu event occurs
+                    return function(data, index) {	
+                        var elm = this;
+
+                        d3.selectAll('.d3-context-menu').html('');
+                        var list = d3.selectAll('.d3-context-menu').append('ul');
+                            list.selectAll('li').data(menu).enter()
+                            .append('li')
+                            .html(function(d) {
+                                return d.title;
+                            })
+                            .on('mousedown', function(d, i) {
+                                d.onMouseDown(elm, data, index);
+                            })
+                            .on('mouseup', function(d, i) {
+                                d.onMouseUp(elm, data, index);
+                                d3.select('.d3-context-menu').style('display', 'none');
+                            })
+                            .on('mouseenter',function(d,i){
+                                d.onMouseOver(elm,data,index);
+                                if(d.childrenItems.length>0 )
+                                     {
+                                      d3.select(this).selectAll("ul").remove(); 
+                                      d3.select(this)
+                                        .append("ul")
+                                        .selectAll("li")
+                                           .data(d.childrenItems)
+                                            .enter().append("li")
+                                              .text(function(d) { return d.title; })
+                                         .on("mouseenter", function(d,i){
+                                                d.onMouseOver(elm,data,index);
+                                            })
+                                         .on('click',  function(d, i) {
+                                                d.onMouseClick(elm, d, index);
+                                            })
+                                         .on('mouseleave',function(d,i){
+                                            
+                                            });
+                                     }
+                                 else
+                                     return false;
+                            })
+                            .on('mouseleave',function(d,i){
+                                d3.select(this).selectAll("ul").style('display', 'none')                  
+                            });
+                        
+                          
+
+                        // the openCallback allows an action to fire before the menu is displayed
+                        // an example usage would be closing a tooltip
+                        if (openCallback) openCallback(data, index);
+
+                        // display context menu
+                        d3.select('.d3-context-menu')
+                            .style('left', (d3.event.pageX - 2) + 'px')
+                            .style('top', (d3.event.pageY - 2) + 'px')
+                            .style('display', 'block');
+
+                        d3.event.preventDefault();
+                    };
+                };
+                //aigner: Move to front function
+                d3.selection.prototype.moveToFront = function() {  
+                  return this.each(function(){
+                    this.parentNode.appendChild(this);
+                  });
+                };
+                //aigner: Include function
+                function include(arr,obj) {
+                        return (arr.indexOf(obj) != -1);
+                }
+
+                //aigner: Function creates a table
+                function tabulate(aTable,data,columns) {
+                    var thead = aTable.append('thead');
+                    var	tbody = aTable.append('tbody');  
+
+                    // create a row for each object in the data
+                    var rows = tbody.selectAll('tr')
+                      .data(data)
+                      .enter()
+                      .append('tr');
+
+                    // create a cell in each row for each column
+                    var cells = rows.selectAll('td')
+                      .data(function (row) {
+                        return columns.map(function (column) {
+                          return {column: column, value: row[column]};
+                        });
+                      })
+                      .enter()
+                      .append('td')
+                        .html(function (d) { return d.value; });
+
+                    return aTable;
+                }
+
+                function loader(config) {
+                  return function() {
+                    var radius = Math.min(config.width, config.height) / 2;
+                    var tau = 2 * Math.PI;
+
+                    var arc = d3.svg.arc()
+                            .innerRadius(radius*0.5)
+                            .outerRadius(radius*0.9)
+                            .startAngle(0);
+
+                    var svg = d3.select(config.container).append("svg")
+                        .attr("id", config.id)
+                        .attr("width", config.width)
+                        .attr("height", config.height)
+                      .append("g")
+                        .attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")")
+
+                    var background = svg.append("path")
+                            .datum({endAngle: 0.33*tau})
+                            .style("fill", "#4D4D4D")
+                            .attr("d", arc)
+                            .call(spin, 1500)
+
+                    function spin(selection, duration) {
+                        selection.transition()
+                            .ease("linear")
+                            .duration(duration)
+                            .attrTween("transform", function() {
+                                return d3.interpolateString("rotate(0)", "rotate(360)");
+                            });
+
+                        setTimeout(function() { spin(selection, duration); }, duration);
+                    }
+
+                    function transitionFunction(path) {
+                        path.transition()
+                            .duration(7500)
+                            .attrTween("stroke-dasharray", tweenDash)
+                            .each("end", function() { d3.select(this).call(transition); });
+                    }
+
+                  };
+                }
+
+
+                var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
+                
+                //aigner: NEW!
+                //aigner: Here, the data is read and the XDSM is created
+                //#####################################################################//
+                function startDataModel(data) 
+                {				                                  
+                    d3.select("body").append("div").attr("class","modelViewerDiv")	
+                    //################################################################################################//	
+                    var headerDiv = d3.select(".modelViewerDiv").append("div").attr("class","panel panel-primary")
+                    headerDiv.append("div").attr("class","panel-heading text-center")
+                        .append("h3")
+                        .attr("class","panel-title")
+                        .style("font-family","Arial")
+                        .style("font-size","20pt")
+                        .text("VISTOMS Data Model Viewer")
+                    //################################################################################################//	
+                    
+                    
+                    //aigner: Data Model Expand Button
+                    //##########################################################
+                    var dataModelDiv = d3.select(".modelViewerDiv").append("div").attr("class","dataModelDiv").attr("transform","translate(10,0)")
+                    var ul = dataModelDiv.append("ul")
+                    var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+                    dropdown1.append("img").attr("src",fileReference.AGILE_Icon)
+                        .attr("align","left")
+                        .style("margin-left","6px")
+                        .style("margin-right","-10px")
+                        .style("margin-top","10px")
+                        .style("margin-bottom","0px")
+                        .attr("height","20")
+                        .attr("width","20")
+                    dropdown1.append("a").text("View Data Model")
+                    dropdown1.on("click", function()
+                    {		
+                        showFullTree()
+                    })
+                    
+                    //aigner: Set width of the div, so the VISTOMS dropdown (in the top of the page) still works
+                    dataModelDiv.style("width", String(dropdown1.node().getBoundingClientRect().width+20)+"px")
+                    //##########################################################
+                    
+                    //aigner: Tree option menu to select which kind of tree view the user wants to see
+                    //#####################################################################//
+                    var emptyArray;
+                    function showFullTree()
+                    {
+                        //expandSymbolDiv.remove();
+                        var treeLayoutdiv = d3.select(".modelViewerDiv").append("div").attr("class","treeDiv")
+                                                        .style("left",(d3.event.pageX) + "px")
+                                                        .style("top",(d3.event.pageY - 28) + "px")
+                                                        .style("position", "absolute")
+                        var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+                        var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+                        var name = data.modelName;
+                        maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name);
+                        //Remove Symbol is created
+                        var removeSymbol = treeLayout.append("g");
+                        drawTreeRemoveSymbol(removeSymbol);
+                        removeSymbol.on("mousedown", function(d)
+                        {
+                            treeLayoutdiv.remove();
+                        })
+                    }
+                    //#####################################################################//
+
+                    
+                        
+                    function clean_tree(objArray)
+                    {
+                        for (var i = 0; i < objArray.length; ++i) 
+                        {
+                            var obj = objArray[i];
+                            if (obj.children)
+                            {
+                                if (obj.children.length==0)
+                                {
+                                    objArray.splice(i, 1);
+                                    i--;
+                                }
+                                clean_tree(obj.children);
+                            }
+                        }
+                    }
+                    function countElements(node, counter) 
+                    {
+                        counter ++;
+                        if (node.children)
+                        {
+                            if (node.children.length !== 0)
+                            {
+                                node.children.forEach(function(n)
+                                {
+                                    counter = countElements(n, counter);
+                                });
+                            }
+                        }
+                        return counter;
+                    }
+                    
+                    
+                    function maketreeLayout(pipeData, layout, svg, div, aName)
+                    {			
+                        //aigner: here the tree layout begins
+                        //Drag Function for treeLayout
+                        var xPos_init = d3.event.pageX - 2;
+                        var yPos_init = d3.event.pageY - 2;
+                        var xOffset_tmp;
+                        var yOffset_tmp;
+                        var drag = div.call(d3.drag()
+                            .on("start", dragstarted)
+                            .on("drag", dragged)
+                            .on("end", dragended));
+                        function dragstarted() {
+                          d3.select(this).style("cursor", "grabbing")
+                          d3.select(this).raise().classed("active", true);
+                          xOffset_tmp = xPos_init-d3.event.x;
+                          yOffset_tmp = yPos_init-d3.event.y;
+                        }
+                        function dragged() {
+                             d3.select(this).classed("active", false)
+                                .style("left",(d3.event.x+xOffset_tmp) + "px")
+                                .style("top",(d3.event.y+yOffset_tmp) + "px")
+                        }
+                        function dragended() {
+                          d3.select(this).style("cursor", "grab")
+                          d3.select(this).classed("active", false);
+                          xPos_init = d3.event.x+xOffset_tmp;
+                          yPos_init = d3.event.y+yOffset_tmp;
+                        }
+                        createTree()
+                        
+                        function createTree()
+                        {
+                            var schema = data.schema;
+                            var treeData = (JSON.parse(JSON.stringify(schema)));				
+                            //aigner: Here, the minimalized tree is created!
+                            //Transferred variables: 
+                            //1) parentXPath --> xPath until current nodes
+                            //2) objArray --> Array of current nodes
+                            //3) xPathList --> Array of actually used pipeLine data
+                            
+                            if (pipeData)
+                            {
+                                prune_tree("/"+treeData.name+"/", treeData.children, pipeData);
+                                //aigner: count all descendants of a node
+                                var firstEl = pipeData.split("/")[1];
+                                if(firstEl != treeData.name)
+                                {
+                                    var cleanOperations = countElements(treeData,0)
+                                    for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+                                }
+                            }
+                            
+                            // Set the dimensions and margins of the diagram
+                            var margin = {top: 20, right: 90, bottom: 20, left: 90},
+                                width = 960 - margin.left - margin.right,
+                                height = 500 - margin.top - margin.bottom;
+
+                            // append the svg object to the body of the page
+                            // appends a 'group' element to 'svg'
+                            // moves the 'group' element to the top left margin
+                            var offset_tmp = 60;
+                            svg = svg.attr("width", width + margin.right + margin.left+offset_tmp)
+                                     .attr("height", height + margin.top + margin.bottom+offset_tmp);
+                            div = div.attr("width", width + margin.right + margin.left+offset_tmp)
+                                     .attr("height", height + margin.top + margin.bottom+offset_tmp);
+                            layout = layout
+                                .attr("width", width + margin.right + margin.left)
+                                .attr("height", height + margin.top + margin.bottom);
+                            var name;
+                            var rect = layout.append("rect")
+                                    .attr("class","treeFrame")
+                                    .attr("width", 0)
+                                    .attr("height", 70)
+                                    .attr("transform", "translate("
+                                      + String(10) + "," + String(10) + ")")
+                                    .attr("fill", "white")
+                                    .attr("stroke", "darkgrey")
+                                    .attr("stroke-width", 0)
+                                    .attr("fill-opacity", 0.8)
+                            //aigner: Put remove button on top of the rect
+                            d3.selectAll(".treeRemoveSymbol").moveToFront();
+                            
+                            //aigner: Exit, if no tree data is available!
+                            if (!treeData.children || treeData.children.length==0)
+                            {
+                                var newText = layout.append('text')
+                                .attr("dx", 40)
+                                .attr("dy", 55)
+                                .style("font-family", "Arial")
+                                .style("font-size", "32pt")
+                                .style("font-weight", "bold")
+                                .html(function (d) {
+                                    return 'No tree view available! &#8594; Please check data for consistency!';
+                                });
+                                
+                                var newWidth;
+                                rect.attr("width",  function(d) {
+                                    newWidth = this.parentNode.getBBox().width+20;
+                                    return newWidth;}) 
+                                div = div.attr("width", newWidth+30)
+                                svg = svg.attr("width", newWidth+30)
+                                return;
+                            }
+                            
+                            var newText = layout.append('text')
+                                .attr("dx", 40)
+                                .attr("dy", 30)
+                                .style("font-family", "Arial")
+                                .style("font-size", "12pt")
+                                .style("font-weight", "bold")
+                                .text(aName);
+                            
+                            // Calculate total nodes, max label length
+                            var totalNodes = 0;
+                            var maxLabelLength = 0;
+                            
+                            var i = 0,
+                                duration = 500,
+                                root;
+
+                            // declares a tree layout and assigns the size
+                            var treemap = d3.tree().size([height, width]);
+
+                            // Assigns parent, children, height, depth
+                            root = d3.hierarchy(treeData, function(d) { return d.children; });
+                            root.x0 = height / 2;
+                            root.y0 = 0;
+                            
+                            // Append a group which holds all nodes and which the zoom Listener can act upon.
+                            var svgGroup_xOff = root.data.name.length*10
+                            var svgGroup = layout.append("g")
+                                .attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+                            
+                                
+                            // Collapse root initially
+                            collapse(root);
+                            update(root);
+
+                            // Collapse the node and all it's children
+                            function collapse(d) {
+                              if(d.children) {
+                                d._children = d.children
+                                d._children.forEach(collapse)
+                                d.children = null
+                              }
+                            }
+                            // Collapse the node and all it's children
+                            function expand(d) {
+                              if(d._children) {
+                                d.children = d._children
+                                d.children.forEach(expand)
+                                d._children = null
+                              }
+                            }
+                            // Toggle children on click.
+                            function click(d) 
+                            {
+                                if (d.children) {
+                                    d._children = d.children;
+                                    d.children = null;
+                                } else 
+                                {
+                                    d.children = d._children;
+                                    d._children = null;
+                                }
+                                update(d);
+                            }
+                            // Collapse/expand entire tree on double-click
+                            function dblclick(d) 
+                            {
+                                if(d.children) 
+                                {
+                                    collapse(d);
+                                }
+                                else if(d._children)
+                                {
+                                    expand(d);
+                                }
+                                update(d);
+                            }	
+                            
+                            function update(source) 
+                            {
+                                var levelWidth = [1];
+                                var getLevelWidth = function(level, n) 
+                                {
+                                    if (n.children && n.children.length > 0) {
+                                        if (levelWidth.length <= level + 1) levelWidth.push(0);
+                                        
+                                        //establish maxLabelLength
+                                        maxLabelLength = Math.max(n.data.name.length, maxLabelLength);
+                                        
+                                        levelWidth[level + 1] += n.children.length;
+                                        n.children.forEach(function(d) {
+                                            getLevelWidth(level + 1, d);
+                                        });
+                                    }
+                                };
+                                getLevelWidth(0, root);
+                                var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+                                //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour 
+                                
+                                layout = layout.attr("height", newHeight + margin.top + margin.bottom)
+                                svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom)
+                                treemap = treemap.size([newHeight, width]);
+                                
+                                
+                                // Assigns the x and y position for the nodes
+                                var treeData = treemap(root);
+
+                                // Compute the new tree layout.
+                                var nodes = treeData.descendants(),
+                                    links = treeData.descendants().slice(1);
+                                
+                                //aigner: count all descendants of a node
+                                function countDescendants(node, counter) 
+                                {
+                                    if (node._children)
+                                    {
+                                        node._children.forEach(function(n)
+                                        {
+                                            counter = countDescendants(n, counter);
+                                        });
+                                    }
+                                    else if (node.children)
+                                    {
+                                        node.children.forEach(function(n)
+                                        {
+                                            counter = countDescendants(n, counter);
+                                        });
+                                    }
+                                    else
+                                    {
+                                        counter ++;
+                                    }
+                                    return counter;
+                                }
+                                
+                                
+                                var depth_tmp = 0;
+                                var labelLength = [];
+                                labelLength.push(0);
+                                nodes.forEach(function(d) 
+                                {				
+                                    //aigner: If node is collapsed show number of ancestors
+                                    if (d._children)
+                                    {
+                                        d._childrenNum = countDescendants(d, 0);
+                                        d.data.text = d.data.name + " (" + d._childrenNum + ")";
+                                    }
+                                    else 
+                                    {
+                                        d.data.text = d.data.name
+                                    }
+                                    
+                                    //aigner: Find maximum labelLength for each level
+                                    if (d.depth>depth_tmp)
+                                    {
+                                        depth_tmp = d.depth;
+                                        labelLength.push(d.data.text.length);
+                                    }
+                                    else
+                                    {
+                                        if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);}
+                                    }
+                                });
+                                // Set widths between levels based on labelLength of each level.
+                                var y_tmp = 100;		
+                                var depth_tmp = 0;							
+                                nodes.forEach(function(d) 
+                                {
+                                    if (d.depth>depth_tmp)
+                                    {
+                                        depth_tmp = d.depth;
+                                        d.y = y_tmp+(labelLength[depth_tmp])*12+50;
+                                    }
+                                    else
+                                    {
+                                        d.y = y_tmp;
+                                    }
+                                    newWidth=d.y;
+                                    y_tmp = d.y;
+                                });
+                                
+                                
+                                function getTextWidth(text, font) 
+                                {
+                                    // re-use canvas object for better performance
+                                    var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
+                                    var context = canvas.getContext("2d");
+                                    context.font = font;
+                                    var metrics = context.measureText(text);
+                                    return metrics.width;
+                                }					
+                                newWidth=Math.max(newWidth,getTextWidth(aName,"Arial 12pt"));
+                                
+                                //aigner: Adjust height and width of the frame
+                                div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+                                div = div.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
+                                    .on("mousedown", function(d) {
+                                        //d3.select(this).moveToFront();
+                                    })
+                                svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+                                svg = svg.attr("width", newWidth + margin.top + margin.bottom +400+maxLabelLength*25+offset_tmp)
+                                rect = rect.attr("height", newHeight + margin.top + margin.bottom)
+                                rect = rect.attr("width", newWidth + margin.top + margin.bottom+400+maxLabelLength*15)
+                                
+                                
+                                // ****************** Nodes section ***************************
+                                // Update the nodes...
+                                var node = svgGroup.selectAll('g.treeNode')
+                                  .data(nodes, function(d) {return d.id || (d.id = ++i); });
+                                
+                                var dblclick_timer = false;
+                                // Enter any new modes at the parent's previous position.
+                                var nodeEnter = node.enter().append('g')
+                                  .attr('class', 'treeNode')
+                                  .attr("transform", function(d) {
+                                    return "translate(" + source.y0 + "," + source.x0 + ")";
+                                })
+                                .on("mousedown", function(d) {
+                                    //prevent tree from expanding on right click!
+                                    if (d3.event.which != 3)
+                                    {
+                                        // if double click timer is active, this click is the double click
+                                        if ( dblclick_timer )
+                                        {
+                                            clearTimeout(dblclick_timer)
+                                            dblclick_timer = false
+                                            // double click code code comes here
+                                            //console.log("DOUBLE CLICK")
+                                            dblclick(d);
+                                        }
+                                        // otherwise, what to do after single click (double click has timed out)
+                                        else dblclick_timer = setTimeout( function(){
+                                            dblclick_timer = false
+                                            // single click code code comes here
+                                            //console.log("SINGLE CLICK")
+                                            click(d);
+                                        }, 250)
+                                    }
+                                    
+                                })
+                                
+                                // Add Circle for the nodes
+                                nodeEnter.append('circle')
+                                  .attr('class', 'treeNode')
+                                  .attr('r', 4.5)
+                                  .style("fill", function(d) {
+                                        if (d._children)
+                                        {
+                                            if(aName.includes("Input")){return '#ea9999'}
+                                            else if(aName.includes("Output")){return '#d6ea99'}
+                                            else {return "lightsteelblue"}
+                                        }
+                                        else {return "#fff"}
+                                  })
+                                  .style("stroke", function(d) {
+                                        if(aName.includes("Input")){
+                                            //console.log(d);
+                                            return '#CC0000'}
+                                        else if(aName.includes("Output")){
+                                            //console.log(d);
+                                            return '#99CC00'}
+                                  });
+
+                                // Add labels for the nodes
+                                nodeEnter.append('text')
+                                  .attr('class', 'nodeText')
+                                  .attr("dy", ".35em")
+                                  .attr("x", function(d) {
+                                      return d.children || d._children ? -13 : 13;
+                                  })
+                                  .attr("text-anchor", function(d) {
+                                      return d.children || d._children ? "end" : "start";
+                                  })
+                                  //.text(function(d) { return d.data.text; });
+                                  
+                                  
+                                // Function to download data to a file
+                                function download(filename, text) {
+                                    var element = document.createElement('a');
+                                    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+                                    element.setAttribute('download', filename);
+
+                                    element.style.display = 'none';
+                                    document.body.appendChild(element);
+
+                                    element.click();
+
+                                    document.body.removeChild(element);
+                                }
+                                
+                                //Highlight function, that shows usage of a node in the XDSM
+                                function highlight(data,aText)
+                                {
+                                    aText = "/"+data.data.name+aText;
+                                    if (data.parent){highlight(data.parent,aText)}
+                                    else
+                                    {
+                                        scenarioKeys.forEach(function(k)
+                                        {
+                                            var xdsm_tmp;
+                                            xdsm_tmp = xdsms[k];
+                                            if (xdsm_tmp)
+                                            {
+                                                xdsm_tmp.svg.selectAll(".edge").each(function(p) 
+                                                {
+                                                    var firstElement_tmp = p.name.split("/")[1]
+                                                    var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+                                                    if (include(p.name,text_fromFirst))
+                                                    {
+                                                        var highlightEdge = d3.select(this).select("polygon");
+                                                        highlightEdge
+                                                            .style("stroke-width",5.)
+                                                            .style("stroke","#CC0000")
+                                                        d3.selectAll(".treeFrame")
+                                                            .attr("fill-opacity", 0.5)
+                                                            .attr("stroke-opacity", 0.5);
+                                                        d3.selectAll(".nodeText").style("fill-opacity",0.5);
+                                                    }
+                                                })
+                                            }
+                                        })
+                                    }
+                                }
+                                
+                                //Unhighlight function again
+                                function unhighlight(data,aText)
+                                {
+                                    aText = "/"+data.data.name+aText;
+                                    if (data.parent){unhighlight(data.parent,aText)}
+                                    else
+                                    {
+                                        scenarioKeys.forEach(function(k)
+                                        {
+                                            var xdsm_tmp;
+                                            xdsm_tmp = xdsms[k];
+                                            if (xdsm_tmp)
+                                            {
+                                                xdsm_tmp.svg.selectAll(".edge").each(function(p) 
+                                                {
+                                                    var firstElement_tmp = p.name.split("/")[1]
+                                                    var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+                                                    if (include(p.name,text_fromFirst))
+                                                    {
+                                                        var highlightEdge = d3.select(this).select("polygon");
+                                                        highlightEdge
+                                                            .style("stroke-width",1.)
+                                                            .style("stroke","black");
+                                                        d3.selectAll(".treeFrame")
+                                                            .attr("fill-opacity", 0.8)
+                                                            .attr("stroke-opacity", 0.8);
+                                                        d3.selectAll(".nodeText").style("fill-opacity",1);
+                                                    }
+                                                })
+                                            }
+                                        })
+                                    }
+                                }							
+                                  
+                                
+                                function showVariableTable(aVariable)
+                                {						
+                                    var varTableDiv = d3.select(".modelViewerDiv").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name)
+                                        .style('left', (d3.event.pageX - 2) + 'px')
+                                        .style('top', (d3.event.pageY - 2) + 'px')
+                                        .style("position", "absolute")
+                                        .on("mousedown", function(d) {
+                                            d3.select(this).moveToFront();
+                                        })
+                                    var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+                                    
+                                    //Drag Function for variable table
+                                    var xPos_init = d3.event.pageX - 2;
+                                    var yPos_init = d3.event.pageY - 2;
+                                    var xOffset_tmp;
+                                    var yOffset_tmp;
+                                    var drag = varTableDiv.call(d3.drag()
+                                        .on("start", dragstarted)
+                                        .on("drag", dragged)
+                                        .on("end", dragended));
+                                    function dragstarted() {
+                                      d3.select(this).raise().classed("active", true);
+                                      xOffset_tmp = xPos_init-d3.event.x;
+                                      yOffset_tmp = yPos_init-d3.event.y;
+                                    }
+                                    function dragged() {
+                                         d3.select(this).classed("active", false)
+                                            .style("left",(d3.event.x+xOffset_tmp) + "px")
+                                            .style("top",(d3.event.y+yOffset_tmp) + "px")
+                                    }
+                                    function dragended() {
+                                      d3.select(this).classed("active", false);
+                                      xPos_init = d3.event.x+xOffset_tmp;
+                                      yPos_init = d3.event.y+yOffset_tmp;
+                                    }
+                                    
+                                    var headLine = "Node Information (" + aName + ")";
+                                    var tabRemoveSVG = varTableGroup.append("svg")
+                                        .attr("width",String(headLine.length*9.5+"pt"))
+                                        .attr("height",26)
+                                    tabRemoveSVG.append("rect")
+                                        .attr("width", "100%")
+                                        .attr("height", "100%")
+                                        .attr("fill", "white");
+                                    var tabRemoveSymbol = tabRemoveSVG.append("g");
+                                    tabRemoveSymbol = tabRemoveSymbol
+                                        .attr("class", "tabRemoveSymbol")
+                                        .attr("transform", "translate(26,0)")
+                                    var circle = tabRemoveSymbol.append("circle")
+                                        .classed("remCircle",true)
+                                    var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+                                    var cx = -20;
+                                    var cy = 12;
+                                    circle = circle
+                                        .attr("cx", cx+5)
+                                        .attr("cy", cy)
+                                        .attr("r", 10)
+                                    minus = minus
+                                        .attr("x1", cx)
+                                        .attr("y1", cy)
+                                        .attr("x2", cx+10)
+                                        .attr("y2", cy)
+                                        
+                                    
+                                    tabRemoveSVG.append("text").attr("class","tabRemoveText")
+                                        .attr("transform", "translate(26,20)")
+                                        .attr("fill", "black")
+                                        .style("font-family", "Arial")
+                                        .style("font-size", "16pt")
+                                        .style("font-weight", "bold")
+                                        .text(headLine);
+                                    
+                                    
+                                    tabRemoveSymbol
+                                        .on("mouseover", function(){
+                                            d3.select(this).style("cursor", "pointer")
+                                            circle.style("fill", "red").style("fill-opacity", .8);
+                                            })
+                                        .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+                                    tabRemoveSymbol.on("mousedown", function(d)
+                                    {
+                                        varTableDiv.remove();
+                                    })
+                                    
+                                    
+                                    
+                                    var data = [];
+                                    // render the table(s)
+                                    data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" })
+                                    
+                                    function getNodeXPath(strWrapper,aNode) 
+                                    {
+                                      strWrapper.val = "/"+aNode.data.name+strWrapper.val;
+                                      if (!aNode.parent) 
+                                      {
+                                        return strWrapper;
+                                      }
+                                      else 
+                                      {
+                                        
+                                        return getNodeXPath(strWrapper, aNode.parent);
+                                      }
+                                    }
+                                    var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+                                    data.push({ "name" : "xPath", "value" : xPath_tmp })
+                                    if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })}
+                                    if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })}
+                                    if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })}
+                                    if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })}
+                                    else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+                                    if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })}
+                                    var table = varTableGroup.append('table');
+                                    tabulate(table,data,['name', 'value']); // 2 column table
+                                }
+                                
+                               
+                                //menu --> functions for right click options
+                                var nodeMenu = [
+                                {
+                                    title: 'Show node information',
+                                    onMouseDown: function(elm, d, i) {
+                                        showVariableTable(d);
+                                    },
+                                    onMouseUp: function(elm, d, i) {},
+                                    onMouseOver: function(elm, d, i) {},
+                                    childrenItems: []
+                                },
+                                {
+                                    title: 'Copy x-path to clipboard',
+                                    onMouseDown: function(elm, d, i) {
+                                        function copyToClipboard(text) 
+                                        {
+                                            window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+                                        }
+                                        function copyXPathToClipboard(data,aText)
+                                        {
+                                            aText = "/"+data.data.name+aText;
+                                            if (data.parent){copyXPathToClipboard(data.parent,aText)}
+                                            else{copyToClipboard(aText);}
+                                        }
+                                        var copyText="";
+                                        copyXPathToClipboard(d,copyText);
+                                        d3.select('.d3-context-menu').style('display', 'none');
+                                    },
+                                    onMouseUp: function(elm, d, i) {
+                                    },
+                                    onMouseOver: function(elm, d, i) {
+                                    },
+                                    childrenItems: []
+                                },
+                                {
+                                    title: 'Download full tree as XML-file',
+                                    onMouseDown: function(elm, d, i) {
+                                        //Begin xml structure with the first element
+                                        var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">";
+                                        //Create a new xml document
+                                        var parser = new DOMParser();
+                                        var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+                                        //Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+                                        var initialXPath = "/"+nodes[0].data.name;								
+                                        writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+                                        //remove all attributes dummyID
+                                        removeAttributeInAllElements(xmlDocument,'dummyID');
+                                        //Make the xml document a string
+                                        var serializer = new XMLSerializer();
+                                        var xmlString = serializer.serializeToString(xmlDocument);
+                                        xmlString = vkbeautify.xml(xmlString);														
+                                        //Download a document with the xml-schema
+                                        download(aName+'_full.xml',xmlString);						
+                                    },
+                                    onMouseUp: function(elm, d, i) {
+                                    },
+                                    onMouseOver: function(elm, d, i) {
+                                    },
+                                    childrenItems: []
+                                },
+                                {
+                                    title: 'Download tree as XML-file from current node',
+                                    onMouseDown: function(elm, d, i) {
+                                        var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+                                        var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+                                        //Create a new xml document
+                                        var parser = new DOMParser();
+                                        var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+                                        //Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+                                        writeTreeToXML(d,xmlDocument,initialXPath);
+                                        //remove all attributes dummyID
+                                        removeAttributeInAllElements(xmlDocument,'dummyID');
+                                        //Make the xml document a string
+                                        var serializer = new XMLSerializer();
+                                        xmlString = serializer.serializeToString(xmlDocument);
+                                        xmlString = vkbeautify.xml(xmlString);														
+                                        //Download a document with the xml-schema
+                                        download(aName+"_"+d.data.name+'.xml',xmlString);						
+                                    },
+                                    onMouseUp: function(elm, d, i) {
+                                    },
+                                    onMouseOver: function(elm, d, i) {
+                                    },
+                                    childrenItems: []
+                                }
+                                ]
+                                
+                                //Function writeTreeToXML goes through tree nodes and puts the into an xml document
+                                function writeTreeToXML(aNode,anXMLDoc,anXPath)
+                                {
+                                    //Variable "children" 
+                                    //--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+                                    var children;
+                                    if (aNode._children){children = aNode._children;}
+                                    else if (aNode.children){children = aNode.children;}
+                                    
+                                    //Get current xml element with its xPath
+                                    var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+                                    if (element != null) {element.value = '...';}
+                                    
+                                    //If a node has children (collapsed or expanded), loop through them
+                                    if (children)
+                                    {
+                                        for (var i=0; i < children.length;i++)
+                                        {
+                                            //Name of the new XML element --> childName
+                                            var child = children[i];
+                                            var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+                                            var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+                                            var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+                                            
+                                            //The children are appended to the xPath --> newXPath
+                                            var newXPath = anXPath+"/"+cleanChildName[0];
+                                            
+                                            //If childName contains a uID, make the uID an attribute
+                                            if (childName[1])
+                                            {
+                                                if (parseInt(childName[1]))
+                                                {
+                                                    var dummyID = childName[1];
+                                                    newNode.setAttribute("dummyID", dummyID)
+                                                    newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+                                                }
+                                                else
+                                                {
+                                                    var uID = childName[1];
+                                                    newNode.setAttribute("uID", uID)
+                                                    newXPath = newXPath+"[@uID='"+uID+"']";
+                                                }
+                                            }
+                                            if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+                                            
+                                            //Append the newNode to the xml structure
+                                            element.appendChild(newNode);
+                                            
+                                            
+                                            
+                                            ////aigner: Sorting of XML elements according to "uID"
+                                            // var items = element.children;
+                                            // var itemsArr = [];
+                                            // for (var j in items) {
+                                                // if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+                                                    // itemsArr.push(items[j]);
+                                                // }
+                                            // }
+                                            // itemsArr.sort(function(a,b){
+                                                // if (a.getAttribute("uID") < b.getAttribute("uID"))
+                                                    // return -1;
+                                                // if (a.getAttribute("uID") > b.getAttribute("uID"))
+                                                    // return 1;
+                                                // return 0;
+                                                // });
+
+                                            // for (j = 0; j < itemsArr.length; ++j) {
+                                              // element.appendChild(itemsArr[j]);
+                                            // }
+                                            
+                                            //call function writeTreeToXML recursively for all children
+                                            writeTreeToXML(child,anXMLDoc,newXPath)
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (aNode.data.value){element.innerHTML = String(aNode.data.value);}
+                                        else{element.innerHTML = " ";}
+                                    }
+                                    //return the xml document
+                                    return anXMLDoc;
+                                }
+                                
+                                function removeAttributeInAllElements(aDocument,attribute)
+                                {
+                                  var matchingElements = [];
+                                  var allElements = aDocument.getElementsByTagName('*');
+                                  for (var i = 0, n = allElements.length; i < n; i++)
+                                  {
+                                    if (allElements[i].getAttribute(attribute) !== null)
+                                    {
+                                        allElements[i].removeAttribute(attribute);
+                                    }
+                                  }
+                                  return matchingElements;
+                                }
+                                
+                                function putAncestorsInXMLString(strWrapper, aNode)
+                                {
+                                    //Name of the new XML element
+                                    var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+                                    var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+                                    //If nodeName contains a uID, make the uID an attribute
+                                    if (nodeName[1])
+                                    {
+                                        var uID = nodeName[1];
+                                        strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+                                    }
+                                    else
+                                    {
+                                        strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+                                    }
+                                    var aParent = aNode.parent;
+                                    if (aParent)
+                                    {
+                                        return putAncestorsInXMLString(strWrapper, aParent);
+                                    }
+                                    else 
+                                    {
+                                        return strWrapper;
+                                    }
+                                }
+                                
+                                function putAncestorsInXPath(strWrapper, aNode)
+                                {
+                                    //Name of the new XML element
+                                    var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+                                    var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+                                    //If nodeName contains a uID, make the uID an attribute
+                                    if (nodeName[1])
+                                    {
+                                        var uID = nodeName[1];
+                                        strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+                                    }
+                                    else
+                                    {
+                                        strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+                                    }
+                                    var aParent = aNode.parent;
+                                    if (aParent)
+                                    {
+                                        return putAncestorsInXPath(strWrapper, aParent);
+                                    }
+                                    else 
+                                    {
+                                        return strWrapper;
+                                    }
+                                }
+                                  
+                                nodeEnter = nodeEnter
+                                .on('contextmenu', d3.contextMenu(nodeMenu));
+                                
+                                nodeEnter.append("svg:title").text("Click left to expand, click right to inspect")
+                                
+                                
+
+                                // UPDATE
+                                var nodeUpdate = nodeEnter.merge(node);
+
+                                // Transition to the proper position for the node
+                                nodeUpdate.transition()
+                                .duration(duration)
+                                .attr("transform", function(d) { 
+                                    return "translate(" + d.y + "," + d.x + ")";
+                                 });
+
+                                // Update the node attributes and style
+                                nodeUpdate.select('circle.treeNode')
+                                .attr('r', 4.5)
+                                .style("fill", function(d) {
+                                        if (d._children)
+                                        {
+                                            if(aName.includes("Input")){return '#ea9999'}
+                                            else if(aName.includes("Output")){return '#d6ea99'}
+                                            else {return "lightsteelblue"}
+                                        }
+                                        else {return "#fff"}
+                                  })
+                                .attr('cursor', 'pointer');
+                                
+                                nodeUpdate.select('text')
+                                .text(function(d) { return d.data.text; });
+
+
+                                // Remove any exiting nodes
+                                var nodeExit = node.exit().transition()
+                                  .duration(duration)
+                                  .attr("transform", function(d) {
+                                      return "translate(" + source.y + "," + source.x + ")";
+                                  })
+                                  .remove();
+
+                                // ****************** links section ***************************
+
+                                // Update the links...
+                                var link = svgGroup.selectAll('path.treeLink')
+                                  .data(links, function(d) { return d.id; });
+
+                                // Enter any new links at the parent's previous position.
+                                var linkEnter = link.enter().insert('path', "g")
+                                  .attr("class", "treeLink")
+                                  .attr('d', function(d){
+                                    var o = {x: source.x0, y: source.y0}
+                                    return diagonal(o, o)
+                                  });
+
+                                // UPDATE
+                                var linkUpdate = linkEnter.merge(link);
+
+                                // Transition back to the parent element position
+                                linkUpdate.transition()
+                                  .duration(duration)
+                                  .attr('d', function(d){ return diagonal(d, d.parent) });
+
+                                // Remove any exiting links
+                                var linkExit = link.exit().transition()
+                                  .duration(duration)
+                                  .attr('d', function(d) {
+                                    var o = {x: source.x, y: source.y}
+                                    return diagonal(o, o)
+                                  })
+                                  .remove();
+
+                                // Store the old positions for transition.
+                                nodes.forEach(function(d){
+                                d.x0 = d.x;
+                                d.y0 = d.y;
+                                });
+
+                                // Creates a curved (diagonal) path from parent to the child nodes
+                                function diagonal(s, d) {
+                                return "M" + s.y + "," + s.x
+                                      + "C" + (s.y + d.y) / 2 + "," + s.x
+                                      + " " + (s.y + d.y) / 2 + "," + d.x
+                                      + " " + d.y + "," + d.x;
+                                }
+                            }
+                        }
+                    }
+                }
+                startDataModel(theData,"01");
+
+                ////aigner: Unused funcktions --> Could be helpful at some point
+                ////aigner: clone function, so that original object is not overwritten but deep copied
+                // function clone(obj) {
+                    // if (null == obj || "object" != typeof obj) return obj;
+                    // var copy = obj.constructor();
+                    // for (var attr in obj) {
+                        // if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
+                    // }
+                    // return copy;
+                // }
+                ////aigner: cleanArray Function
+                // function cleanArray(actual) 
+                // {
+                    // var newArray = new Array();
+                    // for (var i = 0; i < actual.length; i++) 
+                    // {
+                        // if (actual[i]) 
+                        // {
+                            // newArray.push(actual[i]);
+                        // }
+                    // }
+                    // return newArray;
+                // }
+                //#####################################################################//
+
+
+                },{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
+            }
+		
+		
+		
+		
+		</script>
+    </body>
 </html>
\ No newline at end of file
diff --git a/kadmos/vispack/VISTOMS_170817/include/AGILE_Icon.png b/kadmos/vispack/VISTOMS_170817/include/AGILE_Icon.png
deleted file mode 100755
index 774dbf9c876d6d90d13764e55742a64e7839a49e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 24690
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
KTCs|K=>GsL;=2U^

diff --git a/kadmos/vispack/VISTOMS_170817/include/AGILE_Logo.png b/kadmos/vispack/VISTOMS_170817/include/AGILE_Logo.png
deleted file mode 100755
index ccdb4d4b1093ba56c9c7c98a3d0b53c8deb62d2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14199
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

diff --git a/kadmos/vispack/VISTOMS_170817/include/Acknowledgements.png b/kadmos/vispack/VISTOMS_170817/include/Acknowledgements.png
deleted file mode 100755
index f27c42f33251e38325fdf6d1baa5c0926ef01905..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 192042
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%0DR450>iDDK?Q&7HBEc2Bgo;yHP47s3zex
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

diff --git a/kadmos/vispack/VISTOMS_170817/include/Acknowledgements.svg b/kadmos/vispack/VISTOMS_170817/include/Acknowledgements.svg
deleted file mode 100755
index 4e477d0b2..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/Acknowledgements.svg
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Capa_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 451.486 451.486"
-   style="enable-background:new 0 0 451.486 451.486;"
-   xml:space="preserve"
-   inkscape:version="0.48.5 r10040"
-   width="100%"
-   height="100%"
-   sodipodi:docname="clap.svg"><metadata
-   id="metadata55"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-   id="defs53" /><sodipodi:namedview
-   pagecolor="#ffffff"
-   bordercolor="#666666"
-   borderopacity="1"
-   objecttolerance="10"
-   gridtolerance="10"
-   guidetolerance="10"
-   inkscape:pageopacity="0"
-   inkscape:pageshadow="2"
-   inkscape:window-width="640"
-   inkscape:window-height="787"
-   id="namedview51"
-   showgrid="false"
-   inkscape:zoom="0.36961766"
-   inkscape:cx="185.26515"
-   inkscape:cy="225.57005"
-   inkscape:window-x="0"
-   inkscape:window-y="200"
-   inkscape:window-maximized="0"
-   inkscape:current-layer="Capa_1" />
-<g
-   id="g3"
-   style="fill:#ffffff">
-	<path
-   d="M152.841,149.025c2.242,0,4.437,0.23,6.563,0.678c-0.532-12.992,7.069-25.523,19.824-30.623   c3.743-1.492,7.678-2.248,11.691-2.248c9.011,0,17.259,3.813,23.104,10.135l23.252-24.15c6.808-7.064,6.616-18.309-0.478-25.117   c-3.443-3.32-7.886-4.967-12.323-4.967c-4.659,0-9.311,1.818-12.792,5.451l-70.316,73.037   C145.056,149.779,148.906,149.025,152.841,149.025z"
-   id="path5"
-   style="fill:#ffffff" />
-	<path
-   d="M112.855,313.141c4.028-6.592,9.943-11.582,17.059-14.408c4.229-1.695,8.68-2.557,13.225-2.557   c6.531,0,12.931,1.809,18.53,5.244l7.216,4.42l-0.5-1.248l-5.368-13.477h0.006l-39.471-98.822   c-2.88-7.199-2.896-15.004-0.315-22.242l-6.022,6.254l-0.024-0.023l-38.217,39.703l7.942-62.623   c0.909-7.225-1.749-14.086-6.663-18.793c-3.304-3.203-7.648-5.383-12.593-5.998c-0.955-0.123-1.909-0.186-2.849-0.186   c-10.999,0-20.555,8.203-21.973,19.408L4.445,333.875c-1.756,8.533,0.978,17.375,7.256,23.412l65.48,63.055   c4.859,4.674,11.205,7.092,17.606,7.092c4.504,0,9.033-1.193,13.093-3.641l55.636-33.52l-39.571-28.719   C107.742,351.156,102.75,329.576,112.855,313.141z"
-   id="path7"
-   style="fill:#ffffff" />
-	<path
-   d="M270.023,133.77l3.358,8.41L288,126.99c6.8-7.063,6.57-18.33-0.494-25.131c-3.441-3.311-7.886-4.967-12.322-4.967   c-4.651,0-9.305,1.824-12.792,5.453l-12.47,12.955C258.933,118.018,266.381,124.664,270.023,133.77z"
-   id="path9"
-   style="fill:#ffffff" />
-	<path
-   d="M367.574,292.963l-50.707-126.955c-2.465-6.17-8.396-9.928-14.648-9.928c-1.95,0-3.937,0.363-5.854,1.133   c-8.079,3.234-12.03,12.414-8.781,20.494l24.376,61.029c0.778,1.947,0.748,4.119-0.077,6.045c-0.823,1.916-2.378,3.434-4.328,4.211   c-0.962,0.387-1.948,0.564-2.926,0.564c-3.128,0-6.091-1.881-7.325-4.961l-41.928-104.973c-2.464-6.172-8.387-9.928-14.648-9.928   c-1.956,0-3.936,0.361-5.861,1.131c-8.079,3.227-12.023,12.408-8.779,20.494l41.92,104.982c0.777,1.941,0.748,4.113-0.078,6.037   c-0.823,1.918-2.38,3.436-4.32,4.213c-0.954,0.377-1.94,0.564-2.912,0.564c-3.134,0-6.107-1.881-7.339-4.969l-47.781-119.631   c-2.464-6.162-8.395-9.912-14.656-9.912c-1.948,0-3.928,0.361-5.846,1.123c-8.087,3.236-12.03,12.408-8.795,20.502l47.789,119.615   c0.778,1.951,0.746,4.123-0.077,6.039c-0.825,1.926-2.388,3.443-4.328,4.221c-0.955,0.377-1.941,0.563-2.912,0.563   c-3.134,0-6.107-1.879-7.339-4.969l-41.928-104.975c-2.458-6.168-8.38-9.926-14.643-9.926c-1.948,0-3.936,0.361-5.859,1.131   c-8.087,3.229-12.03,12.408-8.789,20.494l44.855,112.309l-0.016,0.008l14.988,37.521c0.446,1.131,0.123,2.418-0.809,3.205   c-0.516,0.438-1.163,0.662-1.817,0.662c-0.508,0-1.023-0.139-1.48-0.416l-40.494-24.855c-3.213-1.963-6.77-2.91-10.282-2.91   c-2.52,0-5.022,0.484-7.363,1.426c-3.796,1.51-7.163,4.229-9.465,7.994c-5.699,9.271-2.795,21.41,6.484,27.117l135.243,98.166   c4.406,3.188,9.634,4.836,14.918,4.836c3.172,0,6.369-0.592,9.41-1.809l71.457-28.543c10.659-4.26,17.136-15.148,15.789-26.557   l-12.022-101.539C367.574,293.018,367.582,292.986,367.574,292.963z"
-   id="path11"
-   style="fill:#ffffff" />
-	<path
-   d="M364.771,94.436c-5.838-2.881-12.947-0.523-15.866,5.314c-2.912,5.854-0.532,12.953,5.313,15.865   c13.04,6.492,22.767,17.66,27.389,31.461c4.628,13.803,3.604,28.574-2.882,41.605c-2.91,5.854-0.531,12.953,5.315,15.865   c1.694,0.84,3.496,1.24,5.267,1.24c4.344,0,8.527-2.404,10.598-6.553c9.305-18.693,10.775-39.889,4.136-59.682   C397.402,119.768,383.454,103.74,364.771,94.436z"
-   id="path13"
-   style="fill:#ffffff" />
-	<path
-   d="M382.361,59.092c-5.8-2.928-12.931-0.523-15.858,5.322c-2.91,5.846-0.531,12.947,5.322,15.859   c46.381,23.088,65.333,79.611,42.245,126.006c-2.912,5.846-0.532,12.947,5.322,15.857c1.686,0.848,3.489,1.24,5.26,1.24   c4.344,0,8.525-2.402,10.596-6.561C464.154,158.754,440.431,87.996,382.361,59.092z"
-   id="path15"
-   style="fill:#ffffff" />
-	<path
-   d="M194.347,54.24c1.093-6.438-3.243-12.545-9.689-13.641c-20.609-3.465-41.288,1.271-58.303,13.371   c-17.013,12.092-28.303,30.09-31.776,50.678c-1.093,6.439,3.243,12.545,9.688,13.639c0.671,0.109,1.333,0.162,1.987,0.162   c5.669,0,10.675-4.082,11.646-9.857c2.434-14.357,10.296-26.91,22.165-35.344c11.852-8.441,26.278-11.768,40.649-9.313   C187.184,64.922,193.26,60.688,194.347,54.24z"
-   id="path17"
-   style="fill:#ffffff" />
-	<path
-   d="M65.343,111.701c0.67,0.109,1.331,0.164,1.987,0.164c5.667,0,10.674-4.082,11.652-9.859   c8.634-51.078,57.162-85.666,108.309-77c6.438,1.008,12.546-3.26,13.641-9.697c1.085-6.447-3.259-12.547-9.697-13.641   c-30.991-5.223-62.152,1.91-87.754,20.117C77.874,39.992,60.884,67.078,55.646,98.063C54.561,104.51,58.905,110.609,65.343,111.701   z"
-   id="path19"
-   style="fill:#ffffff" />
-</g>
-<g
-   id="g21">
-</g>
-<g
-   id="g23">
-</g>
-<g
-   id="g25">
-</g>
-<g
-   id="g27">
-</g>
-<g
-   id="g29">
-</g>
-<g
-   id="g31">
-</g>
-<g
-   id="g33">
-</g>
-<g
-   id="g35">
-</g>
-<g
-   id="g37">
-</g>
-<g
-   id="g39">
-</g>
-<g
-   id="g41">
-</g>
-<g
-   id="g43">
-</g>
-<g
-   id="g45">
-</g>
-<g
-   id="g47">
-</g>
-<g
-   id="g49">
-</g>
-</svg>
\ No newline at end of file
diff --git a/kadmos/vispack/VISTOMS_170817/include/Contact.png b/kadmos/vispack/VISTOMS_170817/include/Contact.png
deleted file mode 100755
index 0a5caa34fb1d6124e3d2c25fc2ac1dc3f19e2746..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16269
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

diff --git a/kadmos/vispack/VISTOMS_170817/include/Contact.svg b/kadmos/vispack/VISTOMS_170817/include/Contact.svg
deleted file mode 100755
index daa5d3167..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/Contact.svg
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Contact.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.41849in" height="0.870735in"
-		viewBox="0 0 102.131 62.6929" xml:space="preserve" color-interpolation-filters="sRGB" class="st3">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:none;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:6}
-		.st2 {stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:6}
-		.st3 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="group69-1" transform="translate(3,-3)" v:mID="69" v:groupContext="group">
-			<title>Tabelle.69</title>
-			<g id="shape65-2" v:mID="65" v:groupContext="shape" transform="translate(96.1311,68.6929) rotate(180)">
-				<title>Rechteck.65</title>
-				<v:userDefs>
-					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
-				</v:userDefs>
-				<rect x="0" y="6" width="96.1311" height="56.6929" class="st1"/>
-			</g>
-			<g id="shape63-4" v:mID="63" v:groupContext="shape" transform="translate(74.8163,76.5377) rotate(135)">
-				<title>Tabelle.63</title>
-				<path d="M0 62.69 L43.11 62.69" class="st2"/>
-			</g>
-			<g id="shape66-7" v:mID="66" v:groupContext="shape" transform="translate(96.1311,68.6929) rotate(180)">
-				<title>Dreieck</title>
-				<v:userDefs>
-					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
-				</v:userDefs>
-				<path d="M96.13 62.69 L48.07 25.84 L0 62.69 L96.13 62.69 Z" class="st1"/>
-			</g>
-			<g id="shape68-9" v:mID="68" v:groupContext="shape" transform="translate(21.3147,76.5377) rotate(45) scale(1,-1)">
-				<title>Tabelle.68</title>
-				<path d="M0 62.69 L43.11 62.69" class="st2"/>
-			</g>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_170817/include/Home.png b/kadmos/vispack/VISTOMS_170817/include/Home.png
deleted file mode 100755
index b0d424aa251c297c0ea7869d68d22c438114af53..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8000
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
R@ZWA^&)2TIOTME2^gmeNDQf@#

diff --git a/kadmos/vispack/VISTOMS_170817/include/Home.svg b/kadmos/vispack/VISTOMS_170817/include/Home.svg
deleted file mode 100755
index ecdeccc4b..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/Home.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Home.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.02696in" height="0.962866in"
-		viewBox="0 0 73.9408 69.3264" xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:#ffffff;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
-		.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="shape18-1" v:mID="18" v:groupContext="shape" transform="translate(0.12,-0.12)">
-			<title>Tabelle.18</title>
-			<path d="M73.7 31.01 L36.85 0.24 L0 31.01 L73.7 31.01 ZM46.47 69.33 L63.17 69.33 L63.17 31.01 L10.53 31.01 L10.53 69.33
-						 L28.04 69.33 L28.04 54.96 L46.47 54.96 L46.47 69.33 Z" class="st1"/>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.png b/kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.png
deleted file mode 100755
index 4b083542091aa46b4e9ec0e910c0a149343b2eb6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 126111
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%0A~ny`48y(jO&iJn!SsVU7R_XtSCfnmWF1IX
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
T)E`?~f{gKW^>bP0l+XkKukZ7-

diff --git a/kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.svg b/kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.svg
deleted file mode 100755
index 8f371bc26..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/RWTH_Logo.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   width="650"
-   height="333"
-   viewBox="0 0 650 333.00002"
-   id="svg2"
-   xml:space="preserve"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="RWTH_Logo.svg"><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1536"
-     inkscape:window-height="801"
-     id="namedview9"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:zoom="0.82544099"
-     inkscape:cx="29.266996"
-     inkscape:cy="55.019277"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" /><metadata
-     id="metadata15"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs13" /><!-- RGB 0-84-159 --><!-- RGB 142-186-229 --><g
-     id="g3336"
-     transform="matrix(1.813009,0,0,1.813009,0,78.826532)"><path
-       inkscape:connector-curvature="0"
-       style="fill:#00549f;fill-rule:evenodd"
-       id="rwth"
-       d="m 15.178,46.276998 -0.582,0 -14.596,0 L 0,41.137 0,0.994 0,0.657 l 14.565,0 0.03,0 10.293,0 c 6.75,-0.001 12.57,4.368 14.469,10.161 1.76,5.366 0.256,11.199 -3.713,15.348 0.528,1.431 1.042,2.548 1.532,3.833 1.101,2.54 2.111,5.08 3.212,7.589 l 3.611,8.688998 -0.092,0 -15.299,0 c 0,0.007 -0.123,-0.368 -0.245,-0.52 -0.611,-1.346 -1.162,-2.785 -1.774,-4.131 L 22.887,32.845 c -1.468,-3.55 -2.937,-6.903 -4.406,-10.453 1.834,-0.049 3.204,0.294 4.974,-0.518 1.242,-0.613 3.127,-2.133 3.175,-5.047 -0.048,-1.446 -0.448,-2.54 -1.403,-3.677 -0.959,-1.058 -2.346,-1.842 -4.152,-1.868 0,0 -5.9,-0.003 -5.896,0 l 0,34.994998 z M 166.448,0.665 l -7.917,0 0,16.46 -9.891,0 -0.734,0 0,-13.614 0,-2.846 -10.953,0 -38.551998,0 -10.648,0 -1.254,0 0,20.5 c 0.122,0.948 0.336,1.896 0.428,2.876 l -4.1,-9.332 c -1.836,-4.284 -3.58,-8.568 -5.416,-12.882 -0.153,-0.398 -0.262,-0.665 -0.46,-1.162 l -15.665,0 c 0,2.233 0.031,4.711 0,6.884 l 0,13.616 c 0.153,0.856 0.429,1.988 0.552,2.876 l -0.092,-0.184 c -3.366,-7.68 -6.609,-15.39 -9.821,-23.192 l -15.630002,0 c 0.306,0.918 0.795,1.744 1.102,2.662 l 3.452,8.085 2.409,5.66 0.153,0.344 c 1.108,2.639 1.985,4.706 3.06,7.244 3.099002,7.328 6.081002,14.403 9.187002,21.623998 l 15.665,0 0,-23.864998 c 0.397,1.346 0.704,2.723 1.01,4.1 2.662,6.547 5.539,13.187 8.261,19.764998 l 15.635,0 0,-18.510998 0,-16.552 10.706998,0 0,15.42 0,0.734 0,18.908998 15.056,0 0.123,0 0,-15.634998 0,-15.023 0,-3.304 0,-1.101 10.614,0 0,35.062998 6.702,0 c 2.754,-0.03 5.723,0 8.476,0 l 0,-18.601998 0.123,0 9.087,0 1.415,0 0,18.601998 3.327,0 11.851,0 0,-45.618998 -7.262,0 z" /><path
-       inkscape:connector-curvature="0"
-       style="fill:#8ebae5;fill-rule:evenodd"
-       id="aachen"
-       d="m 227.647,0.891 -11.321,0 -9.476,35.802 -9.478,-35.802 -11.323,0 -12.02,45.416998 9.542,0 2.098,-9.604998 12.086,0 2.099,9.604998 13.992,0 2.098,-9.604998 12.087,0 2.099,9.604998 9.541,0 L 227.647,0.891 Z m -40.388,28.306 4.39,-20.418 0.127,0 4.388,20.418 -8.905,0 z m 30.276,0 4.39,-20.418 0.127,0 4.387,20.418 -8.904,0 z m 40.261,-12.976 c 0,-6.616 -1.336,-9.478 -5.471,-9.478 -4.644,0 -5.726,4.644 -5.726,17.492 0,13.74 1.909,16.22 5.853,16.22 3.309,0 5.724,-1.717 5.724,-11.513 l 9.161,0 c 0,9.796 -2.418,18.255998 -14.438,18.255998 -13.741,0 -15.457,-9.795998 -15.457,-23.597998 0,-13.804 1.716,-23.6 15.457,-23.6 13.103,0 14.055,9.605 14.055,16.221 l -9.158,0 z m 10.935,-15.329 9.157,0 0,17.364 10.688,0 0,-17.364 9.159,0 0,45.415998 -9.159,0 0,-20.163998 -10.688,0 0,20.163998 -9.157,0 0,-45.415998 z m 56.925,-0.001 0,7.505 -16.22,0 0,10.686 15.264,0 0,7.507 -15.264,0 0,12.212 16.856,0 0,7.505998 -26.018,0 0,-45.415998 25.382,0 z m 13.234,0 11.067,31.104 0.126,0 0,-31.104 8.397,0 0,45.415998 -10.433,0 -11.192,-31.803998 -0.131,0 0,31.803998 -8.395,0 0,-45.415998 10.561,0 z" /><path
-       inkscape:connector-curvature="0"
-       style="fill:#8ebae5;fill-rule:evenodd"
-       id="university"
-       d="m 239.843,57.150998 4.327,0 c 4.134,0 6.359,2.099 6.359,6.296 0,4.9 -2.479,6.809 -6.87,6.809 l -3.816,0 0,-13.105 z m -9.158,38.675 9.158,0 0,-19.211 4.899,0 c 3.688,0 5.277,2.162 5.407,5.723 l 0.253,8.715 c 0.063,1.782 0.253,3.5 1.146,4.773 l 9.921,0 0,-0.383 c -1.716,-0.89 -1.972,-3.371 -2.036,-8.142 -0.126,-9.604 -1.079,-13.038 -7.312,-13.868 l 0,-0.126 c 5.15,-1.083 7.568,-5.153 7.568,-11.196 0,-7.759 -4.58,-11.703 -12.085,-11.703 l -16.92,0 0,45.418 z m -134.764998,-45.418 0,31.677 c 0,12.149 7.061998,14.631 14.502998,14.631 7.443,0 14.503,-3.055 14.503,-14.631 l 0,-31.677 -9.16,0 0,31.677 c 0,4.517 -1.081,7.888 -5.343,7.888 -4.262,0 -5.343,-3.371 -5.343,-7.888 l 0,-31.677 -9.159998,0 z m 30.968998,0 0,45.418 8.396,0 0,-31.806 0.127,0 11.196,31.806 10.432,0 0,-45.418 -8.397,0 0,31.104 -0.127,0 -11.067,-31.104 -10.56,0 z m 41.665,0 -9.159,0 0,45.418 9.159,0 0,-45.418 z m 0.629,0 10.432,45.418 11.767,0 10.434,-45.418 -9.478,0 -6.746,33.586 -0.189,0 -6.423,-33.586 -9.797,0 z m 33.446,0 0,45.418 26.018,0 0,-7.508 -16.859,0 0,-12.212 15.267,0 0,-7.506 -15.267,0 0,-10.687 16.223,0 0,-7.505 -25.382,0 z m 57.822,31.231 0,1.845 c 0,8.398 4.071,13.232 14.438,13.232 9.925,0 15.774,-4.327 15.774,-13.931 0,-5.534 -1.78,-9.031 -8.649,-12.023 l -7.062,-3.051 c -3.881,-1.656 -4.707,-3.372 -4.707,-6.17 0,-2.672 1.083,-5.28 5.217,-5.28 3.498,0 4.96,2.482 4.96,6.743 l 8.778,0 0,-1.273 c 0,-8.715 -5.913,-12.212 -14.059,-12.212 -8.647,0 -14.055,4.517 -14.055,13.358 0,7.569 3.752,10.94 11.893,13.738 6.043,2.099 8.143,3.625 8.143,7.762 0,3.814 -2.672,5.597 -5.47,5.597 -4.834,0 -6.043,-2.735 -6.043,-6.999 l 0,-1.336 -9.158,0 z m 40.57,-31.231 -9.161,0 0,45.418 9.161,0 0,-45.418 z m 47.574,0 -6.359,17.556 -0.127,0 -5.979,-17.556 -33.908,0 0,7.505 9.924,0 0,37.913 9.158,0 0,-37.913 7.727,0 8.562,20.038 0,17.875 9.16,0 0,-17.875 11.767,-27.543 -9.925,0 z" /></g><!-- RGB 142-186-229 --></svg>
\ No newline at end of file
diff --git a/kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.png b/kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.png
deleted file mode 100755
index 86a017314b7ad2e5738b7f5e4c2dc78f21ac6758..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17349
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
N2t_r85;?QL{{z3ePX_=1

diff --git a/kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.svg b/kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.svg
deleted file mode 100755
index cb227d852..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/TUDelft_Logo.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export TUDelft_Logo.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.38876in" height="0.547818in"
-		viewBox="0 0 99.9909 39.4429" xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
-		.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="shape43-1" v:mID="43" v:groupContext="shape" transform="translate(0.375,-0.375)">
-			<title>Tabelle.43</title>
-			<rect v:rectContext="foreign" x="0" y="0.749999" width="99.2409" height="38.6929" class="st1"/>
-			<switch>
-				<foreignObject x="0" y="0.749999" width="99.2409" height="38.6929"
-						requiredExtensions="http://schemas.microsoft.com/visio/2003/SVGExtensions/">
-					<v:foreignData v:orgSize="3996" v:data="data:metafile;base64,eNq9V11MXEUUPufMHfbuX+m261+Fig/8VKEsFRcIRdHgrjV
-								WYukaA6aRIhqQv4LVLcYEX6xp9cGgBLXBqNvYJiq+gG1IKgqJDyaEbFp9aKTGB8CqiWkaCA8Nnouzy+6FzL603uS7934z3z1
-								n5pu5M/ciAFyH9aOFUZDCv/ICRCRA3mP7QwAIp7IBvuByYtQxOpRuwAFQaQCc5oo3ENKOSxEXPD4rYR90wcvQxzmaoQdaIQ8
-								CsBvKoZLPDzLrhTIuCXBJgFkRPAFH+Yk82MPl1jnA13LYxRHbbJFK+K6DS3vgMHRzWS+8wGWtEOWSbmavcIZW6IQX19rjY3g
-								YJsPJ2JrST7fiCR+401DMyGU0tPS2tnbVlFXtCUTLApWBnmhxXrCiIvpAZVlnZ4p2p+VNb/NrbV0v1QSKA9ESPlla6xplWOJ
-								C1twJlqP/HTXn/1675qu2WeXb1b3ldbVq792qfSsCIM5+P8v3RSler6qDq+FpI24MGMOMkBFUzw3wMzEOmODVciOvzxC3Srr
-								l50ZEroiI1Ome4vpz5JbjVJ/MP07p+Y6IjTyUIf8RMWx8KuLGCmOv8uUh5adf+VagkPDT6npRird2/6VArf/563Nm4Bm+1qr
-								ntqv5VKDmUhzC8l20UCgOkYWY6nGhiK8hLBOx+JUZuFnts8+PQS5sQr2PrdSOQTrEuBd1uiBNg0+8CqUiXxsvKHxQwTcl3Fa
-								droDri4UbcsQOre4HOgr3McbxrFbXjj/BCSjHC3AP6XSTHO1HqKcZhk73M9dfgirGTq3uIgziMezAUdyq9W8MJU7iEkzhDW0
-								/phFxCrPwe8zWxvsGG/EwnsQoR9XpPsAsWsQ4Ep3W6pz0IXroPfTRoFbnp/fRT5/hNhrV6gxaxWtYQt9ik9a/GLbRW9hBJzC
-								q1Z3E12kY+znzMa3uYeqmKRrHedqrbd9VKsc/qRgXaJdW9zvl42XajRdZr5+ndXiWDuIgNaF9PTKU/g7Gtpu4Htnf9xwXQKe
-								xvo5a/JEM62iO6zsRd7aI/Qyd7pzZIvrMXxjPGzpdn3nVGDUjMuTU7wvjXG+68uTtrrHkvnCeF8+xDO392rlivOP0c3y/Nv5
-								fpl/OmNPGjNlpBG3+1Nh8m2VSmiHvrDkvbpgxEXLGtD6d4voLziuM0mTeRHz7vKhR1323eJ8KMJ5UmnqVi7d4OO4Ky9/WEKP
-								ja/h/9qVl/sAKy/V5avFRsc5bPBt5r0jX23mB0I/fsvsf8nnmqY6h0x3g+mbPIvV4/qBE/B7O/wnp4z/n+ZhCniEqY+h0v7q
-								HaMQ9ydghEvFHbP15dBOe6sfIJtzup8Xt8+2AWn8ab/J8s4/vkG28hmzjubAJv5zh/Vvw3CUXPRHZ4dWvKwNcP+htkGe89TI
-								R/wx/17ulPv5H3mz5ttcn+xk6XSPX13qRcSX5ftd60/vz5SY81Y/aTfg1Svdji80fu58Wt49vE+O2lP+WWzW+B7P4fzGlvXO
-								K63zrd1ynCUe7mHAsadfPCcebRr9j2ZjLWk76a+VbTtnXEvnt6/iSTH8PrHaFM4z7qiMsc80GI9fUtyvXHBarjhjNZcWS68K
-								S7b8pkd8+LvcrP6szjMsW9e8CKp51/y9hCLH6"/>
-				</foreignObject>
-				<svg viewBox="0 0 99.29 38.693" enable-background="new" color-interpolation-filters="sRGB" height="38.6929"
-						preserveAspectRatio="none" width="99.2409" x="0" y="0.749999">
-					<defs>
-						<clipPath id="mfid4">
-							<rect id="mfid5" x="0" y="0" width="99.29" height="38.693"/>
-						</clipPath>
-					</defs>
-					<g clip-path="url(#mfid4)">
-						<defs>
-							<g id="mfid6">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M1017,1234 C1105,1234 1152,1176 1152,1094 L1152,676 L1339,676 L1339,1103 C1337,1291 1187,1365 1017,1365 C846,1365 696,1291 694,1103 L694,676 L881,676 L881,1094 C881,1176 929,1234 1017,1234"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke="#000000" stroke-miterlimit="10" fill="#3db9ed">
-								<use xlink:href="#mfid6" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-							<g stroke-width="26.536" stroke="none" fill="#050301">
-								<polygon points="210,1351 397,1351 397,807 606,807 606,676 0,676 0,807 210,807 210,1351"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid7">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M659,347 C613,362 566,350 566,289 C566,196 785,118 815,37 C822,17 823,0 813,1 C806,1 812,11 796,26 C706,117 554,117 438,169 C362,203 138,308 190,543 C192,554 199,591 206,591 C214,591 213,569 213,542 C212,403 377,364 431,272 C437,261 448,246 451,253 C452,257 451,262 449,271 C432,346 354,395 376,448 C405,518 488,466 514,421 C521,409 524,401 529,403 C532,404 532,418 530,431 C516,511 498,557 439,603 C420,617 390,620 394,632 C395,635 408,634 418,633 C575,623 707,438 742,316 C746,308 747,300 743,297 C738,293 731,302 724,308 C706,324 681,340 659,347"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid7" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid8">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M2588,1133 L2588,1089 C2588,959 2514,867 2381,867 C2232,867 2163,983 2163,1120 C2163,1258 2223,1365 2374,1365 C2486,1365 2568,1312 2582,1205 L2489,1205 C2478,1273 2444,1300 2374,1300 C2284,1300 2254,1220 2254,1133 L2588,1133 Z M2256,1071 C2256,998 2301,932 2374,932 C2460,932 2494,991 2494,1071 L2256,1071"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid8" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-							<g stroke-width="26.536" stroke="none" fill="#050301">
-								<polygon points="2695,1351 2784,1351 2784,676 2695,676 2695,1351"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid9">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M3063,1351 L3063,943 L3171,943 L3171,882 L3063,882 L3063,806 C3063,752 3089,742 3140,742 C3154,742 3169,744 3184,745 L3184,671 C3164,667 3142,662 3121,662 C3037,662 2974,704 2974,794 L2974,882 L2882,882 L2882,943 L2974,943 L2974,1351 L3063,1351"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid9" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid10">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M3222,882 L3222,943 L3303,943 L3303,1243 C3303,1305 3304,1365 3436,1365 C3456,1365 3475,1363 3496,1359 L3496,1291 C3482,1295 3464,1297 3450,1297 C3418,1297 3392,1281 3392,1247 L3392,943 L3500,943 L3500,882 L3392,882 L3392,754 L3303,782 L3303,882 L3222,882"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid10" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid11">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M1620,756 L1758,756 C1914,756 1979,874 1979,1014 C1979,1153 1914,1271 1758,1271 L1620,1271 L1620,756 Z M1526,1351 L1758,1351 C2047,1351 2077,1107 2077,1014 C2077,920 2047,676 1758,676 L1526,676 L1526,1351"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid11" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-					</g>
-				</svg>
-			</switch>
-			<rect v:rectContext="foreign" x="0" y="0.749999" width="99.2409" height="38.6929" class="st1"/>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_170817/include/Tutorial.png b/kadmos/vispack/VISTOMS_170817/include/Tutorial.png
deleted file mode 100755
index a43705331de02beb625b36f283e8f7aa19ac369d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19351
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

diff --git a/kadmos/vispack/VISTOMS_170817/include/Tutorial.svg b/kadmos/vispack/VISTOMS_170817/include/Tutorial.svg
deleted file mode 100755
index 36799b240..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/Tutorial.svg
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Tutorial.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.7034in" height="1.23568in"
-		viewBox="0 0 122.645 88.9687" xml:space="preserve" color-interpolation-filters="sRGB" class="st4">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:0.75}
-		.st2 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
-		.st3 {fill:#ffffff;font-family:Trebuchet MS;font-size:4.00001em;font-weight:bold}
-		.st4 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="group56-1" transform="translate(0.75,-0.75)" v:mID="56" v:groupContext="group">
-			<title>Tabelle.56</title>
-			<g id="group46-2" v:mID="46" v:groupContext="group">
-				<title>Tabelle.46</title>
-				<g id="group47-3" v:mID="47" v:groupContext="group">
-					<title>Tabelle.47</title>
-					<g id="shape48-4" v:mID="48" v:groupContext="shape">
-						<title>Tabelle.48</title>
-						<path d="M118.27 1.5 L83.73 1.5 C72.28 1.5 64.33 8.92 60.57 13.39 C56.82 8.92 48.87 1.5 37.41 1.5 L2.87 1.5
-									 C1.29 1.5 0 2.79 0 4.37 L0 43.82 C0 45.4 1.29 46.69 2.87 46.69 C4.46 46.69 5.75 45.4 5.75 43.82
-									 L5.75 7.25 L37.41 7.25 C48.52 7.25 55.9 16.54 57.7 19.07 L57.7 77.51 C52.03 72.89 42.66 69.67
-									 29.67 67.9 C19.75 66.56 10.37 66.42 5.75 66.46 L5.75 57.43 C5.75 55.85 4.46 54.56 2.87 54.56
-									 C1.29 54.56 0 55.85 0 57.43 L0 69.39 L0 86.1 C0 87.68 1.29 88.97 2.87 88.97 L60.57 88.97 C60.57
-									 88.97 60.57 88.97 60.57 88.97 C60.57 88.97 60.57 88.97 60.57 88.97 C60.57 88.97 60.57 88.97
-									 60.57 88.97 C60.58 88.97 60.58 88.97 60.58 88.97 L118.27 88.97 C119.86 88.97 121.14 87.68 121.14
-									 86.1 L121.14 69.39 L121.14 4.37 C121.14 2.79 119.86 1.5 118.27 1.5 ZM83.73 7.25 L115.4 7.25
-									 L115.4 66.46 C115.04 66.46 114.65 66.46 114.23 66.46 C107.95 66.46 95.7 66.8 84.27 69.11 C74.97
-									 70.98 68.01 73.8 63.45 77.52 L63.45 19.06 C65.24 16.53 72.56 7.25 83.73 7.25 ZM5.75 72.21 C10.19
-									 72.18 19.38 72.3 28.9 73.6 C41.89 75.36 51.03 78.71 55.4 83.22 L5.75 83.22 L5.75 72.21 ZM65.7
-									 83.22 C73.38 75.18 94.9 72.2 114.23 72.2 C114.65 72.2 115.04 72.2 115.4 72.21 L115.4 83.22 L65.7
-									 83.22 L65.7 83.22 Z" class="st1"/>
-					</g>
-					<g id="shape52-6" v:mID="52" v:groupContext="shape" transform="translate(15.4404,-66.0794)">
-						<title>Tabelle.52</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-					<g id="shape53-8" v:mID="53" v:groupContext="shape" transform="translate(15.4404,-48.8104)">
-						<title>Tabelle.53</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-					<g id="shape54-10" v:mID="54" v:groupContext="shape" transform="translate(15.4404,-31.5409)">
-						<title>Tabelle.54</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-				</g>
-			</g>
-			<g id="shape55-12" v:mID="55" v:groupContext="shape" transform="translate(77.9528,-13.8185)">
-				<title>Tabelle.55</title>
-				<desc>i</desc>
-				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
-				<v:textRect cx="13.8628" cy="54.4255" width="27.73" height="69.0864"/>
-				<rect x="0" y="19.8823" width="27.7257" height="69.0864" class="st2"/>
-				<text x="6.7" y="68.83" class="st3" v:langID="1031"><v:paragraph v:horizAlign="1"/><v:tabList/>i</text>			</g>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.png b/kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.png
deleted file mode 100755
index 037ad7a042a3c9e8f02f531eabfb27085691181c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 99175
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%0ACIt>(3^wr<+Faa1lU-YCOSv;DA)%
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
P{ttYy%O4pF+57(wu$`J?

diff --git a/kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.svg b/kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.svg
deleted file mode 100755
index b189f5bac..000000000
--- a/kadmos/vispack/VISTOMS_170817/include/VISTOMS_Label.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.0"
-   width="142.10001mm"
-   height="54.330002mm"
-   id="svg2"
-   inkscape:version="0.48.5 r10040"
-   sodipodi:docname="VISTOMS_Label.svg">
-  <metadata
-     id="metadata16">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1858"
-     inkscape:window-height="1058"
-     id="namedview14"
-     showgrid="false"
-     inkscape:zoom="1.9380331"
-     inkscape:cx="247.47396"
-     inkscape:cy="85.914946"
-     inkscape:window-x="-8"
-     inkscape:window-y="192"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" />
-  <defs
-     id="defs4" />
-  <g
-     style="font-size:126.75886536px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-     id="text8" />
-  <g
-     id="g3007">
-    <path
-       id="path2989"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 40.417166,119.81629 -6.251292,0 -33.79411112,-91.912559 13.74046312,0 23.334029,66.783601 22.467514,-66.783601 13.307205,0 z" />
-    <path
-       id="path2991"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 85.537875,118.57841 0,-90.674679 12.378795,0 0,90.674679 z" />
-    <path
-       id="path2993"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 114.68994,114.43151 4.51826,-11.38849 c 2.3107,1.69178 5.18877,3.10503 8.63421,4.23974 3.44541,1.13473 6.52979,1.70209 9.25315,1.70208 4.8277,10e-6 8.70638,-1.32039 11.63607,-3.96121 2.9296,-2.6408 4.39443,-6.0037 4.39447,-10.088722 -4e-5,-3.05341 -0.81498,-5.890214 -2.44481,-8.510422 -1.62992,-2.620143 -5.72523,-5.477579 -12.28596,-8.572316 l -7.30348,-3.404168 c -6.18942,-2.888339 -10.51168,-6.313136 -12.96679,-10.274401 -2.45514,-3.961156 -3.6827,-8.726987 -3.68269,-14.297508 -1e-5,-6.767 2.39322,-12.378715 7.1797,-16.835162 4.78645,-4.456277 10.93458,-6.684458 18.4444,-6.68455 10.02679,9.2e-5 17.00017,1.629966 20.92017,4.889624 l -3.65175,10.769552 c -1.65055,-1.196539 -4.16757,-2.351892 -7.55106,-3.466062 -3.38358,-1.114011 -6.51954,-1.671056 -9.40789,-1.671138 -4.20882,8.2e-5 -7.52014,1.196698 -9.93398,3.589851 -2.41389,2.39331 -3.62082,5.467374 -3.6208,9.222203 -2e-5,2.310775 0.43324,4.415168 1.29977,6.313185 0.8665,1.898143 2.07343,3.486753 3.6208,4.765837 1.54733,1.279198 4.71423,3.074122 9.50073,5.384776 l 7.42727,3.527956 c 6.18936,2.929695 10.53225,6.426701 13.02869,10.491029 2.49633,4.064406 3.74453,9.232548 3.74458,15.504442 -5e-5,6.808354 -2.7337,12.585114 -8.20095,17.330314 -5.46734,4.74521 -12.78114,7.11781 -21.94141,7.11781 -8.04624,0 -14.91646,-1.89808 -20.6107,-5.69425 z" />
-    <path
-       id="path2995"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 212.73,39.044647 0,79.533763 -12.3788,0 0,-79.533763 -28.84259,0 0,-11.140916 71.36376,0 0,11.140916 z" />
-    <path
-       id="path2997"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 435.85778,118.57841 -10.76955,-58.242235 -19.80607,59.480115 -3.0947,0 -20.36312,-59.480115 -10.52198,58.242235 -11.75985,0 16.95895,-90.674679 5.63235,0 21.601,66.164661 19.92986,-66.164661 5.57046,0 18.38251,90.674679 z" />
-    <path
-       id="path2999"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 453.37378,114.43151 4.51826,-11.38849 c 2.3107,1.69178 5.18876,3.10503 8.63421,4.23974 3.44541,1.13473 6.52979,1.70209 9.25315,1.70208 4.8277,10e-6 8.70638,-1.32039 11.63607,-3.96121 2.9296,-2.6408 4.39443,-6.0037 4.39447,-10.088722 -4e-5,-3.05341 -0.81498,-5.890214 -2.44481,-8.510422 -1.62992,-2.620143 -5.72523,-5.477579 -12.28596,-8.572316 l -7.30349,-3.404168 c -6.18941,-2.888339 -10.51167,-6.313136 -12.96679,-10.274401 -2.45513,-3.961156 -3.68269,-8.726987 -3.68269,-14.297508 0,-6.767 2.39323,-12.378715 7.1797,-16.835162 4.78646,-4.456277 10.93458,-6.684458 18.44441,-6.68455 10.02678,9.2e-5 17.00016,1.629966 20.92016,4.889624 l -3.65174,10.769552 c -1.65055,-1.196539 -4.16757,-2.351892 -7.55107,-3.466062 -3.38357,-1.114011 -6.51953,-1.671056 -9.40788,-1.671138 -4.20882,8.2e-5 -7.52014,1.196698 -9.93398,3.589851 -2.41389,2.39331 -3.62082,5.467374 -3.6208,9.222203 -2e-5,2.310775 0.43324,4.415168 1.29977,6.313185 0.8665,1.898143 2.07343,3.486753 3.6208,4.765837 1.54733,1.279198 4.71423,3.074122 9.50073,5.384776 l 7.42727,3.527956 c 6.18936,2.929695 10.53224,6.426701 13.02868,10.491029 2.49634,4.064406 3.74453,9.232548 3.74459,15.504442 -6e-5,6.808354 -2.7337,12.585114 -8.20095,17.330314 -5.46735,4.74521 -12.78114,7.11781 -21.94142,7.11781 -8.04623,0 -14.91646,-1.89808 -20.61069,-5.69425 z" />
-    <path
-       style="fill:none;stroke:#595959;stroke-width:9.01176262px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-       d="m 267.14727,53.032923 c 11.19043,-20.301224 36.83929,-27.62947 57.14053,-16.34001 20.30122,11.289461 27.62947,36.839295 16.34,57.140525 C 329.43737,114.13466 303.78851,121.4629 283.48729,110.27247 263.18606,98.983015 255.85782,73.334146 267.14727,53.032923"
-       id="path10"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#595959;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="m 244.56835,165.43238 15.05262,8.31856 24.85661,-52.78319 -8.31854,-4.5554 -31.59069,49.02003 z"
-       id="path12"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Icon.png b/kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Icon.png
deleted file mode 100755
index 774dbf9c876d6d90d13764e55742a64e7839a49e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 24690
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
KTCs|K=>GsL;=2U^

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Logo.png b/kadmos/vispack/VISTOMS_TreeViewer/include/AGILE_Logo.png
deleted file mode 100755
index ccdb4d4b1093ba56c9c7c98a3d0b53c8deb62d2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14199
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

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.png b/kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.png
deleted file mode 100755
index f27c42f33251e38325fdf6d1baa5c0926ef01905..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 192042
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%0DR450>iDDK?Q&7HBEc2Bgo;yHP47s3zex
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

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.svg
deleted file mode 100755
index 4e477d0b2..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/Acknowledgements.svg
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Capa_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 451.486 451.486"
-   style="enable-background:new 0 0 451.486 451.486;"
-   xml:space="preserve"
-   inkscape:version="0.48.5 r10040"
-   width="100%"
-   height="100%"
-   sodipodi:docname="clap.svg"><metadata
-   id="metadata55"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-   id="defs53" /><sodipodi:namedview
-   pagecolor="#ffffff"
-   bordercolor="#666666"
-   borderopacity="1"
-   objecttolerance="10"
-   gridtolerance="10"
-   guidetolerance="10"
-   inkscape:pageopacity="0"
-   inkscape:pageshadow="2"
-   inkscape:window-width="640"
-   inkscape:window-height="787"
-   id="namedview51"
-   showgrid="false"
-   inkscape:zoom="0.36961766"
-   inkscape:cx="185.26515"
-   inkscape:cy="225.57005"
-   inkscape:window-x="0"
-   inkscape:window-y="200"
-   inkscape:window-maximized="0"
-   inkscape:current-layer="Capa_1" />
-<g
-   id="g3"
-   style="fill:#ffffff">
-	<path
-   d="M152.841,149.025c2.242,0,4.437,0.23,6.563,0.678c-0.532-12.992,7.069-25.523,19.824-30.623   c3.743-1.492,7.678-2.248,11.691-2.248c9.011,0,17.259,3.813,23.104,10.135l23.252-24.15c6.808-7.064,6.616-18.309-0.478-25.117   c-3.443-3.32-7.886-4.967-12.323-4.967c-4.659,0-9.311,1.818-12.792,5.451l-70.316,73.037   C145.056,149.779,148.906,149.025,152.841,149.025z"
-   id="path5"
-   style="fill:#ffffff" />
-	<path
-   d="M112.855,313.141c4.028-6.592,9.943-11.582,17.059-14.408c4.229-1.695,8.68-2.557,13.225-2.557   c6.531,0,12.931,1.809,18.53,5.244l7.216,4.42l-0.5-1.248l-5.368-13.477h0.006l-39.471-98.822   c-2.88-7.199-2.896-15.004-0.315-22.242l-6.022,6.254l-0.024-0.023l-38.217,39.703l7.942-62.623   c0.909-7.225-1.749-14.086-6.663-18.793c-3.304-3.203-7.648-5.383-12.593-5.998c-0.955-0.123-1.909-0.186-2.849-0.186   c-10.999,0-20.555,8.203-21.973,19.408L4.445,333.875c-1.756,8.533,0.978,17.375,7.256,23.412l65.48,63.055   c4.859,4.674,11.205,7.092,17.606,7.092c4.504,0,9.033-1.193,13.093-3.641l55.636-33.52l-39.571-28.719   C107.742,351.156,102.75,329.576,112.855,313.141z"
-   id="path7"
-   style="fill:#ffffff" />
-	<path
-   d="M270.023,133.77l3.358,8.41L288,126.99c6.8-7.063,6.57-18.33-0.494-25.131c-3.441-3.311-7.886-4.967-12.322-4.967   c-4.651,0-9.305,1.824-12.792,5.453l-12.47,12.955C258.933,118.018,266.381,124.664,270.023,133.77z"
-   id="path9"
-   style="fill:#ffffff" />
-	<path
-   d="M367.574,292.963l-50.707-126.955c-2.465-6.17-8.396-9.928-14.648-9.928c-1.95,0-3.937,0.363-5.854,1.133   c-8.079,3.234-12.03,12.414-8.781,20.494l24.376,61.029c0.778,1.947,0.748,4.119-0.077,6.045c-0.823,1.916-2.378,3.434-4.328,4.211   c-0.962,0.387-1.948,0.564-2.926,0.564c-3.128,0-6.091-1.881-7.325-4.961l-41.928-104.973c-2.464-6.172-8.387-9.928-14.648-9.928   c-1.956,0-3.936,0.361-5.861,1.131c-8.079,3.227-12.023,12.408-8.779,20.494l41.92,104.982c0.777,1.941,0.748,4.113-0.078,6.037   c-0.823,1.918-2.38,3.436-4.32,4.213c-0.954,0.377-1.94,0.564-2.912,0.564c-3.134,0-6.107-1.881-7.339-4.969l-47.781-119.631   c-2.464-6.162-8.395-9.912-14.656-9.912c-1.948,0-3.928,0.361-5.846,1.123c-8.087,3.236-12.03,12.408-8.795,20.502l47.789,119.615   c0.778,1.951,0.746,4.123-0.077,6.039c-0.825,1.926-2.388,3.443-4.328,4.221c-0.955,0.377-1.941,0.563-2.912,0.563   c-3.134,0-6.107-1.879-7.339-4.969l-41.928-104.975c-2.458-6.168-8.38-9.926-14.643-9.926c-1.948,0-3.936,0.361-5.859,1.131   c-8.087,3.229-12.03,12.408-8.789,20.494l44.855,112.309l-0.016,0.008l14.988,37.521c0.446,1.131,0.123,2.418-0.809,3.205   c-0.516,0.438-1.163,0.662-1.817,0.662c-0.508,0-1.023-0.139-1.48-0.416l-40.494-24.855c-3.213-1.963-6.77-2.91-10.282-2.91   c-2.52,0-5.022,0.484-7.363,1.426c-3.796,1.51-7.163,4.229-9.465,7.994c-5.699,9.271-2.795,21.41,6.484,27.117l135.243,98.166   c4.406,3.188,9.634,4.836,14.918,4.836c3.172,0,6.369-0.592,9.41-1.809l71.457-28.543c10.659-4.26,17.136-15.148,15.789-26.557   l-12.022-101.539C367.574,293.018,367.582,292.986,367.574,292.963z"
-   id="path11"
-   style="fill:#ffffff" />
-	<path
-   d="M364.771,94.436c-5.838-2.881-12.947-0.523-15.866,5.314c-2.912,5.854-0.532,12.953,5.313,15.865   c13.04,6.492,22.767,17.66,27.389,31.461c4.628,13.803,3.604,28.574-2.882,41.605c-2.91,5.854-0.531,12.953,5.315,15.865   c1.694,0.84,3.496,1.24,5.267,1.24c4.344,0,8.527-2.404,10.598-6.553c9.305-18.693,10.775-39.889,4.136-59.682   C397.402,119.768,383.454,103.74,364.771,94.436z"
-   id="path13"
-   style="fill:#ffffff" />
-	<path
-   d="M382.361,59.092c-5.8-2.928-12.931-0.523-15.858,5.322c-2.91,5.846-0.531,12.947,5.322,15.859   c46.381,23.088,65.333,79.611,42.245,126.006c-2.912,5.846-0.532,12.947,5.322,15.857c1.686,0.848,3.489,1.24,5.26,1.24   c4.344,0,8.525-2.402,10.596-6.561C464.154,158.754,440.431,87.996,382.361,59.092z"
-   id="path15"
-   style="fill:#ffffff" />
-	<path
-   d="M194.347,54.24c1.093-6.438-3.243-12.545-9.689-13.641c-20.609-3.465-41.288,1.271-58.303,13.371   c-17.013,12.092-28.303,30.09-31.776,50.678c-1.093,6.439,3.243,12.545,9.688,13.639c0.671,0.109,1.333,0.162,1.987,0.162   c5.669,0,10.675-4.082,11.646-9.857c2.434-14.357,10.296-26.91,22.165-35.344c11.852-8.441,26.278-11.768,40.649-9.313   C187.184,64.922,193.26,60.688,194.347,54.24z"
-   id="path17"
-   style="fill:#ffffff" />
-	<path
-   d="M65.343,111.701c0.67,0.109,1.331,0.164,1.987,0.164c5.667,0,10.674-4.082,11.652-9.859   c8.634-51.078,57.162-85.666,108.309-77c6.438,1.008,12.546-3.26,13.641-9.697c1.085-6.447-3.259-12.547-9.697-13.641   c-30.991-5.223-62.152,1.91-87.754,20.117C77.874,39.992,60.884,67.078,55.646,98.063C54.561,104.51,58.905,110.609,65.343,111.701   z"
-   id="path19"
-   style="fill:#ffffff" />
-</g>
-<g
-   id="g21">
-</g>
-<g
-   id="g23">
-</g>
-<g
-   id="g25">
-</g>
-<g
-   id="g27">
-</g>
-<g
-   id="g29">
-</g>
-<g
-   id="g31">
-</g>
-<g
-   id="g33">
-</g>
-<g
-   id="g35">
-</g>
-<g
-   id="g37">
-</g>
-<g
-   id="g39">
-</g>
-<g
-   id="g41">
-</g>
-<g
-   id="g43">
-</g>
-<g
-   id="g45">
-</g>
-<g
-   id="g47">
-</g>
-<g
-   id="g49">
-</g>
-</svg>
\ No newline at end of file
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Contact.png b/kadmos/vispack/VISTOMS_TreeViewer/include/Contact.png
deleted file mode 100755
index 0a5caa34fb1d6124e3d2c25fc2ac1dc3f19e2746..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16269
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

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Contact.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/Contact.svg
deleted file mode 100755
index daa5d3167..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/Contact.svg
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Contact.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.41849in" height="0.870735in"
-		viewBox="0 0 102.131 62.6929" xml:space="preserve" color-interpolation-filters="sRGB" class="st3">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:none;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:6}
-		.st2 {stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:6}
-		.st3 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="group69-1" transform="translate(3,-3)" v:mID="69" v:groupContext="group">
-			<title>Tabelle.69</title>
-			<g id="shape65-2" v:mID="65" v:groupContext="shape" transform="translate(96.1311,68.6929) rotate(180)">
-				<title>Rechteck.65</title>
-				<v:userDefs>
-					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
-				</v:userDefs>
-				<rect x="0" y="6" width="96.1311" height="56.6929" class="st1"/>
-			</g>
-			<g id="shape63-4" v:mID="63" v:groupContext="shape" transform="translate(74.8163,76.5377) rotate(135)">
-				<title>Tabelle.63</title>
-				<path d="M0 62.69 L43.11 62.69" class="st2"/>
-			</g>
-			<g id="shape66-7" v:mID="66" v:groupContext="shape" transform="translate(96.1311,68.6929) rotate(180)">
-				<title>Dreieck</title>
-				<v:userDefs>
-					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
-				</v:userDefs>
-				<path d="M96.13 62.69 L48.07 25.84 L0 62.69 L96.13 62.69 Z" class="st1"/>
-			</g>
-			<g id="shape68-9" v:mID="68" v:groupContext="shape" transform="translate(21.3147,76.5377) rotate(45) scale(1,-1)">
-				<title>Tabelle.68</title>
-				<path d="M0 62.69 L43.11 62.69" class="st2"/>
-			</g>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Home.png b/kadmos/vispack/VISTOMS_TreeViewer/include/Home.png
deleted file mode 100755
index b0d424aa251c297c0ea7869d68d22c438114af53..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8000
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
R@ZWA^&)2TIOTME2^gmeNDQf@#

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Home.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/Home.svg
deleted file mode 100755
index ecdeccc4b..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/Home.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Home.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.02696in" height="0.962866in"
-		viewBox="0 0 73.9408 69.3264" xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:#ffffff;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
-		.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="shape18-1" v:mID="18" v:groupContext="shape" transform="translate(0.12,-0.12)">
-			<title>Tabelle.18</title>
-			<path d="M73.7 31.01 L36.85 0.24 L0 31.01 L73.7 31.01 ZM46.47 69.33 L63.17 69.33 L63.17 31.01 L10.53 31.01 L10.53 69.33
-						 L28.04 69.33 L28.04 54.96 L46.47 54.96 L46.47 69.33 Z" class="st1"/>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.png b/kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.png
deleted file mode 100755
index 4b083542091aa46b4e9ec0e910c0a149343b2eb6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 126111
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%0A~ny`48y(jO&iJn!SsVU7R_XtSCfnmWF1IX
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
T)E`?~f{gKW^>bP0l+XkKukZ7-

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.svg
deleted file mode 100755
index 8f371bc26..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/RWTH_Logo.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   width="650"
-   height="333"
-   viewBox="0 0 650 333.00002"
-   id="svg2"
-   xml:space="preserve"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="RWTH_Logo.svg"><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1536"
-     inkscape:window-height="801"
-     id="namedview9"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:zoom="0.82544099"
-     inkscape:cx="29.266996"
-     inkscape:cy="55.019277"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" /><metadata
-     id="metadata15"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs13" /><!-- RGB 0-84-159 --><!-- RGB 142-186-229 --><g
-     id="g3336"
-     transform="matrix(1.813009,0,0,1.813009,0,78.826532)"><path
-       inkscape:connector-curvature="0"
-       style="fill:#00549f;fill-rule:evenodd"
-       id="rwth"
-       d="m 15.178,46.276998 -0.582,0 -14.596,0 L 0,41.137 0,0.994 0,0.657 l 14.565,0 0.03,0 10.293,0 c 6.75,-0.001 12.57,4.368 14.469,10.161 1.76,5.366 0.256,11.199 -3.713,15.348 0.528,1.431 1.042,2.548 1.532,3.833 1.101,2.54 2.111,5.08 3.212,7.589 l 3.611,8.688998 -0.092,0 -15.299,0 c 0,0.007 -0.123,-0.368 -0.245,-0.52 -0.611,-1.346 -1.162,-2.785 -1.774,-4.131 L 22.887,32.845 c -1.468,-3.55 -2.937,-6.903 -4.406,-10.453 1.834,-0.049 3.204,0.294 4.974,-0.518 1.242,-0.613 3.127,-2.133 3.175,-5.047 -0.048,-1.446 -0.448,-2.54 -1.403,-3.677 -0.959,-1.058 -2.346,-1.842 -4.152,-1.868 0,0 -5.9,-0.003 -5.896,0 l 0,34.994998 z M 166.448,0.665 l -7.917,0 0,16.46 -9.891,0 -0.734,0 0,-13.614 0,-2.846 -10.953,0 -38.551998,0 -10.648,0 -1.254,0 0,20.5 c 0.122,0.948 0.336,1.896 0.428,2.876 l -4.1,-9.332 c -1.836,-4.284 -3.58,-8.568 -5.416,-12.882 -0.153,-0.398 -0.262,-0.665 -0.46,-1.162 l -15.665,0 c 0,2.233 0.031,4.711 0,6.884 l 0,13.616 c 0.153,0.856 0.429,1.988 0.552,2.876 l -0.092,-0.184 c -3.366,-7.68 -6.609,-15.39 -9.821,-23.192 l -15.630002,0 c 0.306,0.918 0.795,1.744 1.102,2.662 l 3.452,8.085 2.409,5.66 0.153,0.344 c 1.108,2.639 1.985,4.706 3.06,7.244 3.099002,7.328 6.081002,14.403 9.187002,21.623998 l 15.665,0 0,-23.864998 c 0.397,1.346 0.704,2.723 1.01,4.1 2.662,6.547 5.539,13.187 8.261,19.764998 l 15.635,0 0,-18.510998 0,-16.552 10.706998,0 0,15.42 0,0.734 0,18.908998 15.056,0 0.123,0 0,-15.634998 0,-15.023 0,-3.304 0,-1.101 10.614,0 0,35.062998 6.702,0 c 2.754,-0.03 5.723,0 8.476,0 l 0,-18.601998 0.123,0 9.087,0 1.415,0 0,18.601998 3.327,0 11.851,0 0,-45.618998 -7.262,0 z" /><path
-       inkscape:connector-curvature="0"
-       style="fill:#8ebae5;fill-rule:evenodd"
-       id="aachen"
-       d="m 227.647,0.891 -11.321,0 -9.476,35.802 -9.478,-35.802 -11.323,0 -12.02,45.416998 9.542,0 2.098,-9.604998 12.086,0 2.099,9.604998 13.992,0 2.098,-9.604998 12.087,0 2.099,9.604998 9.541,0 L 227.647,0.891 Z m -40.388,28.306 4.39,-20.418 0.127,0 4.388,20.418 -8.905,0 z m 30.276,0 4.39,-20.418 0.127,0 4.387,20.418 -8.904,0 z m 40.261,-12.976 c 0,-6.616 -1.336,-9.478 -5.471,-9.478 -4.644,0 -5.726,4.644 -5.726,17.492 0,13.74 1.909,16.22 5.853,16.22 3.309,0 5.724,-1.717 5.724,-11.513 l 9.161,0 c 0,9.796 -2.418,18.255998 -14.438,18.255998 -13.741,0 -15.457,-9.795998 -15.457,-23.597998 0,-13.804 1.716,-23.6 15.457,-23.6 13.103,0 14.055,9.605 14.055,16.221 l -9.158,0 z m 10.935,-15.329 9.157,0 0,17.364 10.688,0 0,-17.364 9.159,0 0,45.415998 -9.159,0 0,-20.163998 -10.688,0 0,20.163998 -9.157,0 0,-45.415998 z m 56.925,-0.001 0,7.505 -16.22,0 0,10.686 15.264,0 0,7.507 -15.264,0 0,12.212 16.856,0 0,7.505998 -26.018,0 0,-45.415998 25.382,0 z m 13.234,0 11.067,31.104 0.126,0 0,-31.104 8.397,0 0,45.415998 -10.433,0 -11.192,-31.803998 -0.131,0 0,31.803998 -8.395,0 0,-45.415998 10.561,0 z" /><path
-       inkscape:connector-curvature="0"
-       style="fill:#8ebae5;fill-rule:evenodd"
-       id="university"
-       d="m 239.843,57.150998 4.327,0 c 4.134,0 6.359,2.099 6.359,6.296 0,4.9 -2.479,6.809 -6.87,6.809 l -3.816,0 0,-13.105 z m -9.158,38.675 9.158,0 0,-19.211 4.899,0 c 3.688,0 5.277,2.162 5.407,5.723 l 0.253,8.715 c 0.063,1.782 0.253,3.5 1.146,4.773 l 9.921,0 0,-0.383 c -1.716,-0.89 -1.972,-3.371 -2.036,-8.142 -0.126,-9.604 -1.079,-13.038 -7.312,-13.868 l 0,-0.126 c 5.15,-1.083 7.568,-5.153 7.568,-11.196 0,-7.759 -4.58,-11.703 -12.085,-11.703 l -16.92,0 0,45.418 z m -134.764998,-45.418 0,31.677 c 0,12.149 7.061998,14.631 14.502998,14.631 7.443,0 14.503,-3.055 14.503,-14.631 l 0,-31.677 -9.16,0 0,31.677 c 0,4.517 -1.081,7.888 -5.343,7.888 -4.262,0 -5.343,-3.371 -5.343,-7.888 l 0,-31.677 -9.159998,0 z m 30.968998,0 0,45.418 8.396,0 0,-31.806 0.127,0 11.196,31.806 10.432,0 0,-45.418 -8.397,0 0,31.104 -0.127,0 -11.067,-31.104 -10.56,0 z m 41.665,0 -9.159,0 0,45.418 9.159,0 0,-45.418 z m 0.629,0 10.432,45.418 11.767,0 10.434,-45.418 -9.478,0 -6.746,33.586 -0.189,0 -6.423,-33.586 -9.797,0 z m 33.446,0 0,45.418 26.018,0 0,-7.508 -16.859,0 0,-12.212 15.267,0 0,-7.506 -15.267,0 0,-10.687 16.223,0 0,-7.505 -25.382,0 z m 57.822,31.231 0,1.845 c 0,8.398 4.071,13.232 14.438,13.232 9.925,0 15.774,-4.327 15.774,-13.931 0,-5.534 -1.78,-9.031 -8.649,-12.023 l -7.062,-3.051 c -3.881,-1.656 -4.707,-3.372 -4.707,-6.17 0,-2.672 1.083,-5.28 5.217,-5.28 3.498,0 4.96,2.482 4.96,6.743 l 8.778,0 0,-1.273 c 0,-8.715 -5.913,-12.212 -14.059,-12.212 -8.647,0 -14.055,4.517 -14.055,13.358 0,7.569 3.752,10.94 11.893,13.738 6.043,2.099 8.143,3.625 8.143,7.762 0,3.814 -2.672,5.597 -5.47,5.597 -4.834,0 -6.043,-2.735 -6.043,-6.999 l 0,-1.336 -9.158,0 z m 40.57,-31.231 -9.161,0 0,45.418 9.161,0 0,-45.418 z m 47.574,0 -6.359,17.556 -0.127,0 -5.979,-17.556 -33.908,0 0,7.505 9.924,0 0,37.913 9.158,0 0,-37.913 7.727,0 8.562,20.038 0,17.875 9.16,0 0,-17.875 11.767,-27.543 -9.925,0 z" /></g><!-- RGB 142-186-229 --></svg>
\ No newline at end of file
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.png b/kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.png
deleted file mode 100755
index 86a017314b7ad2e5738b7f5e4c2dc78f21ac6758..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17349
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
N2t_r85;?QL{{z3ePX_=1

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.svg
deleted file mode 100755
index cb227d852..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/TUDelft_Logo.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export TUDelft_Logo.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.38876in" height="0.547818in"
-		viewBox="0 0 99.9909 39.4429" xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
-		.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="shape43-1" v:mID="43" v:groupContext="shape" transform="translate(0.375,-0.375)">
-			<title>Tabelle.43</title>
-			<rect v:rectContext="foreign" x="0" y="0.749999" width="99.2409" height="38.6929" class="st1"/>
-			<switch>
-				<foreignObject x="0" y="0.749999" width="99.2409" height="38.6929"
-						requiredExtensions="http://schemas.microsoft.com/visio/2003/SVGExtensions/">
-					<v:foreignData v:orgSize="3996" v:data="data:metafile;base64,eNq9V11MXEUUPufMHfbuX+m261+Fig/8VKEsFRcIRdHgrjV
-								WYukaA6aRIhqQv4LVLcYEX6xp9cGgBLXBqNvYJiq+gG1IKgqJDyaEbFp9aKTGB8CqiWkaCA8Nnouzy+6FzL603uS7934z3z1
-								n5pu5M/ciAFyH9aOFUZDCv/ICRCRA3mP7QwAIp7IBvuByYtQxOpRuwAFQaQCc5oo3ENKOSxEXPD4rYR90wcvQxzmaoQdaIQ8
-								CsBvKoZLPDzLrhTIuCXBJgFkRPAFH+Yk82MPl1jnA13LYxRHbbJFK+K6DS3vgMHRzWS+8wGWtEOWSbmavcIZW6IQX19rjY3g
-								YJsPJ2JrST7fiCR+401DMyGU0tPS2tnbVlFXtCUTLApWBnmhxXrCiIvpAZVlnZ4p2p+VNb/NrbV0v1QSKA9ESPlla6xplWOJ
-								C1twJlqP/HTXn/1675qu2WeXb1b3ldbVq792qfSsCIM5+P8v3RSler6qDq+FpI24MGMOMkBFUzw3wMzEOmODVciOvzxC3Srr
-								l50ZEroiI1Ome4vpz5JbjVJ/MP07p+Y6IjTyUIf8RMWx8KuLGCmOv8uUh5adf+VagkPDT6npRird2/6VArf/563Nm4Bm+1qr
-								ntqv5VKDmUhzC8l20UCgOkYWY6nGhiK8hLBOx+JUZuFnts8+PQS5sQr2PrdSOQTrEuBd1uiBNg0+8CqUiXxsvKHxQwTcl3Fa
-								droDri4UbcsQOre4HOgr3McbxrFbXjj/BCSjHC3AP6XSTHO1HqKcZhk73M9dfgirGTq3uIgziMezAUdyq9W8MJU7iEkzhDW0
-								/phFxCrPwe8zWxvsGG/EwnsQoR9XpPsAsWsQ4Ep3W6pz0IXroPfTRoFbnp/fRT5/hNhrV6gxaxWtYQt9ik9a/GLbRW9hBJzC
-								q1Z3E12kY+znzMa3uYeqmKRrHedqrbd9VKsc/qRgXaJdW9zvl42XajRdZr5+ndXiWDuIgNaF9PTKU/g7Gtpu4Htnf9xwXQKe
-								xvo5a/JEM62iO6zsRd7aI/Qyd7pzZIvrMXxjPGzpdn3nVGDUjMuTU7wvjXG+68uTtrrHkvnCeF8+xDO392rlivOP0c3y/Nv5
-								fpl/OmNPGjNlpBG3+1Nh8m2VSmiHvrDkvbpgxEXLGtD6d4voLziuM0mTeRHz7vKhR1323eJ8KMJ5UmnqVi7d4OO4Ky9/WEKP
-								ja/h/9qVl/sAKy/V5avFRsc5bPBt5r0jX23mB0I/fsvsf8nnmqY6h0x3g+mbPIvV4/qBE/B7O/wnp4z/n+ZhCniEqY+h0v7q
-								HaMQ9ydghEvFHbP15dBOe6sfIJtzup8Xt8+2AWn8ab/J8s4/vkG28hmzjubAJv5zh/Vvw3CUXPRHZ4dWvKwNcP+htkGe89TI
-								R/wx/17ulPv5H3mz5ttcn+xk6XSPX13qRcSX5ftd60/vz5SY81Y/aTfg1Svdji80fu58Wt49vE+O2lP+WWzW+B7P4fzGlvXO
-								K63zrd1ynCUe7mHAsadfPCcebRr9j2ZjLWk76a+VbTtnXEvnt6/iSTH8PrHaFM4z7qiMsc80GI9fUtyvXHBarjhjNZcWS68K
-								S7b8pkd8+LvcrP6szjMsW9e8CKp51/y9hCLH6"/>
-				</foreignObject>
-				<svg viewBox="0 0 99.29 38.693" enable-background="new" color-interpolation-filters="sRGB" height="38.6929"
-						preserveAspectRatio="none" width="99.2409" x="0" y="0.749999">
-					<defs>
-						<clipPath id="mfid4">
-							<rect id="mfid5" x="0" y="0" width="99.29" height="38.693"/>
-						</clipPath>
-					</defs>
-					<g clip-path="url(#mfid4)">
-						<defs>
-							<g id="mfid6">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M1017,1234 C1105,1234 1152,1176 1152,1094 L1152,676 L1339,676 L1339,1103 C1337,1291 1187,1365 1017,1365 C846,1365 696,1291 694,1103 L694,676 L881,676 L881,1094 C881,1176 929,1234 1017,1234"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke="#000000" stroke-miterlimit="10" fill="#3db9ed">
-								<use xlink:href="#mfid6" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-							<g stroke-width="26.536" stroke="none" fill="#050301">
-								<polygon points="210,1351 397,1351 397,807 606,807 606,676 0,676 0,807 210,807 210,1351"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid7">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M659,347 C613,362 566,350 566,289 C566,196 785,118 815,37 C822,17 823,0 813,1 C806,1 812,11 796,26 C706,117 554,117 438,169 C362,203 138,308 190,543 C192,554 199,591 206,591 C214,591 213,569 213,542 C212,403 377,364 431,272 C437,261 448,246 451,253 C452,257 451,262 449,271 C432,346 354,395 376,448 C405,518 488,466 514,421 C521,409 524,401 529,403 C532,404 532,418 530,431 C516,511 498,557 439,603 C420,617 390,620 394,632 C395,635 408,634 418,633 C575,623 707,438 742,316 C746,308 747,300 743,297 C738,293 731,302 724,308 C706,324 681,340 659,347"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid7" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid8">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M2588,1133 L2588,1089 C2588,959 2514,867 2381,867 C2232,867 2163,983 2163,1120 C2163,1258 2223,1365 2374,1365 C2486,1365 2568,1312 2582,1205 L2489,1205 C2478,1273 2444,1300 2374,1300 C2284,1300 2254,1220 2254,1133 L2588,1133 Z M2256,1071 C2256,998 2301,932 2374,932 C2460,932 2494,991 2494,1071 L2256,1071"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid8" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-							<g stroke-width="26.536" stroke="none" fill="#050301">
-								<polygon points="2695,1351 2784,1351 2784,676 2695,676 2695,1351"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid9">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M3063,1351 L3063,943 L3171,943 L3171,882 L3063,882 L3063,806 C3063,752 3089,742 3140,742 C3154,742 3169,744 3184,745 L3184,671 C3164,667 3142,662 3121,662 C3037,662 2974,704 2974,794 L2974,882 L2882,882 L2882,943 L2974,943 L2974,1351 L3063,1351"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid9" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid10">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M3222,882 L3222,943 L3303,943 L3303,1243 C3303,1305 3304,1365 3436,1365 C3456,1365 3475,1363 3496,1359 L3496,1291 C3482,1295 3464,1297 3450,1297 C3418,1297 3392,1281 3392,1247 L3392,943 L3500,943 L3500,882 L3392,882 L3392,754 L3303,782 L3303,882 L3222,882"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid10" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-						<defs>
-							<g id="mfid11">
-								<path transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)"
-										d="M1620,756 L1758,756 C1914,756 1979,874 1979,1014 C1979,1153 1914,1271 1758,1271 L1620,1271 L1620,756 Z M1526,1351 L1758,1351 C2047,1351 2077,1107 2077,1014 C2077,920 2047,676 1758,676 L1526,676 L1526,1351"/>
-							</g>
-						</defs>
-						<g transform="matrix(0.028278, 0, 0, 0.027839, 0, 0)">
-							<g stroke-width="26.536" stroke="#000000" stroke-miterlimit="10" fill="#050301">
-								<use xlink:href="#mfid11" transform="matrix(35.364, -0, -0, 35.921, -0, 0)" stroke="none"/>
-							</g>
-						</g>
-					</g>
-				</svg>
-			</switch>
-			<rect v:rectContext="foreign" x="0" y="0.749999" width="99.2409" height="38.6929" class="st1"/>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.png b/kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.png
deleted file mode 100755
index a43705331de02beb625b36f283e8f7aa19ac369d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19351
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

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.svg
deleted file mode 100755
index 36799b240..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/Tutorial.svg
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generiert durch Microsoft Visio, SVG Export Tutorial.svg Zeichenblatt-1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
-		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="1.7034in" height="1.23568in"
-		viewBox="0 0 122.645 88.9687" xml:space="preserve" color-interpolation-filters="sRGB" class="st4">
-	<v:documentProperties v:langID="1031" v:metric="true" v:viewMarkup="false"/>
-
-	<style type="text/css">
-	<![CDATA[
-		.st1 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:0.75}
-		.st2 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
-		.st3 {fill:#ffffff;font-family:Trebuchet MS;font-size:4.00001em;font-weight:bold}
-		.st4 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-	]]>
-	</style>
-
-	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
-		<title>Zeichenblatt-1</title>
-		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
-				v:shadowOffsetY="-8.50394"/>
-		<g id="group56-1" transform="translate(0.75,-0.75)" v:mID="56" v:groupContext="group">
-			<title>Tabelle.56</title>
-			<g id="group46-2" v:mID="46" v:groupContext="group">
-				<title>Tabelle.46</title>
-				<g id="group47-3" v:mID="47" v:groupContext="group">
-					<title>Tabelle.47</title>
-					<g id="shape48-4" v:mID="48" v:groupContext="shape">
-						<title>Tabelle.48</title>
-						<path d="M118.27 1.5 L83.73 1.5 C72.28 1.5 64.33 8.92 60.57 13.39 C56.82 8.92 48.87 1.5 37.41 1.5 L2.87 1.5
-									 C1.29 1.5 0 2.79 0 4.37 L0 43.82 C0 45.4 1.29 46.69 2.87 46.69 C4.46 46.69 5.75 45.4 5.75 43.82
-									 L5.75 7.25 L37.41 7.25 C48.52 7.25 55.9 16.54 57.7 19.07 L57.7 77.51 C52.03 72.89 42.66 69.67
-									 29.67 67.9 C19.75 66.56 10.37 66.42 5.75 66.46 L5.75 57.43 C5.75 55.85 4.46 54.56 2.87 54.56
-									 C1.29 54.56 0 55.85 0 57.43 L0 69.39 L0 86.1 C0 87.68 1.29 88.97 2.87 88.97 L60.57 88.97 C60.57
-									 88.97 60.57 88.97 60.57 88.97 C60.57 88.97 60.57 88.97 60.57 88.97 C60.57 88.97 60.57 88.97
-									 60.57 88.97 C60.58 88.97 60.58 88.97 60.58 88.97 L118.27 88.97 C119.86 88.97 121.14 87.68 121.14
-									 86.1 L121.14 69.39 L121.14 4.37 C121.14 2.79 119.86 1.5 118.27 1.5 ZM83.73 7.25 L115.4 7.25
-									 L115.4 66.46 C115.04 66.46 114.65 66.46 114.23 66.46 C107.95 66.46 95.7 66.8 84.27 69.11 C74.97
-									 70.98 68.01 73.8 63.45 77.52 L63.45 19.06 C65.24 16.53 72.56 7.25 83.73 7.25 ZM5.75 72.21 C10.19
-									 72.18 19.38 72.3 28.9 73.6 C41.89 75.36 51.03 78.71 55.4 83.22 L5.75 83.22 L5.75 72.21 ZM65.7
-									 83.22 C73.38 75.18 94.9 72.2 114.23 72.2 C114.65 72.2 115.04 72.2 115.4 72.21 L115.4 83.22 L65.7
-									 83.22 L65.7 83.22 Z" class="st1"/>
-					</g>
-					<g id="shape52-6" v:mID="52" v:groupContext="shape" transform="translate(15.4404,-66.0794)">
-						<title>Tabelle.52</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-					<g id="shape53-8" v:mID="53" v:groupContext="shape" transform="translate(15.4404,-48.8104)">
-						<title>Tabelle.53</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-					<g id="shape54-10" v:mID="54" v:groupContext="shape" transform="translate(15.4404,-31.5409)">
-						<title>Tabelle.54</title>
-						<path d="M2.87 88.97 L23.19 88.97 C24.78 88.97 26.06 87.68 26.06 86.1 C26.06 84.51 24.78 83.22 23.19 83.22
-									 L2.87 83.22 C1.29 83.22 0 84.51 0 86.1 C0 87.68 1.29 88.97 2.87 88.97 Z" class="st1"/>
-					</g>
-				</g>
-			</g>
-			<g id="shape55-12" v:mID="55" v:groupContext="shape" transform="translate(77.9528,-13.8185)">
-				<title>Tabelle.55</title>
-				<desc>i</desc>
-				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
-				<v:textRect cx="13.8628" cy="54.4255" width="27.73" height="69.0864"/>
-				<rect x="0" y="19.8823" width="27.7257" height="69.0864" class="st2"/>
-				<text x="6.7" y="68.83" class="st3" v:langID="1031"><v:paragraph v:horizAlign="1"/><v:tabList/>i</text>			</g>
-		</g>
-	</g>
-</svg>
diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.png b/kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.png
deleted file mode 100755
index 037ad7a042a3c9e8f02f531eabfb27085691181c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 99175
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%0ACIt>(3^wr<+Faa1lU-YCOSv;DA)%
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
P{ttYy%O4pF+57(wu$`J?

diff --git a/kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.svg b/kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.svg
deleted file mode 100755
index b189f5bac..000000000
--- a/kadmos/vispack/VISTOMS_TreeViewer/include/VISTOMS_Label.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.0"
-   width="142.10001mm"
-   height="54.330002mm"
-   id="svg2"
-   inkscape:version="0.48.5 r10040"
-   sodipodi:docname="VISTOMS_Label.svg">
-  <metadata
-     id="metadata16">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1858"
-     inkscape:window-height="1058"
-     id="namedview14"
-     showgrid="false"
-     inkscape:zoom="1.9380331"
-     inkscape:cx="247.47396"
-     inkscape:cy="85.914946"
-     inkscape:window-x="-8"
-     inkscape:window-y="192"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" />
-  <defs
-     id="defs4" />
-  <g
-     style="font-size:126.75886536px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-     id="text8" />
-  <g
-     id="g3007">
-    <path
-       id="path2989"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 40.417166,119.81629 -6.251292,0 -33.79411112,-91.912559 13.74046312,0 23.334029,66.783601 22.467514,-66.783601 13.307205,0 z" />
-    <path
-       id="path2991"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 85.537875,118.57841 0,-90.674679 12.378795,0 0,90.674679 z" />
-    <path
-       id="path2993"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 114.68994,114.43151 4.51826,-11.38849 c 2.3107,1.69178 5.18877,3.10503 8.63421,4.23974 3.44541,1.13473 6.52979,1.70209 9.25315,1.70208 4.8277,10e-6 8.70638,-1.32039 11.63607,-3.96121 2.9296,-2.6408 4.39443,-6.0037 4.39447,-10.088722 -4e-5,-3.05341 -0.81498,-5.890214 -2.44481,-8.510422 -1.62992,-2.620143 -5.72523,-5.477579 -12.28596,-8.572316 l -7.30348,-3.404168 c -6.18942,-2.888339 -10.51168,-6.313136 -12.96679,-10.274401 -2.45514,-3.961156 -3.6827,-8.726987 -3.68269,-14.297508 -1e-5,-6.767 2.39322,-12.378715 7.1797,-16.835162 4.78645,-4.456277 10.93458,-6.684458 18.4444,-6.68455 10.02679,9.2e-5 17.00017,1.629966 20.92017,4.889624 l -3.65175,10.769552 c -1.65055,-1.196539 -4.16757,-2.351892 -7.55106,-3.466062 -3.38358,-1.114011 -6.51954,-1.671056 -9.40789,-1.671138 -4.20882,8.2e-5 -7.52014,1.196698 -9.93398,3.589851 -2.41389,2.39331 -3.62082,5.467374 -3.6208,9.222203 -2e-5,2.310775 0.43324,4.415168 1.29977,6.313185 0.8665,1.898143 2.07343,3.486753 3.6208,4.765837 1.54733,1.279198 4.71423,3.074122 9.50073,5.384776 l 7.42727,3.527956 c 6.18936,2.929695 10.53225,6.426701 13.02869,10.491029 2.49633,4.064406 3.74453,9.232548 3.74458,15.504442 -5e-5,6.808354 -2.7337,12.585114 -8.20095,17.330314 -5.46734,4.74521 -12.78114,7.11781 -21.94141,7.11781 -8.04624,0 -14.91646,-1.89808 -20.6107,-5.69425 z" />
-    <path
-       id="path2995"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 212.73,39.044647 0,79.533763 -12.3788,0 0,-79.533763 -28.84259,0 0,-11.140916 71.36376,0 0,11.140916 z" />
-    <path
-       id="path2997"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 435.85778,118.57841 -10.76955,-58.242235 -19.80607,59.480115 -3.0947,0 -20.36312,-59.480115 -10.52198,58.242235 -11.75985,0 16.95895,-90.674679 5.63235,0 21.601,66.164661 19.92986,-66.164661 5.57046,0 18.38251,90.674679 z" />
-    <path
-       id="path2999"
-       style="font-size:126.75886536000000000px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#595959;font-family:Trebuchet MS"
-       d="m 453.37378,114.43151 4.51826,-11.38849 c 2.3107,1.69178 5.18876,3.10503 8.63421,4.23974 3.44541,1.13473 6.52979,1.70209 9.25315,1.70208 4.8277,10e-6 8.70638,-1.32039 11.63607,-3.96121 2.9296,-2.6408 4.39443,-6.0037 4.39447,-10.088722 -4e-5,-3.05341 -0.81498,-5.890214 -2.44481,-8.510422 -1.62992,-2.620143 -5.72523,-5.477579 -12.28596,-8.572316 l -7.30349,-3.404168 c -6.18941,-2.888339 -10.51167,-6.313136 -12.96679,-10.274401 -2.45513,-3.961156 -3.68269,-8.726987 -3.68269,-14.297508 0,-6.767 2.39323,-12.378715 7.1797,-16.835162 4.78646,-4.456277 10.93458,-6.684458 18.44441,-6.68455 10.02678,9.2e-5 17.00016,1.629966 20.92016,4.889624 l -3.65174,10.769552 c -1.65055,-1.196539 -4.16757,-2.351892 -7.55107,-3.466062 -3.38357,-1.114011 -6.51953,-1.671056 -9.40788,-1.671138 -4.20882,8.2e-5 -7.52014,1.196698 -9.93398,3.589851 -2.41389,2.39331 -3.62082,5.467374 -3.6208,9.222203 -2e-5,2.310775 0.43324,4.415168 1.29977,6.313185 0.8665,1.898143 2.07343,3.486753 3.6208,4.765837 1.54733,1.279198 4.71423,3.074122 9.50073,5.384776 l 7.42727,3.527956 c 6.18936,2.929695 10.53224,6.426701 13.02868,10.491029 2.49634,4.064406 3.74453,9.232548 3.74459,15.504442 -6e-5,6.808354 -2.7337,12.585114 -8.20095,17.330314 -5.46735,4.74521 -12.78114,7.11781 -21.94142,7.11781 -8.04623,0 -14.91646,-1.89808 -20.61069,-5.69425 z" />
-    <path
-       style="fill:none;stroke:#595959;stroke-width:9.01176262px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-       d="m 267.14727,53.032923 c 11.19043,-20.301224 36.83929,-27.62947 57.14053,-16.34001 20.30122,11.289461 27.62947,36.839295 16.34,57.140525 C 329.43737,114.13466 303.78851,121.4629 283.48729,110.27247 263.18606,98.983015 255.85782,73.334146 267.14727,53.032923"
-       id="path10"
-       inkscape:connector-curvature="0" />
-    <path
-       style="fill:#595959;fill-opacity:1;fill-rule:evenodd;stroke:none"
-       d="m 244.56835,165.43238 15.05262,8.31856 24.85661,-52.78319 -8.31854,-4.5554 -31.59069,49.02003 z"
-       id="path12"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
-- 
GitLab