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'>×</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 © 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 © 2016 by Rémi 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 © 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! → 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'>×</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 © 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 © 2016 by Rémi 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 © 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! → 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'>×</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 © 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 © 2016 by Rémi 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 © 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! → 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'>×</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 © 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 © 2016 by Rémi 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 © 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! → 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)% z>2(!o%MGRYV-`aSxU>f(%gb4ysCY=7p>X-B!wee6Hot?x#>=g@%fNvrNp|PG>deJV zQ%Pt#L7xFW7ZtBP7DoFR$h3AhrK!fS>&i`$F*6shsXz<2U6HihqQ(VBxMBuX5&8(B zJZh;1(c(6^tk?KR7pOyIG67rzxFJOE35$dLxqowrPB85Ig3=<sDU@g_-fKNHnbczl z{f3f%a^qs1E_YK5aMO|mMdJv<w^miw^h?p;bU6$yuRXSmw!GZ%^6lLQ5H5&_fxHC+ zX*`1~%0NyO_NN~uojui>^g`$d{VkPQ2hOa(odM2C%V2u0ez2Q)_xbW4NWUl-jxUKg z8qe|EZAh|Z^t=w*4Lj_cqi4<1vfNa?b^7GrFT5!)WP^=Q-Zm6`vxS2cwa-YG>t-Yw z^h0Jg^gqlSfBl{dC`ND=6Mp&w4(FYX4r5hkZGH)D#HXvftO{L8E*AiQNxZ;Q-UC2! zsE~L~TEz>zRnb#i0KjNOstXSPUNMa6g0y0sMxQC;`@tfi2MZ9(6%w&6xj3&9{ZRKv z^JW;2kkVds8`Q@+0BRC03hE~)TIJXvl_;tg9sa@jE8Fkau_d^;#Nud(PzZm-!n_iG zQF`}z{`E6#b|M%Jd@NHDhHf`Ax@m&D4dDSZqdh-_73cHOU>Yy?2CR|mDT9Y3XOynV zsX*z#Z*z$Cod()3p5aZGue*P_Q@lT6rAD4l#+T7IT?vXayy*;(JNx}kD4XKuKCqIs zN($Efi8e(2vZQ>Q4gIVq(3Nk>Jl7Ph9f*W#76ID)A%tYPc1dY0C}_=^k1?y2fd#f@ zaCL*JnPs3mjUuDiTT2}6J&sShL*FXvkn4!M92_{~Zh|I}Z}Yb4J#mMck5=DzQ(sj7 zZDG~n=C@!@X}|uys~n!J{Q6z=w_wqa59PQe@8-y662*C}Jv&*sd3d`#{10Eh;Y|<i zf8Wo`&GVV?En)0BnQ(6C=A{GcvY*SIYUti+Hh0dPoe^iQ6<mrBA2XiH2+VH?G5))F zUSAbK`s20HM<14tJYa{IG1$m8Q;gl${d6K0P1-Wx%2XeSzf!Mq3>V;WILF4jR&Z@` zR^clD5XL#XS7(?y%D<_#zgltYM&~;pVo(~4@p{niQ-DnvcgGU)4A<D#xtWTd56+u_ zoL1H-t0K!a*&4H(dwXJZ5LL9+-;Po~aS#q%b9W(KT-WP`el~E2O^eIvZJ6(h)A<fr z<N^be^rAuole{mY1iGt&bHU&|3rG3~)U~5stFUukbJ%OFqj�fSYNS;N-UAX{rp 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�W+4OkL8pg5B$yGt6^}@$(C0fnu<d{Q|)fu9P7`t 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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 zcmb??^<PupAOGFx?s_9qQVLSiHIz<~Py_@?QA#NRVM9t91VjWJ5+dD0LWV&|qaxsh zA>oi3(i@BK_4EA`zTY2qwmt5>=e+LgyyE$alX}(0l#Tg6W&i-#%*~9h0RR;I2?ZGG z!LNgd--zHBB=nl;Whksab^!dt6k_Ha3IGD!|2_~u<QMP}Kq$=kMworDZ&>8*2R?wc zzt@A{Q1G9at*@`Ymk)ef?LGjw@0lAJIz0TbUCQv*&9P-j?H$bQG9wd&`?5KsSmHC_ zOAqanS4@nF<qrN53SoAJT%3kc2r<Sdo-{^wyoSa`cCdaE`xb;nN9cozxVEPqZ}Z0e zj~Cm1Z|%8YkE!2dZ6DyZVr&VM^+nFXTE{;_vHxBK@gP10`~qPA2JlV(H`4xZ<ow?V z```Hg@dD%jCKUVMi1^?5KaK*x|LX<BQR0$9aMZo0=V$<6E&glFmgv71fti0cn1nz9 z3+7Z>dS+=BU*_+0Kt6PnCHbMS65zrJ0i;4nao94ay4c`fACe6CNH=!HfU@Qrl`AuM z5ACMOR}%JRct8fM-KWry^e?l%_v7YIckGrjT8eBPpMpRT0Ai05q2)<S+02Z0aRgvm zOHuuFsRqnqEdQP|Co3wNEa~G(_dZ>bcd99;zQDTY1zO&PfQzgvx+p)gJF56Ph#2rJ zNC)0JHaMZhFtTO<Es!rsbicydZ?6gGuj{q+ft+vMwo|+cZ~|A$*4=qybCf6?RhdBg zz<K<G1xRay5kJVrG$C@z2Q(XP)5EGELfZ|gTXMo7cQ3n$(E_~R35t$&GeLo6BzgY2 zL`xC6x2XOO@qg1be?!XvF{k@|Mjeor8}-~x4u(r>=C&?krV#LI&N|%r{T2TtKkyPK z=LxD`WP^?qTxw64tax>V9pce)BUnC==WfT3z}Czu2rbBs5^lh5xu$$+GTK<?aMH77 zvE6}x$)Hul;vb27coKtC-OPo8r#$4g8};26au60(d&2Y5hJY9#hE)Sx&glihji?}% zzpgn0oyaTydrFv`{buHFr0kkB5v0Vru!nC9KRJrJNDEH+;5SJRqWKev<N7xv%Bfai zcW{cGkqIP)WJJA?wnzDS;nD<hz_a6B{&>hxN~jhyc<GEWb(u72U!!~N-&)r#XJ~ZA zFkd)9F&u^%IcsoM#hP4DP9N|*^p%6|8qC{B|JzNWY|27ZsSy=<-NNbsd^KYGWq!MW zk(E~KWKe}*s0wOSd7EO?T7!u?J17aWcIj_cy2W<6TR}$WOs^X_|2#Sll*HNk#t)1P zr&&QSD@=>}V0fY6)bkk>+xCFd(61j{tK*jh9-Bgd*AH)m?J`Xt!UZ`qjE{_<8H%Io zg53Y^O`}}D76>nxvr8tCB<CZz$9MxIp3?zJ9|PVG?)XigW)DozRtB-?a{ilHNCNPr zy?99pN<5xeA<*Qcj$zMV6!v(?8-fhr5d$|lCvzQs53YZl{B$sk;u#S1EU=P_N%)Bi zSzrJFopT$tw+Mu*bwEGf@1gLg@b{d+lmZTaG<75}N~q4KHeDpIXHLKt=>WG(3d2e4 z<p!so(eo@zs_dINbReU5&Qp4fW!z_QVag?NrSm}_#M<6NhP|bCMMn5Por5?AvotOd zt^lxO-ngjSWb9uH=hQd5Y6HY-E;3EdXAh6W_4OGi+I~@;oiYO&1V~Vl!Tj4@{5xGZ zpyJO%PmEQap2s?i(3t^yQuBlB{j}glJi?)$Es58)!R-!$N7R{6958w|!qZs<^0|I@ z`VF1~_j&fAi!cBoUOTf<r94Ttx7bN$*?uj_2EcsVfV%Vv%BOz)#Qv3A?`v~FiD<Ul zEj2oRsd07p>Q<=rm#;@Dk7;t;gt=4_83y&wS~YzATEqx4x-{BOF9}}pNgV54KrAGi z&#Q|Q8N{yBdIW$hnd!Gl6nnqG|CTEP3I&!;sEynB@B|6uZjV5vIU^t@fbtXwSAApb zvQ+IYoYnv`PP0Bv%^>;fxkJTMa%)440SzFwV)9PLMboTgPloMY(ofdMZl9sx+n!0% z*Ox6Z3~y2uG$o?5_Zh^H&Iq=j<MB?03223osK@k-z<RwzuxpJ&oPW*)3;A8Al%7Cb z*)XuG5u!P;J3Q5Jd>K@~vQTE-F=Uf-6~#R#FiTntK>VcR__ZFA#!19G^U;n_u0*<~ zl0nKQjHo(k*T@U!iILut)|UaG3niW+$j6ZatOW!x(gFv_cRf*5_m(tDtj?r7SqK2M z)OIa>xq>eZLlgg#5NPf#l?TAvZ0~beEqoL)_MgG))8IH@;t8pN#*@f43CLy5#;1X_ zN3>8Ny1H3B5ch);cej9e90<2pgFpaYnKI7mM=gfxb`0`8SN>66n6^>ydrX@vTHc3T z9k6fb1f<=&Zqzx;$-S%Ev_IX%*)($(TM$^z9ssV}o<-5%mm;R${)H9zfR!dPlueym zy5!grd_VK#)gkl@xRsXL)DR~P*E4%FZ258~8`R0x?Iphaby0*T4?>x{2#%@cFS}Nw zD~<^ZTmfgi<TSNy97PFqJi!eneVBmA7G%y(X76M=ag+rX&OOf_QGX&v0|j1~Qdbg7 zv4MQ#bWeT$IW1ZM0a~0$+kPDDy^LG=f%c65=DKRp^c=4iLWy3a7WL8q7Uodb(rJ6; zZ0I%ht@Kp1LQVxJk`F@<47#q>kiM7gDprzq!i5;h;lPMch(p~Bi^A`WlLc#upKXgc zfD_T$_BY-}h^?HuL~`fa8rK2JzD4-e&XuM#FhhOdS5YnApeyn)H+FT;U#WU-taX#? zUdN9Hra(B5ug@YDu|(U#LhX=cJUIQ|ja8-|{jKz;`^tGA4B!}Sz#;_50b1xP99%pO zDop3$ikR+yHk9>I3v{BxdkJ)*UP>WAv*8GRm$0cj>O3Q_a99%Y%o#cuNG*A^FGF^a zhJGt1_u8q%$AbG50O3LN^P&xbzV5$s^Hga}L@x~^Y`*CDvxQu3Zo!0)P?ijl0jS(Y z%q9QvlziDSY(&(q3?4@Dq8Oo9oswLx@GeItGap;eo0NwDi0F7&$4zpxp^FEj8AS?X zNP7-s$9W82vRo&87<FNU9=OAupCQn5@aBCkXf8_-){lXFW{Crrle>@VoPW+r$1w|} zfj99!e^UBf5w!w0G5+lNqE=KwDIUl-`TX-1=utH?C{!^_w5%XdW`32MIj?XJx8JgD zf5$Q+FkUr^0bEdN>q@M};(4NhV*3vm000eJ`Oh=wJ+ItSZMU1v15ISUVT<%hsA66! zoT3}7l12yI`Dl|QkLXd@z4lRl&E2Q?qYeV#)gv01Ccfi#uK7TCajJ9ru^s|!Uk3g7 z#VQ;tGgKfKakC-9_HrRNZCU>`y7-vdu1`%Xa^gwqzJjv5SpxyeL}Jz=T7+eUd?A#) z6D=uln_$1nsdqbw{xm+!(^Rw%hTaDX9Eh_hP2pEQJtOt^2RVMrmCCaa2a?h$I6~;f zy7CvJKEfsk9KgDa(DQrY0e=E#tNzWCTS9#TE+0Ae4G!9buXNS^(i{NrE{ybw-^2g@ zh=!0i<g&|>YHJ`A^vb+Rz?to#TQ7{Ltyz|E5J#^wFwGeSjHT1l#k0inFYW8X8DU%{ zR9>#%$j#8k;c05Ncd^;OMax8lWh1s+KR)g+^v2lcaRQLxie*<1Q0r!OCEx&zp$&K? z7NP(zeQVDD574=w)|&k|5xsI&X2pT$TS@sd^Jt|57jI#<d-On<_Vd3HYf1?i=pkND zB!(U`?6qoObY?I7pFgOf7W!aZRU<&+Lijx%y_M;I!{6UQ*GL1>ziMr_C=&B5;yjW1 zBq#g5{~$X6h_nWZw`tif_;ANwE}KK8H{at#=o(YAq_F<aiEt}aM=AvZaBaJY0g@lC zwhh0xmSrSW1YkU|Vn9?XB|FpYr0}L`e+~plRu2j_2>!GoyJRx|Y;eL5Xss2D7ip6G zKx{TV5WP6{))K{c;0FK*GiO9+@`9Uc5Dd7Snb#w;<gs;zR_tq<xW!-bx^HOYF*@7# zHvo9>ZdvVznp$N+&&?6C0_;J5kEoaXB!&)_`#_YbYkyup*}bo64a#MI4(*xOCMPD7 zwCDO1IAK65H-W)eaC7kb%_@oy{5uyrXkcIhO#L@f$IzZW$L9-16n%<Q7ZLz(W3J0~ zWBM&c&8P2b_o%Kf4FEA3RPamDg?lsn5AQDrYfJ4jL586$FPA5)J&{RtkN=hh-1{>L zs>17uD_ZXNN067A;oV368X!zUSTUj*f2ICm)GObmYWxj^Yl5qqv;xI-Ex2hGs86h& z61xr~WF58C<N~@gA8_x7LbCqJ0<iv6fwgF=tpO^I{_Vve4lF#O92(V+*57E_QXEFf z)C&MPhB2CU(EOO*hSs-4Qgv%XBaI3GY4+~bVZNm-AJ-+#sQvFQ@nS)h@|4q8dee`~ z9g=@tGB#>X<pfl51~zj$4fJwN#x>OcVb(<(P$-8z_?H^uMCBv?S|&RqaNaIR(6#kj z4ZmyNzBhd&5XT+}Z*~P>g9#O-BszVk!dGs^CoxdQEHOZtPPej4I(>H`n2&sl?%)Qa zl^ljA_LO`_!?MXsTZyrWzzt(6%YP14gR-Phy{2C%gE<92Y(L^!!1sf>!gBuyc6Bp- z1qbbP4|oB{`oja!FD}76uTI+xf4Sc|?UB5_2yO)Y+!F7o*OyON{wEEIz^4Zk5O$nT zST~T()G@{I$I}C=Ie`2H^{rE<4xqqdt<!umF#exI5D{44Hk!MoAy4XIHemsVTgHF7 z2mCPb6s3DZ-9K|Eq^Xhwgvk>{x2t!HjHoZi8<X}KfYk!vt=j^>Ai3LP-u+o1e*_P7 zN?H7fc4;Xr{+5w=#JMG_e?kO#{KooIC3)gJi&)}H9q7@NUMX-wr{dS)RiHI`?)VFd z-VVMrAqwa`<yh8pfhPrTZPo0Q{K$-Cg{)`qvR^e?f`0s95Q)LYGb#f2OL@9|Orf7% zTk~=6nvJpEJ)geuST=|y5jb!O(crxuJuPvF|9ZWXelI>ATDCvM{@&-ulxnd&LU;2x z>2E(*U=8Kn5RaK5Ks-ZE2iTbRDVgPPaBdUO_bzM0t1*ugF25I4VtW0IFNUa>Q1Q+9 zTt616!Usa@^$T956*q5`n^Je~-WI$7+&{RfRX$yQ56SNr)<e?eidF5X>5<mcc=KY; zVIjBw6alo4I+?x^=jRVNoNaB$D1&m&K*mG7yo~V_DTCmFedW%&D+6-afE%1A*XL2c zL|{PlJ=v`5mmM<YD}xNOK>YDW`(27A5=j`|ec?+?W;c<71eFkxtedq#d4ZaEKIl{< zqH$+3+sfny5kq-)h>TBj1hmUWiCNLpO{zwdFOP{w8DIZ8O}JBvl^_4ros{+7Dxpt` zQHIvfddFz2vO}kyg;<1zB;8IMVZt>s$^dp}#`iA%xITl+nnM1xIZ&i7=s%7nPjc?F z!}xC7JU!lfGs9IE%;E|WW`W$1D#N5TlcanPklZJe-J!}Etbj-)r8uQFv?|7c$u3qe z){-Qp(%K}&zHxIt(p0139g^VW48XTS_2c<z%WAF?m7h9=)-7~=5SGXR4%}1hC)Qxo zO)~b;*ZrRbf>E&I0oR81x?j6|zhFyeq_DTkmEw-Pl<+7dC!(9SUnuhv%6N^$d0#9C z2s>AMMoQD=V5_QZ$Pj0Q)kj_`;%X|VI`7=EDft?C1qF~Zd_y}O8oo~l-EdS1k#q+A zn4Y1ldE#odQxaU_3CE~<SFSP?Xcx66B4>Hu5g+d~+8LlrPQ+alCdj5E_>;=n>CF)S z={DfXs+N1ubGneB9-Y57;(&j=?iD6;h1dJXn;{u2fJi6>!*ceEAG#(0GvqD2dKd`f zNx5{LvH&NcyJ#PuJtQY(jIzSd+<h>A6ATnCct0Kqib<siuq-8m8d>;{7=(MU(-T_Y zPGe_HJGG_U9d0WSM_0<T5O*0Rmw8~VMg9AVez+-bYWn18)?j6YwG}YDc;>xMEtgOt zkk9(zfI0~~x%>-R3`0q6@gVfI*hCJq&D~Y&4y-o+-aag`5s}zEd)VU|vm?$4w8{66 z+%~gcm51G7h*diC{@FZxq4O?u6KkCKD;vau-{#Sh!jj7Jz=5?Nc~Uj@yoUK^<97{r zpG6xCHUl(_m|Y#xot*};jff&3YBA;po#!IIJ1s=EvtL1qetA^6^dCkr@)8Mr2ttGi zN>C+!<*)>9f&F=ZQRhFQs95t1QeUXODWdTu;+ZnWBf$Uq!y@VXEq5W_G1}f<qyJ?T zxGiNd(HZb7$hO*;3yT7<(AGx9^#{1U)Zm$h>Q0c&eB-Tw=ZQ!K>TkzViD&&w!se3? zgTmDMtl9CN7Y;9$3(#)Za4^EOSS>;*b!n`+Ii6(Y3ixs7YfduFRP`HpEpn{zQaWcr zpI+e!3SAlX3z@DRe2q#8#|sAi7MbJLqw3QW2(m5z@WvEh_KvetkE^et&Jb+)0KZT- zRwE4%e~~&le_}QsX;zI^r(mbccY_;)sE)b6eAe&HwgUGY&lkA=Lq({eaG%VJUa0DP z6XT=KIt<10CHeY0<t{svvLG+;W7gg;V+}`mW!hVC<thk-d|ayR9ICha(<niRFot+Z zhzwy8(HCJ#pQXw^Wh3v!Ulx{&Ry^q%Q97iy24D)+254cyVGcg)gI)5a>yy+U_i1aW z+j<RK2&%Bmx6!l1l-W;M=r933`?$T}qaGwTp*`ns)D2X}sBiV?^IJd0FTDM%mM?Kb zv@lR<kQVVh8B5i*KluI32}fo-*!G<td=2*#VNkWEjH}AE_N_;ryz(f1)#fGx+4scq z<UB29u{7<r<aVZwzqxq*crc5SAbx*{RTTt7cQAxWrsGeY_fBTuE8R4xdzHZ>>~9JC zg)^VOD>#@k-h%<%g-m<+&wO`od4)S{;+f_et&X|_rm4y;^WGcBqSb61K-ukf4Wp3! z?t!N5Hg~@FZW5R&r!0)f=NhNByV@f1h962>GZBFI2jAco9qsy!jz+n!J&Ji^4MiuT zm*pq&NraioutXZ*;nyf?+AsRP#f|C_RM+R&O#)WqjroDW$n{vX+{dz;K=6BlpCrqY z7=9&zK0?Pk-gW$QoX=-yzWI|04PJ@JppM|8Yv#a#v7)iT;*R7_r6RHB%*p4>l86nw zNLey`rc`YB$=n!Su<AEG$aHp)@maJ2hS{eX>%u)0Q(iy*o?=HEhwESv*^{drSk z-u={QUpbm4bQT2K7bO?`=cZXPe2Vtb;a?bk);p}DB_2EKwYq}g+2k@~giVyQM!uA^ zfLF~3JvC_h5f3^E4X!<pF;nJ=YdG@E;(v$VwqLNd1=h$frEFGF?1`t31MrUl?}@Bz zr(={+F!tzESVB4GuZm#tyVWYnEJEwzw8i7UK-tif3s>~r!d62^emR}K3D(A__vTL2 zpik8aGVnVG8jcF_#js8}?GiZ`{j2kPg$-E`j8Xc}+U*>eA;XRR^|JMU&(g#*4X)=_ z`aP#jf&)18D&bW97bTNo^dL?5Ek-RefRC)>W;Mxor}ASf*#R{p2F$Z=IJlGzaCV}# ziWFM)6uaMRY4=Xet(=Q}_Di$G0I)P6-;!Z>;(FL%kmzcBC(sA8YOr8#oW&wcnots; zG=7TY0+H()iLBrAFE~!4J@HDpZ``qIoJFaYGfcg8BJ=ox>9S1DZB1Z;nz<g6VOdq{ z_4Y3OK$)+`_MZ3iaJHQF-^Vw7AbgM$i+3JS?-bg^tj6aky~7v|+4@F)Wnv^wokAMi zurSxS`B1bRj@WmX*l>3_v$0LKCd__DY5B!^Uclk0$9XO@!go$#Y_=D-PHCh3j_)n= zYxQgn{~poqPXxSOU??X!^tys%A7^U2xY!2%es53uE!{;qT$9LK89uN7{uH;;Tu7Om z+QL`g1Z-j1ZAiKtvQoG$Ozm~-@#eYMS0LE$d93`}@x85#J+;rx+be@!Yy<99iU0d~ zxr=08%^G(1)~OCAl`_EYx|k(mM&5ZhwdP72btRE;@w?oEd3vo!`hSWpIX{;V=3<-b z@#4rZt74rT@&HPx!U++LGjhi^>t*_bp=fkbqZ~s^)eCWSv&e&ApGnf|p+RQ-XKa6z z=OXeO(C7XJ#v6-6jMFJH$!+54V2<-qXMdU?D`MZ)muY9)d&Gd;;~k^o|D~dd3g;GC z{1J3y*zvbpF5Z3$M;b2eZQJ~EPT7;cKQm_$WwvK0csr!0x5S>c1pXxGCvB^j5`S3+ z{SD*WG<5ilNi(c^X47dYu3bpz>@_?JEe)3p10Ges%!3q7K*x4J7F)FfeHGpTcCCOh zXCf!LNlI~J{`rKvFfUhP@Ht*e`~w|o%g$@{>C{<IE)aE7jZkYY#?(D*Mj`cx;YZ7{ z1kG*~BkW?EZS@7M)SH~^#|dc?GF|-80-~tINKBIBhC51t$NdQ{%(+bREFtP{_ni9U zeU5o`Q>DePV@v0uA<@Bi5n;*V-}Yg^gF-q%Nj(1jb7w%|LR{Zin(;7{cR(qyjv@1t z4NceObF6f-E&JFH$0jnl;TOFzeP=0g>FaQ}>2cGT6~=4lR_-i@2ekn)$G_*QY4n$_ z7~f%$zkGns5PT9WWJ0z5jMAPE%^w&(&!A(aWH2_T^hHA>JGL-Fzq<Rd?Rz?!hY`_p z@sY-2l)gEl{{1q;PKI2bT-5!*_)XBVPLkN!{bE}rxzH0}ic%_!!t+Sjp*<g-V758p zOMDHDUs%PGyE-Fa<NGHa0jkrRu6{M@o9V0vSJZ>e9>lqLG%_J{No$THirSl&{GDWl zgj_&M>9zJ6I^Oo9DX0kdM|SGNEhJ;V`t`@YyKsvSpy>Kv^Jd)R;za3?YOXi~v-~F$ zx(ta?@OfNSt*TdF!0b_{=(K@s{JyB5_fO;R%TM6`>!ff9wkFVoinn*}zo|&Qbq7Ma z*j)<e7HfJCKEp4#&wR2J={ofJ4kLn`e#_Q6KJDcW7tLSm`D70<m{19NtAe&VkstkB zj!I9vG}Njvlf3W#k=hws3vj@*`TLi>A*<nMrSOOF+}JCQT*E8-=XIj8D8cGhhi@?y zl+iRSm+j65cWGUHIfZ^6rT0R}@z8m4r;cr^lchU~o)huG8#0)D0W{$=v)T1fNVC_& zo|@t^D_>aM<oj@R*&REyJ|63ufzxvfp=e_w>gqOvxXCH<1Hbq1FLyR^0pFmE5LqLB zkH)pY_{Jl#?7ckG2#w2UNylEoGCpTqG1$9;^jELqL`!Of|7>3T5-lyLk)971i4Ar9 zsfu|*N=cu7_u9Y^R!bM+xB80noCo45N1MxS@_>EYgX7)@!&_Nug2W0q{=N}?+0q1D zOZl0=;MvMAzURVktH#<Rqd4FWQ+_KiUu-M$6v;YC_iK62@ZU&RKvSZZxuW*?qGDd< zT__mgA>Sr%_l`Lv;ogS5;6?Nbn^oC={qSx>`LI@m=7qMU$kic2%6bqTVJz~nus)F; z5Escl*M7{O1w3@t!iceOs+d#rw-LH@8C}su<!=Op`>Z-ug;;qNHfC{Tom3mWpJMwy z8>DxtalxSR;6zC3+@^8ZT#EH3q{-o0ZJ7e=O?aUAyg(>z**=)pGN7c)O{0khXxSSt z)<t=zWZC)8;D)v?evuj7r$iHfV*-XQed+v!?Ug$X6IVd5b3)z_So<?M5tscS>`KoC z?Ctyh)c@42F43gMdy4gO>sZ(+{>^R;L>L0b%E>jkeTB8!FD$-PRUM2w-ot-O77;v; zB$s<I5WU7`uyLjQ{U5j&uPQG8fTHi^=&{>NiCR8*U<<p&*iRYM&?^<45c5B!p-W5j zC79`?7MX7*^u<d59k2(pukq(uP9CI`!xx|rd1=e$_7w3CO^u@~d>{@^e_rSgJDk1s z^KJj4{7&>yB#YHO?+jo#_wQF6Ip+HL0&Jy-2YopeJBqr+gA>hC7<>{G*Jw}g$^~dx zhcT>HH9I533~1bb|Es#B42{Qw`FBA6Du)_z+pCpb>OUYVJ39ZD@Gq5{5-W<YEAr*R z#GB3C*C5{7S}<Q}2pIVqzgvM%l7fgQv^OFNoIPS8xdDWo7rD;Q8tQeZhXW7wg1`*L z!Mag7Jm)ySy6{(l5xlRge4(+5By2=AuqFk<-<xSD{mlEe+jKKU|H>Um7+q3=7*I8x z%EJbRB3Mf4$;7jIVxARR({94{zvd2)jGr@Em=%&?7F($eAy`6%4AVaUIc@*=-lUTW zCRT=kxB1gP&2DnjjN1A6q~JV@lJg=tyB@Ue3L$ItBiH%e9n9Qz>VHtm`6xAQ@W||g zt6<&EE3u;0cjEThGeIL6H3sBq4dhvo*>gmWi2em4p@&_ED#gqx4y=vP4&TF0im@~s z*=f<1MJnDAQs#8e66vaB&Q-trkMXJd?mygI*JPghEcc@0`?^L>8!#c1kE^Gy{Nh9o z<VVLOBs)abnqO>q=D`U1Q@{oH)gCY%7VLwOPk-;@<USR@Azi)x2ky+G1QlzdAE)X{ z&MaRaf3eRo=u|>XaY&;!SVQ9jwP%hBiSpfayGmhb2W{1>pTA?-9$7tS3vuLMlTV+3 ztG$0mKMhxca*U{#u8XeD5%7Y8rGr^_wK>BLiVoVzYUz}r<R~f^6QW1fmuI!cRj5rY zW;x%$H;0a~_4n_&tx`3Eya9pGtlO*j?+|CJabU{KHouXTr$l~_^fawimFKX!oVweU z<<Cbr#YZ$tu+6Z;UtTR+%c8vICKsx+H1~DOh!O1&NMD`7Q5R{F_4ixDgBvLHdcC}} zE*|a-vi$Zp13QW5bu&roMPZbi*iXP>=}FppC1DE5r>%xZ7a1O*d_A7Aswi=2VuP20 z+gU{ms^nqcuc;uvF#kvJ>6Mt9r*0d{(hXnvwhWJuj72wy1SFSIg;kGzFx9z#+j>7Z zhD-c(!{Zb7a{TA7b8DSEi^oozPTccNqV<*|V%@4$ysEtt10J1OW6-j6?&e3+kPf=f zp&G+(U>hx7SQ*>L_gjTq-d6j7o8ERVk{^Tqj#e``YM;;7MdtB!jWV;ie1EeYJk7GJ zI_>8p$43Lxt9}#aov3=oIq>g2F3=IEbp})hZ|JadS3hbqKES&Ge<*TYaZz2N+ikN# zCrGiF#*?sO`4eP4C*q11cDBURqk0|90dum?r{Ekv!D4TX-v3^T{;omT5)E3t116T; zNJbOSKcd4}mJB(8Rv-@hMIh<LH)N`fYw>~ir|#b=t-DKp!yg~cExk{%7>n^PW`zLG z8Wt2>19^;e$L_wj>8AeakIVxFK?8v#q0BpM$W6L=b(2M~w1ynuaPt;}M<0-SgHB&H z8iWz{`~>yGBDFq}<STChcMLO9n6nPD&TH6#;kN59ESGf&8bvd7LR~z^x$8eSHgSi+ z?X%J3u5q-q>2%*o$Ux9jM38WoGv(1#?Jk~vKKa#wSbFXg?Yt7PRw9$_4OOkVYLQqT znq#&3L5(jOhq2cS;d}W5kqxuZ=Q&J9)MynunT_v1p3}}Z@oaD{f8YiNP|2qw9(DQH zP^M0DJgcb~1$Q`bfAQrr>=`X;S+JtCUfv{qyV<*2^ZlA8s(pQ#4|3EgWj|?kbAl^S z{V!z7gE*%#VIHph&|RB?y>uJE)hMYffmItGyNE9QFR_4dp2|=BJxpG5%FQHc6n{n& z>;n?&wlgqm`?1<{60PxKYsE))$FvS!BjvLN*|I8Nw$M#EqBZ+?;9*NCe86C72*h`Z ztqH9Eorzq;n-D2#njcEEsX4c(9Rb3qG>Q)!`#gI(zW6SL1k<o@66*nb6zWj@weh;z ztu5nSZo@Xk2Ch`8?8c!)2|ZW8d>g}Q!|$w_vq_&DrObRjmYck9$t;rj$%Z$ujXfrR zYd|_COulgeaE1U(lE6!tGg@6OdahmcMQHYSPrDk^y2%0h1)6KDa(5DmlTR;CkT)h% zaO1}M=)8!lT2jEPZpvw^^<86N742-;L3Yg4_i{9L-Sp&vsd97vfM!A+XZhcz5F*ul z9fQ8i66iV9WV?kGdJWRpRn|$_-;6Y~<*3>wW8n&C7G%@R`6#7z2kpKGS~TYO8wyss zb05%kjX>+=Tlez*p;&4;kAdwA*JlMT(42#k@SvyieThSrcx)$`EfD|(h1bU+xjRPo zn;G`!!Ext<`i`61?DNT;T;xfI+2)IvNF~3t4DwGRJQzVqgl2Jf5enJmB}b}UhGr$l zx}<;+LN@2e$ULyjaij0vDdr50qt(N#m)(j-hA`7!&;Ooq8g<sC^8rPlNDT|nnHn1& z(K+ds^rVD>yi<iLUHaMUA7+c#cTue$uBrMPQ`pqkp=n!lA0s;ad>^Zo(VHb?EvQ4) zSg5aV6JcYmy+@5*Bnru5#6&xY(}`nZcaXGOZ=@gG<fV<XK#B98>pxF)7cZ&0VI=u^ znHRe!tGWK{*HpOT=Vj&2Njl@nm=S}9U`oXJ%>NA_p5ED*n45NB`PVCwC8Y_x6W^t1 zYNej(-?&)NVBJ??cMy7Q3q$$#F?1$>=+%-KjUDw|;m&uzCv*?~6?*@SA6U~tO$R2R zsN15h+XFju3{#`>{VybRCc$7-*X}Hr4vWX%rPp;@*l8IG0ag1-R-@Tu?{{urWc6B` ztfkgB25;d7P*~DPod#Pb2S{RX(+G<F2yzfVg{-)H%hUb(wu)oQfOKt3DHWEAxY#fh zqD`9mV0nLkC^CK_;i4e(HVG?olf=A3ax31x1(GxWn5CPGFiRK<`XQl!C{v^aXklyp zRK%wuN35(cg|6NJi3T$v%v4u2qOn9W6p&1OuW#|NqkqC(XID}EYiFg*Av$RUdU5MF z?r8SiMLGx&`|a=g*9-OoTe!gk|7i(v0_h{zH{`~~YRc-1|B>_E*dw0rsgynCLTc-+ zrn>R;2aCurojHN0=>f&<DlaC^zO@^oU>&-xZ;}>hrYD^YZ?^#nM#({{2lwDMk6b){ zGr`j2#<OFQQFj-q&~o^c6pk7J=YRPr|Cm)1UK-d_X?!4R0>|Ie!lRQ)Llh9A7Tsa{ z|H)?T1mAw-vNTRCFCXIp2xFtC!Y5V}7OTN}PftSi^8fpkMSE?6dKDR)_8*sbD)6LF z@5M=OmBKaZXf1}qA8{Ib%KGVkONJbX2>N|G8lN=m*W4@?@uYp*QchL9+&x)#^Gk=g zh|vK@Mg^q>?8G^m=}y|f2fqq#%)~$8pN5M8Lw@msHIq9kPw}v4h74x?8xpqgX66TE zDHlmqOCW!*sVe#9jRVVW4CVPIn|vwtheV|N^xlo+VeBSG&pZ#zP=dVfGv;sRSe0rA zJTJiDGz(si)>d2c2$nG0ov<>@-xLW8xLd$?<csI+Lb(P?VU!*aSjx0=&PTkD@7_t) z%FF<}xk`|9I3$tOSa!Ep`aEzjb9T7T^?4xIJXS$MsN5c%6F4x&1sr-r9KJhoQq7~< zp8e!e4(CkY2JN}h`@gj()l+tG$ym#12@=G*oGS8d>)@u7J{tYaM`(*~-GkrbW%qoW zZ&^ZNxC+bEXVqM;Jwtr@IB}+EShckwS%oIy4V>@#!OGW=s{0hV*wE?yAGnv8y`S(J zB@I2vX|(!F4QV~xn>p60RQY}-#p~wY+-1QFKhN>diVY;%?1r8+>{#p9=2<Z!!p?2N z7cWZ;;Rl^|<#pg_o50t>cPT@Zg%`)z$Ng`~TZ#Ozsb5yG*0*dY!7V<w$UBPC6jVQD z<bL(p{<OPB%a>`YBEI%YbCVN>C*W~a*9d`E`&6{xfgz7D*uB6?%5}$mit69`Yi*Yo zuS@|FoPfq2C7~rD(LrJ2y_*aG*;`XoIoTr~wJdPKru=<uqQ69cEWNzx^u1LZj%E*7 z)dU0D;~^9cS?NWiTc~h}!FotPXTabkgC2tjelgm)V`k}t>o0ZQ$DzQMFrJT(EI-Hx zbH;y;DS9EUa@5sMBUiT%Hng}~M4RB)1Gve-V$_{T=LZxy=u*JfyP16qfJn0lsO<eU zu#@&iE`XZEklNBKhkE7UPV|{qA0i~!s6M3b+xQ6n!LY=JN<PxK_mnuBboF{7yjU4p zmYytg8Gz9WbDQlx520on^TWb+ZqI+;;9y!0{^8~R{(^F*&%fe#K!W*7yp1*-Nr5AW zf8Z133l-L|Fzm%^#P1ovmS7KGEgEagy1&qxDfJM@&4w<%+UZYyMtAj4tMKqb!gTgG zDs7X49avEi2*1Ml`s0$J%$Ep@ESc`~z%T|&XRu7*8Fv$<hA|^&v+q;dtbm`^nM|fB zV)_t4@z#j&0Jp1w@n8?2rTbd9f%`$FL%OvC-Lvr3uJ8#rV4WrYP^C9svq`6*w?O3| zRg1G`*lUx!Idc(ZSFpG-rAw@*5D8JbfB-v=iY#bf&WU#E;z)#h>A%(qd$PFa`R2(> z^^7qLB4L!%^kv=T{ieF$pq=-X>gCiLuq<=kIgApn|MfO4Xa7{+BeCH!L&GIufw05x z21ind_{Ph<x~ORf_lZ)4i2*_adle~#+2)w8s>+ryJKd@ABVhAS@lGs%$xQ#e@0yO| zj2{My<6s3l&rYM%z@h@5?T-a1w_h(2D6+SE-`vrjDb*VW@RNhYg^>{^!caiFf28{D zzE*hL_YR$nHVeQz)~Pw{pXRk9g4>?QeP<G07C5}ppGHe7qBZwetPUG%5^Nq6TtS`o zgau~>>N;Lp-f@Z3Nn_DoB6V^_b)(}$`w5DRNbBey6nb^#fR75lk&zoQ1c<@~Pg8_4 zL@-bOEJj%8#;x@=(rjzsH(@ROw!n*~+A0OXasR^%EnxdKiH7I6@XivccoS0ug407? zTx}G!=+Uzp{(k&9y;&g7n3n&XM-DdfaQ{+0GgOgf0xg1^7sjE}u2;^1VU8>ZlW+eI zLxXb4^kbIxHZbz)>m%%s2n8BZM~C636?60rd9<*MWwlg;?@RnJ5C4>>1IM(FKJ*7~ z{BjG$92UR3eMx4<zVU`d@kzQ)2&F800^ZH}U9nn7rLJ*0<TN+4Jo#Iwo?KlZ+&Uoj zf>R|O=M6u|<%OTom!W5;6Lp@BDYoACJnnmTsjIgx5L(vPzxA)kzoMv=l`pbhv5y_c zdZg?J+hT)2V{-n5vpMB+UduL&78(*#QNadCV5)MobQIM68)uJx_(99^<DOXDzR^y8 zmwzCU1PLKoIHj;;2?!C>pI(?a1$mU-y8XipyHTa$CEUs$Yd~I{9eRnl=mUX5o_j_m z?qvUQ3YI$F2K(%!_4X;&X@VY`Wf~)E@LTUcXWjif`mO4cP*{#3R=@O;?0*(Mj;NV7 zo(D!DKZ|4)5MnH*5C$Q>X$G=xM}cDCz|BE|a)Of{HG34LTmzr7#G!MWH}U=}+55pD zfVmOe21@j+y+`P$5sgt|fTw+&G{!rCdENKfmr?AO5hRF*x+kiwi*vC~IDUpfCt`k! zz9lsl*pRayAx!QI%$|!%wdvUwEa)p;l+`vfrtZ%K!n;x_3*5^OOfR#D4cqX02&@=J z?|7DTWv-&<8A|2RtEVkOa6up0Qx2bEiw)6s&oA-TEH?aIQ3|%X{`4hYPjq*zA9=fG zht$3C=_Tcf;!<6!ZUPH)dsWRB#4ha41{Cws5~mkKe@FmwG%+_zpNRiX(Jgnbh2}33 zHs8S2?8+xEJ-O@La5!Fi<?N61hhRFsjn8~i1Y*YTKJw+rgBS3`DCG`y5-Q~CMh||j z-QwB&6H~Dcmn00q)jZ^WjrQD6{do1-lvwQRQfijCM5Y3g?i`SQrpqAZ%$M_IMe4Zr zUhvEGz&8>+2=cUePKW&K;kBBY(OS>V_oQfAs<nyJ(W^cc&4>fh+77BbhCTBdFMtyr zu32h!NEe+zgGKnq0X>(jn9i?&4R%Cb{mpNF3sdk}!*!lvPRMhQZ~SlYA8+V193Qf7 z+jJM4KVsmK45fPv*^o=S#y`7!EPj)uT^?L`X|%n@uP?oOTk(2A{xwzO#qaBHXb=}g z>9+phLX327S<ZZXB>(609>>E3;0+bm`oW@4r1-GTVbv=YKP`30@n0ormZzxK`ZK#D zC3dzmg~#AbrSS$_F6uXS>~#OxB!y?*NxX-#^*P<HGiq|^yQ=XMq%8=vPFVjuMt)>1 zLBEuYQ=bsMbf2<+O)~aAIERM70CLgy0A5bQQAbZz1-L_dz!qab?4v29&3NeLHSPb# z=}*=+wx2O+zp|&+{X?_Wyr~Zs6)>%wK-rnNVIzg@(y38HUo*n7GxkF-{5q3vH`ty0 zp!Gz0!gcXgjz!e1^BA)L*5QZzOHb)1v`xg8f=o(}2XVU=cxI~p-Cgm^GZmXkb36mI zhV;B#rCZ6@-|WYgQz)Co#Rbi9ooTf0DT@~daseu~`AzKloKVg$u-q-tX^`oU4_nCJ z;uuDiNCT4O(s{7u*pV`6$OzkDyc?S8fHxmyse>~scE{Q;*DbjiQHw{=QQxVju8U>Q zTis&7R2Dm9KW8rH)N`|RgYhJM83$eGP_}d=-#i0(JHLFzZt7Y!=`f1gSBvXS-p6;o zOky2TO+~v`6utcXpS;np-?}<fZPbM^!)iKC?+L;MY|LZZahGvgO^etpDT!t}Hj3d8 z69QdzPoK8z=Y;!F%i~a^vy_5JT%MZDdc-WzUJ+Bic;!vcoGs<_dPml8Qcq8sUn7Lx zIh%4_KqU6l)KM4L((Ut0h<2_U&auzec>pq7(5NBQqIeH^w%kThfbVCd>A?k8+P(D3 z&*cB2Cmt(~jO#({Y5T3yUDZncp<<StB4neR5t18;n_Kf<sq#jpPnLi>j@4N$PQ*2B zs+I%;$7^%(I#rN3_-MpKFq!Lpdr{N{*H9P?afLtul{4gEzMkLGGkl?e%Zh^*2V!Lo z{2smkLAlBNFwv?p1a1EB-h0hUH<0CSAN*U0O<Nn#oZ!#uy=*wN&C?aI+B3Lwg-Ojs ztY-pl)cRHi`+#xE#Q*ZoVcD(9ARzq~=dk9|7ftH@y+(tYl(8u+)-IMg3BDr_A2OLn zM~l*s!@H8iZp%4GySHsI01Jq{mQ$u%sWmZwta@Hhj=ww6dc09#on}I8!3(!bD>s=- z_uLI!<6f2W)$Na5?2fteWtI77r3|Jsfz)Hbmk)sHU_Jz^F*Q&AZjgg;vv3#MS1<OV zCC^H8U$D4}7IO{**p6<}KbOvT7~}lnU$0uRbX<MbhMm|~wC#(ZO|LSh<|Nw5GpY|; z(HAklDKTH5jIAbsjdkXyZ0ls42FXgH9L167?tAss`jdXH=A+A1qy??nKeYqdE~Mp+ z9E`vv%UBsb=RQJ9Om@%7nU~ggAhh#V<R+O<r?{5X$h)hQN|WxX^^eK&{k+&(fu5`4 zC2o|fs2NRWS)&oSROHu!G%GE9_SOk$z<lMuKiMjm?LU4Rknr(xfK;|Q+qX!H-D`f+ zWj;<ue$8O){CMMcHT?b<hr*^+7G!TUggohzIRCw+=;8#G?eQA(h2sEza@}!gbU^Hm z3goTYFMe2#2u2XP;dc4h-W$r9wrTK7`cZU@QdtwNhjWEax&V0xbg!24zIlD4J|pn5 zCD=_;fXK_pXsp>ay*{>#Dfw{nomb`X0wyhYA$=&*)M5RbCu_2~qlyomGr=<MspwO6 zliQu6uC6Ximi`qyzdkA+Fh42?xN>#LwTk3sH_vd`r6LCxhAv?!z8YTyV*fnptr$)F zP1@uvUzxJaX<3K&-Gyf@I?HT+Lj^o6-tuWiyI?l9J_xl(KBXJB9)Tw#dykSimr3I# zZi3NY!QK{|yNht~uhh7AZH}unh=R=g*cZb%GCf803<Cv*n!)@<zPqiYIxwXhuq*XJ z58`eK9!p`uJuLF>n3x})>`AQsKG*s_y6s~gIdY=^k~x_{@{(QH#)O16_1peQb^r#% z+{s_4)Axd|p-=U;=_lWjC1li2670}s6;OH)#i=yTi)*XzIqq9{vS`-5$~xnWH+!A6 z^MZFj;<V@_ibwdV9<7i$x#vZ(%)5-6v=d+h-lLwlw$7T2&$nL`8*@}-%g-7Xwf!O$ zs20iMe_JfTv-Uef!#298VzM!M<f|rk9A{!&hmZ5`LMjUc!}Rtdliu*FX`DZ#J`T`1 z9&|ri(_H}wSDFUYrEANNd!tn|;>pg>s8I=1S8jQyJPkL+*)N2;2#HfC_<6~(axwSQ z14i?-Xx-Wi6G-|)*b#q6UAS{_tdIMI>Q6n$>>q<O^HXFyRKqYdOru~8{t}0=d_wG5 zU+rz}u_?;Ulvt>gA!3av3)r+Rl0EGbsnXo=9AHvIRn`{?eoAa|IFGi7&g%Oi-4~li z>x2CvAnNSq8xs4aa!BY?Cdo(if~N7}kikctAwuNjX9CM3Uyb{eU+>tC1!$yv#DP|u zenLV}HPx6ME9`>5hK@9JZ@m>udF*-PVpgC-{`=4@zl&*sGM_ARs#6TFwlIm-bzPLb z{3vMoYlea}W!v|DL*%oU*2~r6(qZ5U7h~#IBU4e0-RxJpcuXqt80$iv6HQjt%ZTY1 zh7K2!8UrporE5+lf=cswpV|^F(0&p={h1&tYVkk3ol21*^r$^m;RMh<u-h_OEQXyD zaI75PyWb{!l&<JrLhNBW*_sUwb6fSw{jDiM?l<J6*D=~X3-6Fmh;3aV<&|xX-=vUq zbWyAm?r?+D?z6dp(uUCW^6fA+4R~flWUc*<^nCL1jLgw-iC0PX7})ynX0Y}`i8Rr6 z-FRa#^=hnZ=7H22HkLu4@hCw1jOCxTAE31VN-ZAYj&nm5hy!K9&i3=BPqurd6$-gl z^=KCwVR0DBa16Y}<m3z9!EtcrIrEOtq;W%#CiI<5D8+4pS2Ei4=G2Xa$RPc9?_$7~ z<gZNAxt5;7uQK#1IN97}FoG(HWy0zX-od!JK)9UyLua%>jLccYqa0x`ZbZKLBWKjO z-QI-qENqn&yJx-?`FSHRG?d0T8TB-V5WKj<@HqdsNUdMkMbpGG%V{bt)61Pk+#4PF z%~v?ANTfBssXj7|5Ww4`pcH;s(}RyWSJRhO;>^ZfQd>f=5I286Ai8(kq@f%>U&z03 z;uIj6?+9Xo*fSiDFZ$SKD~C|T86!HGUw&sQ$9!f8iT_LUoCSl&=-7V>e5~|&^8O++ zYUumbd3)`Xi!(>ppRK!N{<{enYLrveNMdK}PzD;Q;SRG*FtBoEzQBLSj&uDcXQ2$s zl-~z+Rad*z{mDu%mJy2HytKyC&?@*!?9FC}m7)T@kiu)zP{#TI{}2j|F<$>CA}8Y7 z#1#zIGJZWmVt2dUUTb1fRzr?4KU~EbvDo5B-H+cpgJhq~+oz0as~z8B4_y6rtvk}` z$Bq0g=PrbY9u(>!WR+SUcs9r=vxwl-(1^sZE@+m<34WCFB>0Y{<a%CdWb+IkABKI+ zr>aQ6MDxjfRFWos^0j^4Lm%qpWmAvNw;PdxdTp<~C(pN=#a%(kaRMICiIJ2Y)Fq)z zv6WZblbHZ=#*WJQ>(^G9pxwb^nDSGkdGug;`AMeaCpn3F_iG=FMhrf(TOaxPU|yH5 z8>rQGIV9SI1DZO`m*!y}ckGW_#~!9<xc~T*5t+{*DSB{|#)<dr+jL(IQ_W4J9o@BO z@@K`1Kk+&_nTq_V3jFWY0(Zf*+~0j|Q5;A8)?H7B(2CVlf!2m8f1&K~i><G1CtW(| zx+$Z#y&=!62t9t{lWVe3PVn~x+=rs1vsmOPDySkXVq<ta#wV_6r0)z4$s_{wOArn0 zd^SCeslSeU<Ui(?W>G4@%n8Eg`k&u(9P8opS*d>!59G_dei~^;sZ*IJ)AlJ=I;|Rf zo$8?!3f#cL`s@V}$W=Oo4HY}H{+1TO&hWM_eT*!QT9hje3I4*f6!EQd;E~yA-32Z$ z{d1)fLheq`9C_z8^fRMm_vuMS95Tv}{|BW{5|e21p#I?A-KuL*m#G+T9zf&Mh6u=X zF4xqiuGXx)tmWCK14A*GLFOPY(^m}ZjF(!ua*nUPYtC>+<nLqE$Go0c_uVLUjDV-l zErKDWPw_E!xvT3!9rpWr7i7xNr6=?JgHBmek8;irL45^&7v?1HD{gCD5SK5VlH>9` z5VLPmN_+dd?s|Pjc-af0SyuVvWZ#j-a_YEe_Tt3XP#)pX>&svvj26n(_T$R8?M|n_ zov&U*RThSh4&*KGf#>?ypUJ~oy;t#fFH++7Crf!)Ru6^dQ2}eD*aNsFsA|=IxF!z~ zyYDLo9(hCoAsvZ`achfetSF|?x%stWd6|I5$zx^K8q3Kor`C3=Kkw<<mw5kWVvG9W zA2GP3@1N{QUdUTc9EZed%ilhoA@6VRn*56ePj8HF{IV`oJaVvtma&xwXa48nP?6(V zB~#eN-OI>6mfhmkmHCbO5YEMzQ1UGQc!j+G3g9$qX<N>jv?t!ZKfj>QUld?z8XiDQ zA5>xN3*IA34MTfP`!?@sQc2p1igl))=9RX`3c;1sn2ai&TO|zOp$?k44#&WP0oP&- zPsQerLW#rM$hh`LpYg&uh#dY$H&Bl0V9IMUG)9eD+R_J>Z2I2Z@y=T};QiL<a)d(D z)ArBU1o+*SH}tQd3VRXj^L2X=K^HEdeYSfe93v-9tt%dKhunWJL0MvTD!>!UsC|4t z{q;-HTkufr>4_czXUfBz;Jdod9wr;)2PR8f0%1x-q#t<BlxaTs2G`AdLuy|f|ID5) zi^P@vsvoqz_oH0a8L=zkI-N&(S?{WKv0-agO$TQm-PS|u!Fm1ns+Su;UM#)QZY4UL zxGyTTcep)=QlCo%!CLXBPO_BAe0`8nQ*kY-e_f7Gxph`XuaoZgci0<Tr=j3Mg6eS9 z3iIl>!@o^4=MF_PrWlnkyB|@L18g_6(k{9d9E^QH00<jy#PLvLmpOUStC)_qOB$#_ z_3!_ui?Gq3%aI84JD<Xf0214%A3gJAoGw*YDROA_7#~mvPn{HA_U^y*6B?ePBSt}{ z#0@&qkV^jC<WUOEyi<Dy#hM8=@}^<q^o*AugkOjWtKH%H(j2zjCfJI6rh=$1;R2BF zol&3w@WKbjPlG%(^Ip0Dpl8b)su!5a?YJ?44To;e7vM3*DG_ge(L^L4JKT%lOVt(O zKJ98*)`H`QIsSp%5h`6T?sYWT^ULZEEkJxYwqX)zu<bMExjs4Gs<6POwewn1SSFV+ z>m{ri?zA2xJ+_@BeqK$@S>SbIZAk6MHhlBXJscqc%xea3xcq!`_;7!p)q8|Z0K*R^ z_U^c+oa$&<H4+a?VQzW9f=t^&<>`xMxkJni6T{M#p0&nboq@gPEN6`Dz-_57;;%-b zsntG(j)lP6m0Y#`N9_zM0^}ay0QU|FpmpNzGdB5i5VMws3v6dmJ3TM$6IHMHozM=M z8%4RS+xz&$q}Ib#{2ySD5`&>LiKeaE!QXMlmBW6VGT^b&6w>rLcw40-1}VJN;iN&f z<DY2vJB^F2dkl-z`@60yocZm^8XsLT%Mo{pyv^^59jnh=G+fQ@-4UvhFK1{c+fN8Z z(gqsD*vU!?#uwc)kBjP_!2kQeUuWWvt@5zf@%tV7dYiG>1HTxH-I6BRmtQ^+QW(9v zLXy;LsK2}AAH=D#vxfD*q+if6q)X=ygqucSIDDjD=&7RK+yA-mr^`MX!`~l!M4#pT z+@sg4?QuBmCX4Um#t-ij{)}IXJ<qJw8sFmat_W~-O$<0YY_x$LzaI6ipCbw4gtdBf zR9n1<377eOJQFMGy_F(*Eu~Q*giis8;`cZ{qx_gKy7+B6LC7=lY-$68RwSjn4L2vT zuC(5Gv3p@AMTq`YP~*^9XR)TDC*EXzg9xJ3;bYs0ePx(re8g_$5}PN`8n2!))ul;A zWxlD4nHK<ecPS=<Gb;N1d4Nw3E%A9c?1y}n$6#&S<a0W~?xZ{Faz;5^lI=w*mn$hQ z>rKewz7CCY@U(UHy1Vxsp_wDUUy(2K1M})nO6!H*FU*Wv@(0FerLtYPDGjVnFm|EP z*<9q#rk+-^>?=CX11#=LC8pYo2LY<B&;M!VECZVS!v246Y&Z!SAt3?-1Sc&>2qL3X z3F(#)loSyJg$)p-)FEjQf`p{BG@>Y>GzyLu1nF+J=kWW#{J(sj`^8@Du2c6p*SW6i z`%%ADehYPiJ-zktMwLGi32_jQg4DPv*QhfT;RXeR%X+V3Z%}7MZ7^8OCJq=>&b`Nv zpRC9s)1e8nO$qcS(ziAfVpjxgd3D8+3DFRuhG$vI$O-mp!D9~k$drma+Pr+;0{J?a zE49*Is-U;$A3e8yA=^DD4$+2__W@h?6cJpEtI)q1Bv7R9XS#86cBkLvZ`O4A(e0E7 z6;4@g=?O}<2Wm-(x-HTr2-2>aI%jn8(e_x|9T~Rwf+k3Ie_i;=GvYA_4%1Mq@2(VE zY>Hbrx$+7GW}JCq`PA8f<)pbmH-^go?90OU%e+qz1G0H|?Zd72z&yV?H*|_jV_V>` zAuOdEU3P}P{hn1VPzSbxbg8eE9WpU_a3{hccXXYX9&|{z^#ikz!B9J+;ej9Q*;5iE zeJ|WkENm+Dn7Mq_Ed{w-XwPyE^0intL-XI)bYFk13P<O^A06m10V-q$`6@5@-I&wH zfpG8Oq?t<_;(C?HpAJnD>8!uGKErEWGpP51{O^liK!&t4Ax(;r-sb{oeh<7S?xzb$ zZf2Nlij#uMfChDQCT#00vQYHg1Y2p=TMW8U+!t;E^*Gn?6c%>~(h@~_;kz80%$pkN zhmo7*beR-`+$kE9@jn#5TQir$zphe6n^;sJxs%9rkT0*p%Nflv6?nq4TH%u3Ydtw) z;f|GC>cM1p^wE<&$>Jq1wV&W7gngm2RfhP8c^H<;so7gJ(xYO1`tWG8D+|<%P5zRa z`@S^DMnV|@g|AEivG+>0+K!1w2(9B84t=<o5gc(68hvq)h}=n1q$S>gjnD$+wlcym zdUQK^ohvzaiyhvBSCup1UKE|Y$;pCf#FD<UpCN{z{-R<UXRe^3akw091HxmzYaL__ zJT&cXO75=Q;7bpPiI6eKGRks+9bWDNBMz556MP}Al~n)8R7VF=3ET=f4&_CRVb`rI zBgqZ1X)lxKl>8CRys_S~hbjdfL(6HoY&0~S?Tb_W<JoV}d6rO9+%BK?CSwJrtN$Dy z#YE38Zk^5ZYU}Qm_FLR`^E&g{mU<}PooCMlXrWrs1C`(sF$EaWW%cqKCD%-0D&r3i z-roE$H{ZYg-ReWiuZphT^=1lNKYLE_%0Ey%>b8|YzGVG7Pt2KSOK1y$OJ>QbYvji( zeDos!=G{_GD<!N~*-JB3xfX`SC>u2UP->lwk2D=a8(}eBXni;Ed!Aqz0y8(MTgDa5 z9m*;%skf^Bd5!`S6jM4~k{lzd8&*zM-Jz|2B?7e(?s5wI1mN{*x+P%VjHA}R=u3SJ zCHxx$>`QaKO}i2Le+Ol!hta1{E}3x_ws}{BFRy*(g67H=yV>fQ`kS3&p~tTWN3>Q) zD$GNQ8K={~Y@W1SIegdE9+22x-?YfVn%Fy^MyPY*jD^8R6CPF<6qM28>Cp3BkN!GZ zY%*MmBI{pM_!r4>!Joz7)i#SV!VFPbx{XdBly(P>#C?VZ1W#s2#C83QK4jg;;wqtF z=25C^z7DV2I&PHSSJ~tAC)pLxewp6RK7Xh0Mx|xY7oiz`{KCy)(`HnNXS`iptA6fN zBjuC0o(4CtN=IFNBvf_vo#z2bY^S>fb2~k3z#?d~3ddN%;24Rc=1Ut?6HC9~!-`Y4 z%JduD=vC;!U`A9%w_OZbf{WTFCa!2wj!g}b<~+-yZ2_unHm$GyWkt_<;T)Kz6}Esw zFTM5G;dA3`liVE#C+<hC+Lu!Nzji&oAh{pvzQFQ{%oYXnTozv~tzG*Un8`?l{gKs} zUOy;(YDbMCxWPtJ{Tb$m$f_o~AJs|Y0ld49A>VN{aJ?A>TueUW1PfK(x0=#a0xq6p zkkb8a`Qb7j3?)i<-Y!EQM0EjPUwG#r26(l6b~nEKA_ySa>Frpk*|nPG*E7?kwUDBc zWmlKftT1y`jAze9{L2}duGU3hDj<1&B~}|MOKNMyB;}smy6@X1nk~E#2b#LNlXjnQ zlXb$bjO&RZsNtvAQCG;7t`^WBe7A^?!?uTUs_yz?%%sr<*(=#Y&oGnHf+hfOZ03Y5 z6%*Ph{yFg#f`hk-jYX6;qw$*yFNFJSGW9L#{^_H-s-~hCLA<(i#0Fgi)xS*Q^9&+} z%16nBFVl`S9Kv!HM?MPzle}?8wbkN<4;MHocZVYa_k_P!uBxAY<~$ufinh&E23qiF zE>;aWTqBB*eB_v5{r45%mB6l~_&<H~kb~zRP$)7}MjnN{BzrN43`mJ$RL{=s43BxI zfM67hvx+ii?&_Y6SOxNLD&k%7pRuH!*w}-k2XRr9)`XRT6~)H9;atA*FT8+0pdt*P zIFYzmf;@d3UHhBgICq7aVBoUx5lEqbWhbpn9GaONlT>=~WgpYrjTo~iDohY16U@`K z`Ako>;VRkdie;kD-@<L45zp=&>5Y{`$|civhp~%i5Wki@&-xN?hgCJ{pys26{GBDD zznPzmwL2dV7FZ07Gq0+-o{12iW<G8q-Vf6`-|sm_iI?9v)1P)AU)HN$HS3Iib<zRX zcoTD}R&>>a2=)BXYHv@oSGFyO-qS1=fDGE?Sw_#p+N#R9EWBn~^#;Dq`#r_T33`zh z+C2J*C)Y%I0*MuGBaG-58w=@Azl7SzJj2(Y0CK}VKDng4takh8v-0z3k$cV#&&|Lv z+-wz4U`bUBb?<CQZc<%OK^oL<`nwzklw|vn#bO>l0n6(fN>*8s1@(bVj;pI~z^85w zi8gPRiCg93ssr#^ksZeYMsx0y&45}H?Qdzz_gcjBAm-}OwWDRnORx}#<r_B50|)sc z|JAj_33O@(3I`8`eN^G_I8eT(BoBc|-`gh_>F`wP+Vsi9nYtJ7(d`p3bE6c~_?<)k z0^=7vZIYEDEeJ_nD58M>gC(~X0VLX~8-<pe8_2HnOlaUZ<?xCtc#0&_!`Uf8GhbLk zlm@Q<<v|Et+fh#NyW3)A(0s>INiG)^_UZTK2{&BfGmp{5*qhETDkaN0dL4{C`wcam zO!tiYq%;H3G^c8LcWlYmJE>q=m5?nJ;C9qU6b|;SFPBJt|5<xrT_tj3(@qFZbV%y; zdePTph1i>VH!FA{mVGX1q>lf?iL&c(qYK0Fprc+4;-Kx)j{`c@M~Q}Cb%b5lTS{c? zlRps~l6E`wI=+Z03(_wf2FCe)MG+d2-gYS5zsUKH_9>1-!Ek(|n7c{Qc{E{)v*p^c zL`)l3WP0$*{ZA*>33J0o$+B%lwDhUl6BOZfZYjq~3F4V+dshCR(4|W$J1b60yJgfa z*{m`Flet2Uj(7E&A0=@4#vvZ-mie8oc_dw60iAxSn7W%Jl1b@Pqqu3?Z*ztX;6FAm zEtEYKDu_)?g$hMNy_-x}aX(c<O*%Sclx3#JmcXaeH{>&J2cIZ`aYHa{z4g4`pf1Q` zM{m{yP#(_FaUe3T#7dz?--enw<fz>UeUvZrg&pe2)^c-<stA7Bng!i=_j~xNo}faS zDiWbKec#fwprhZ|!A*bp=Y@#Bx~24Q<?s1443&3$msh^!gjfFg4CV?GDcbPoFYuC% zB!7Oatr;vUQs;gX#YQ`>@aU6aMS^R`hnf&(U1c~f`RVdJU$RnLpCLh~yH;y82s9qa zPCVwJbX&^TvQM+TX25c_4Q5Zg!%HZm+^9-DPHQ=bIg32YU5BoEj%cogy27CZ73%Xb zM?piFEuLsyo&*o|>HKK~CJ~t;sIr@4!rE*nuY5e|jyz|np@b%PyT)HUz(FI1!_@T! zMrsrnc7&aBF`1tfCkKEPipp0^Mw#sm(GL)er{)|GIbO7f_w;I3R1>xj-sLLNhFV(> zTWOAMZ2&9E1Zk`191aaUjrf{x_`a6}7g!Het4ai)jHjy8+IlRSkl*(-WKQF4D#ak6 zTb5mo5@K8{U$S(Uj3(T&ARG-46Xq-+LqZHwu>x}Re3M&1E~zrKIl*>>g%7`(`9aOz zEnt=+QBg@T>;9_>H8a6)4m@K*jQzk2q240E)a3H*+1K9}e_oe$vI#8}^W9weO<ukj zNoE_i7~igzSx3NJHMLycli;Gi;a-NbM(-4qt5MCn_6c=yNbsR>pM+sOi2^G-#DOd1 zl=bQDe&Tr)jszFFzW2v;ae$4xOBJU~t<`)ubbDB)+~HpDla`Jlq5MBWfs^TrO4=W9 zz~Mc*ys5?@CdNfV3$ZR1zXO@|NSmYsUSRwc02O2zprFamsjN+Rj;r3}ux`-tM#ARY zUd^+AzLcn2lNOl~N=GDksGp_S2eD-2SK3$&VJQ}JOv32tpf1xJW?5|H%aWa=!f3+S znHGaQNu$UAt`-<4Hc{U@(?U~wE!c+9b`e{o-r<KuWIPxah%0zapLHzx&pD>e;LD)p zGy>l0qNyRV;CL2eca!DVU^BHK$cqxfdP7=<`$mr<U4*Ry@5<*<fmhsuQPW;^Yqq?< ze@}M|)<*brRegGGD}`F2$gB~$nu!K*D;ia7^63$`H`h|5>69UP-g>tv`=g6hyaPKK z_dJo3m>owGEBgUQ!a$*)h7()7o+-a3Wq-#f{v0AB3;w8TayU`JM~)pv%|Se9I9f_9 zZTBJu{R;i4P-chatI1cJ);H%mAJ8Y?Me#7Apb3rq|6W>4Tck!=T3hTn4u7>rC?`MN zk@&<$-@X!a{nw#O^8+@5S}kLJ#QGmeErr!nfJKq{HjEBYle1kO^%zI3^`WkG>2l0w zQ4`pq^jh6SP2ZZ|9dO9cud{ZQTc?6W#v#2o3cO@7Fkaf#3ioml;iobjQ7@gg9j}?} zuSOFb<S4N9t4$8xk61zlf8CT|9u9%Nu*?_5w`S=$@*p1zhbaNBn-gx?Y?UqFcO)g3 z@1vVDXJ|c}%B@p77Xsp|lq_5vgn1#53-!5GE2wW(uhT}SLP3STHWi7!{KzY|s@a%! z;skT?H?hzSyX#}K3`Y-(zMM)p9NK;lOonM29OUqVP^mr<>_$YI&-G{eM^s=n7<~<w zlNl`zJ#*Vj`06N$OSsIBhs+SK&nyQ*dw+-f@dyqQ$$EPOBw`hdu4+*@<Ve8qJxEnZ z{dui@@A{RE5lsrG4q;Q6>&q8!a=z!ZZq!POj@-c$NbOk!0Fg!aD#Cys{D-C;a|CVe z8zlR(aFK#W@D17OYc0fCPCgzpzx|ZF_R?Mo)A;t2?>MON<+8PNy-1%m+bT$)ow-Vc zz)0(6JT@rL7DUOkaVd`oY!4W79nlW&s!f4#%QF?IFg&ObH6coEL68{#J;>z_BOyo6 zHF~n`S%I`j-2D8{I;LV+*F9W?o@@NG%WL}Tl;w{3muL+XPF4#iM>8~{FD}J<%-5RA zxkQB3*eN@$m0o9p_JWenlh4>YDI`nYeW%~9`6DuaJV@u&V+ci%Uf{w;Ebvpi*z#W6 zmmS`IycO!%0qlpM{ntpXYmHZKNT9;fglBom-WGHy)Q@BKOZMI4IN7C<fYZ_j->{MW zNlZvs6*qq07i9^9&4u>zELa&I=)qY^?{6UeX7>I*LsMJG0jZefjj}Q&HAXlwTd#S| zlxE^rDPYsVm_B5CjW3A9yo<sY`1)(;2qPEgq)aV(?o<YryLa+|k6eVKC5nlD^kyDH z>6?8hom%i`HCFK@H?S4B4`h<{ej*sQkZytm$6(%4H&@7V>>D5vZhO45tbb|X1k-9< zg$ld}S!1VP89W&1Hqan4jwKnPe~&agG&`{#{q{$l++;Bdh0_>bMKSg)Yz725$t?c1 zuL`9P`>z$^!`!PDP)3x|i?u(9v#)Q@mXxQBU-}++Rfr@%q=3RDajYecT?7eB(MHxh zeCO%T&t;A%xU4pewKd37{F7V13+{K@G~avNin+8^r>~-cfnJ)?-R<C!`40a`YrGwL zI*d;3F_@5&N%v9ng4O4pUK8kMqgRXg{g!VQ;56H2WSy)&k$@Hlz<(mVBgFfp{zYy1 zGZj9D9ghoJa+l{U7IUAB*Y1<*+A6xz|6P;px!qnvJxk_oyL;bc<!hrdw5|q!w%J=_ z;x-YrMJEY;jhoz+;LPCIyJqvZjLYYBfq(r=`M<HjjIYGeGxEMDT(S8&R+_EOq4|Xk z=V0vzCnD@bsWQlty(Yz!G5yoI<STD=%}Mtp!|<-&0<vQ75cM9QCK+06uLl(f$~v~! z5+1^F8mQH?ah<auvfss*O}i1`S@WReQ_d0x{0xYmEpi|*)o57b*9-$ewHqZ7zIRlz zMdtWmtCDhNaRgbDm|u4)O9T{uQTR%RyBFuKKTqjuno6Z~J6X{KEK8e|W7<;xMlTKg zK5H}Q;6-*5A|um>81{9|K1pGpz-sq?iRGHW<R`!0D@LFG{_!{Q&j&{|VMO@3?hj6( zXQZ8i+-AtP{cfS4oZhMhFO^wmaHPGY<g0=?e8f;vZV?UTFx(}J2>20<sOAn0Gv}X= z=D$~Bt`E@A;bgT5$*rZKy>jG{`X*xQSs|GjzA%j7S>^^Tsj&@($j~}Bp~yE>(kg~B zrp$7D+RIYQAQ`?(Qr?leJ!)NFje}%Plh*Y=w=`K{qR@m)Mgrq}6)t9y1OLLK*3=2A z<uY{Wxi@>5d~)e~Toxrf*#8%eSM0_Uh$Rm3@n_zwBO4+jJzN`aS#^^LK{&6a#A?om z=HCy@WEMUjTPZhBcPKa)gf>&!s@xj7VGtymNm&DtUQxfzl{$4n2e9W*?}8Wdu9M#Z z`^T(b3{2BdPv;zk1r!P2=Ewet29ZG*U5P`Gx7v^)%B3UYm*K5|8pdbvGABY#UHmW} zH<R|5_ALeyFf7hiU*(C^hAO52@$(zgxc^fh7<6VRm$=Wv^!JEUol-1z$7KwL$k4MO zgc-YC8>qrn$Ec+1AHOof<M&vH%pNpzV@ME%d(ZM?377^ls!2<pgTD#>5CFFwJ!h%g z6jiO;EOht!4Axkk6O4z|RwJx=G;pu`{}dDGp&rb>lA8Nh{L}gPk!+=0rXz4sfj6*h znf~aI6b<Ac-0xG79_F@-y;-J}+GR>}WWi&M+^y`_$EJx}p6__F$AyGb5RpbhOwUG$ zRf_$tl+Gy(JAl90uBkCTGsu!~%pDz(e!Zf(20<Ov9@whMorrI7cK5fahcGDI%S17j zu~^e;q(;-7ewVYRs(TOyr48iLqfQT4{>`V|as;{mSbGMJp&#~g=ptE&P_gv#eAT20 z*EzK+MIN(J1HJR%5D~d5a=1Y)a^<XaJ%(g@Oa$aQdQRhk*O1og?x>2W3WDGUe$I5~ z>~pYfc686+ExSKRVN5TOP)0&8<#r=i_qh%1!dzfF6%NuVA$qbQFL$nrEK3icQsIDM zoi~*#0myLDLs=kc!|a$a!Z}OX1~gBAXOvhYB2%VHS}%cs^O9zn=!uh1hIMb#&`W)G z1gEsK*Y*Se6ya!FS=2B07+kcGna~3a-|T2|HPa|19>5jvm(dS?It3y=`xb;X(0yVB zA~-NhWV<h@!Xa$qMzXZ|*>yGtd5SS{?S(sM07+w>2S5_Bw=pnM<W#+@2^vd1c?RIb zvQZM-W*&IfaQv)+JCMUQ+~|8dl_0Lq)~6<d^7Z%W?oEe528DBWz7JaghVD6Vq{=Lo zeqrF^-+uxTwzZmZO?7K;^Z_I^^5$-tyYA-!7}nkXZjMP%oZXZ4L*QLva32+3)Q&)g zfSLBQ{Q|_&w^x!2wzk|yy0|rIv+j4t=uyI$GYkOr_TPd}gHkkTXbDA!_iVcu@9yXi z`<+Vx7X;setA+e6DBrhqpE<31m%E#Xpn_z&ceuMU#E(}sTsvJxzu^~)0|3zdjC$Vt zvKlP&8p1P0|Lu*Xh7_Q16ec3(=;QFh1A)vVR4--4iG(-+z{^y}RZ@(@(cnB5K<MN@ zzokD3VUnx<pru!o0;vsua@=Nu12-*RB$!aA(GN7&=7;0XBzjf`oLDNpjr%&AO>pzX zqS9HzvE&}G--ZlR4kJL;GqB&@imu8G3*HHXLv1D#-ghwD)HZ5jo!%1Lpomi!_nC`~ z0)mySIawf_Cp_Ys`jhku8ur5nlisE5$K+i;G{FS9b0%k#8-yNZL?8lKT*3y=_2!49 zddI8zw_FFq<I$~^TLBajh8b-c*rm_O4&ib<z9^{S?PMw#f%92H=J-wJ2g>BYYXwzl zN}YgE#7)pszz4maOD@dBm#Q~;Z)xvK0j6YR=V~=G@==#Tdr6|lIh|9uzaC#EZ!>{R zpH(+loDu?JcY%MofFB@0a}VKvl_99j*ZxD!1TWa_&awE&(iYPJRx{)XCmQ+1?2Rd* zI=T!YXt?ZzCtJgn&qDh<8)SxNZX85V{KGICbpA`)dg6YA<}qdl!(3(0d|$-%qUgX= zHtq;f(9z4zFpa@Gl?unEV#x#fLLP$NWlA<6zoLDm9VF16^ha3*s(tA&&;b4kcm}0f zSxZHN4A#L_j0G+!M}#yrMkW{_0@oYzdEK$?omvw?1NY|aAs~%w(~`lltltAeu|$Ae zB@Q6MR3U4@)J-Py6qmB1e5p9l?zPj04U8!Q`+E;d@)A=J%_ZVARV?n9lqK?2sQK&y zZI^pS*2T7_1!{SYS%&`rz-b6;GzpzIZuj3<bDfwy<_rIQpthPaHx;8jo!v#Y$+^jK zj30Fpr~QzbKFU*xA+|a=yII5@BpwM2Z?}LM7Ux$EX+~v|b%j0kJ_FvKe5T96$nsa( zU*(rUp~~Ws?7Y!|4<l(DI8OjV_DHr7W%(-6V#pFyO72CgY)Heq(<!YErGe$fljAC$ zh;YDXc7jnyx7fy;I<dyI-tm85)%4BzbtG8Mj?esLJqr3Q>{IzYA{JnnJ%IxO<dvT5 z1sy$&rJc}jzC2IIz|`ze`rDG%%^bwAuBYsP%GO+=VdsxNyiwF6!WuK^{@#A_^e2T# zGB1Q_vLFNnop~+-pxJk7f#-8{MkUOf3`|TVCbSsMnPZq|LGA>&D?3^K0IyM13AWo1 z@m?gKml(}azNt4TVxMm1(Phq3!T=})3qP#{@Fm-(nfih=G{QqjJZb#go8#gs?K7OS zKRw8b`hR$A02<M(3Og=C20NfO3Q4XuR<r<AwU4+5EfB!{a^id+b^<_WTif8Vr=9Uo z{5OZv7NcH@k`oE``Xu;YfT}Js)2w3Z_?}{8()c%L&ccN!ptD$nX+I=j_eHnpj!EFZ zz&+(<MIfUdpuqLvKiR_Z%A64BitDp0zfQijjciduLD;EIQyMWEd?1x7Xgi$>HOfk| z$7P<gbYDz?clvHQM0L~{(e#%Y-t3Ur{qM;@Q=N!A10NpT$itDs6Z@&9wSWe~o_MpY zi}r4C*S)(9+I*%HE@B3HfREduw4?elq8>}qcz0agM_b20&WE2=9q5Aj9sr#9Bduvl z-rUjM(6{d>$LA3fMQIQnbD^lY{s%EAgT-8F?LGdu4HHrj5cB~C#+42VfZM_HihQFq z!3%){ef$G(+y5QFgaHS*799WQC*c1*_J0ee|L-CH|D*C^C?_^Ij$WSlWr#h#L|gs3 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)% z>2(!o%MGRYV-`aSxU>f(%gb4ysCY=7p>X-B!wee6Hot?x#>=g@%fNvrNp|PG>deJV zQ%Pt#L7xFW7ZtBP7DoFR$h3AhrK!fS>&i`$F*6shsXz<2U6HihqQ(VBxMBuX5&8(B zJZh;1(c(6^tk?KR7pOyIG67rzxFJOE35$dLxqowrPB85Ig3=<sDU@g_-fKNHnbczl z{f3f%a^qs1E_YK5aMO|mMdJv<w^miw^h?p;bU6$yuRXSmw!GZ%^6lLQ5H5&_fxHC+ zX*`1~%0NyO_NN~uojui>^g`$d{VkPQ2hOa(odM2C%V2u0ez2Q)_xbW4NWUl-jxUKg z8qe|EZAh|Z^t=w*4Lj_cqi4<1vfNa?b^7GrFT5!)WP^=Q-Zm6`vxS2cwa-YG>t-Yw z^h0Jg^gqlSfBl{dC`ND=6Mp&w4(FYX4r5hkZGH)D#HXvftO{L8E*AiQNxZ;Q-UC2! zsE~L~TEz>zRnb#i0KjNOstXSPUNMa6g0y0sMxQC;`@tfi2MZ9(6%w&6xj3&9{ZRKv z^JW;2kkVds8`Q@+0BRC03hE~)TIJXvl_;tg9sa@jE8Fkau_d^;#Nud(PzZm-!n_iG zQF`}z{`E6#b|M%Jd@NHDhHf`Ax@m&D4dDSZqdh-_73cHOU>Yy?2CR|mDT9Y3XOynV zsX*z#Z*z$Cod()3p5aZGue*P_Q@lT6rAD4l#+T7IT?vXayy*;(JNx}kD4XKuKCqIs zN($Efi8e(2vZQ>Q4gIVq(3Nk>Jl7Ph9f*W#76ID)A%tYPc1dY0C}_=^k1?y2fd#f@ zaCL*JnPs3mjUuDiTT2}6J&sShL*FXvkn4!M92_{~Zh|I}Z}Yb4J#mMck5=DzQ(sj7 zZDG~n=C@!@X}|uys~n!J{Q6z=w_wqa59PQe@8-y662*C}Jv&*sd3d`#{10Eh;Y|<i zf8Wo`&GVV?En)0BnQ(6C=A{GcvY*SIYUti+Hh0dPoe^iQ6<mrBA2XiH2+VH?G5))F zUSAbK`s20HM<14tJYa{IG1$m8Q;gl${d6K0P1-Wx%2XeSzf!Mq3>V;WILF4jR&Z@` zR^clD5XL#XS7(?y%D<_#zgltYM&~;pVo(~4@p{niQ-DnvcgGU)4A<D#xtWTd56+u_ zoL1H-t0K!a*&4H(dwXJZ5LL9+-;Po~aS#q%b9W(KT-WP`el~E2O^eIvZJ6(h)A<fr z<N^be^rAuole{mY1iGt&bHU&|3rG3~)U~5stFUukbJ%OFqj�fSYNS;N-UAX{rp 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�W+4OkL8pg5B$yGt6^}@$(C0fnu<d{Q|)fu9P7`t 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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